«Я думаю, нам с тобой пора перейти на следующий этап», -
сказала она мне за 5 минут до того, как мы расстались. Словом, туннель между линуксами построен, можно двигаться дальше и настраивать туннель между Linux и Cisco. Сначала построим обычный Site-to-site туннель. Дальше представим, что у нас Linux-сервер находится в облаке, сейчас
это очень модно, и построим к нему туннель из нашей маленькой сети с
использованием оборудования Cisco.
Итак, соединение между двумя разными платформами всегда интересно, ибо каждый
реализует протокол, так как считает нужным и у каждого свое «по-умолчанию». Со
стороны Linux будем использовать уже знакомый strongswan, а со стороны Cisco это будет роутер на IOS.
Топология изображена на рисунке.
Перейдем к конфигам,
конфигурационный файл ipsec.conf на
Linux имеет
такие строки
conn To-Ciscoleft=78.12.34.56leftsubnet=192.168.10.0/24right=193.98.76.54rightsubnet=10.100.0.0/16ike=3des-sha1-modp1024esp=3des-sha1,3des-md5ikelifetime=3600skeylife=1800stype=tunnelauthby=secretauto=startkeyexchange=ikev1pfs=no
Что добавилось после первого разбирательства с strongswan
ikelifetime
– указывается время жизни первой фазы.
keylife – время жизни второй фазы.
keyexchange
– указывает версию использования протокола IKE. Для соединения с Cisco указывайте первую версию.
По-умолчанию – вторая.
pfs
– указывает, использовать ли perfect forward secrecy.
Cisco его
не использует, и мы не будем.
Изменяем ключ в файле ipsec.secrets
193.98.76.54 78.12.34.56 : PSK "12345678Qq"
Перейдем к конфигу Cisco. Мы уже знакомились с процедурой настройки более детально,
поэтому повторяться не стану. Настраиваем первую фазу:
crypto isakmp policy 10encr 3desauthentication pre-sharegroup 2lifetime 3600
Задаем ключ для соединения
crypto isakmp key 12345678Qq address 193.98.76.54 no-xauth
Указываем время жизни второй фазы
crypto ipsec security-association lifetime seconds 1800
Указываем параметры шифрования на воторой фазе
crypto ipsec transform-set MyTS ah-sha-hmac esp-3des esp-sha-hmac
Создаем карту шифрования
crypto map myCM 10 ipsec-isakmp
set peer 193.98.76.54
set transform-set MyTS
match address ipsecacl
Создаем список доступа, для того, чтобы определить какой
трафик будет идти через туннель.
ip access-list extended ipsecacl
permit ip 192.168.10.0 0.0.0.255 10.100.0.0 0.0.255.255
Привязываем карту шифрования к интерфейсу
interface Vlan12
ip address 78.12.34.56 255.255.255.0
crypto map myCM
не забываем прописать маршрут в удаленную сеть.
ip route 10.100.0.0 255.255.0.0 193.98.76.54
На этом все, туннель должен подняться
EvilRouter#show crypto engine connections active
Crypto Engine Connections
ID Interface Type Algorithm Encrypt Decrypt IP-Address
5 Vl12 IPsec SHA+3DES+SHA 0 0 78.12.34.56
6 Vl12 IPsec SHA+3DES+SHA 0 0 78.12.34.56
1021 Vl12 IKE SHA+3DES 0 0 78.12.34.56
1022 Vl12 IKE SHA+3DES 0 0 78.12.34.56
EvilRouter#
Несколько слов на тот случай, если туннель не поднимается.
Простенький траблшутинг IPSec
на Cisco описан у меня здесь. Что касается Linux, то рекомендую читать лог, у strongswan он
весьма адекватный, как по мне, и чего-то понять таки можно. Лог пишется в файл
/var/log/auth.log
(в Debian) или в /var/log/secure (в RedHat).
Мониторить состояние туннеля можно командой ipsec status, но
там довольно много информации и если хочется просто узнать поднят туннель или
нет, то можно воспользоваться прелестью unix-овой командной строки и делать так:
root@debianCL:~# ipsec status | grep 'esp'000 #3: "To-Cisco" ah.da400bc2@78.12.34.56 ah.c9dd82cb@193.98.76.54 esp.bd8a925e@78.12.34.56 (35676 bytes, 12s ago) esp.cac24a70@193.98.76.54 (25256 bytes, 0s ago); tunnelroot@debianCL:~#
Если что-то выводит, значит, туннель поднят, можно даже
посмотреть, сколько байт прошло через туннель.
Случай номер два. Туннель в облако.
Используемая топология изображена на рисунке
Метод первый, немного кривоват, зато простой как три
копейки, практически ничего не надо менять. Смысл в том, чтобы на Linux указать на интерфейсе,
смотрящем в Интернет (сейчас мы допускаем, что у нас один сетевой интерфейс)
второй адрес, который будет соответствовать диапазону внутренних адресов, для
которых применяется шифрование.
root@debianCL:~# ifconfig eth1:1 10.100.0.1/16
Получится на одном интерфейсе eth1 два адреса:
root@debianCL:~# ifconfig
eth1 Link encap:Ethernet HWaddr 08:00:27:1b:a1:56
inet addr:193.98.76.54 Bcast:193.98.76.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe1b:a156/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8582 errors:0 dropped:0 overruns:0 frame:0
TX packets:9307 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1095471 (1.0 MiB) TX bytes:3032789 (2.8 MiB)
eth1:1 Link encap:Ethernet HWaddr 08:00:27:1b:a1:56
inet addr:10.100.0.1 Bcast:10.100.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
root@debianCL:~#
Таким образом, когда из внутренней сети я начну пинговать
хост 10.100.0.1, то данные уйдут в туннель.
Вариант второй: не такой кривой, как первый и тоже работает.
Так как за linux-ом
сети нет, а есть только один глобальный
адрес, то и шифровать будем только то, что идет из нашей локалки на глобальный
адрес linux-а и оттуда
наоборот. Для этого соответственным
образом изменяем access-list на
Cisco
ip access-list extended ipsecacl
permit ip 192.168.10.0 0.0.0.255 host 193.98.76.54
а на Linux изменяем файл ipsec.conf
conn To-Ciscoleft=78.12.34.56leftsubnet=192.168.10.0/24right=193.98.76.54ike=3des-sha1-modp1024esp=3des-sha1,3des-md5ikelifetime=3600skeylife=1800stype=tunnelauthby=secretauto=startkeyexchange=ikev1pfs=no
Вся разница заключается в том, что пропала строка rightsubnet так
как сети за Linux, как
уже говорилось, по сути нет. Посмотрим, что об этом думает команда ipsec status, вот часть ее вывода
root@debianCL:~# ipsec status
000 "To-Cisco": 193.98.76.54[193.98.76.54]...78.12.34.56[78.12.34.56]===192.168.10.0/24; erouted; eroute owner: #3
Вот такую он видит схему туннеля. Все как и должно быть.
Вариант третий: использовать обычный host-to-host VPN,
но на cisco настроить NAT.
Таким образом, все, что будет идти на Linux будет проходить через NAT и
потом шифроваться. Не проверял, но не вижу причин этому способу не работать.
No comments:
Post a Comment