Cisco IPSEC/GRE + Linux Debian Strongswan (+NHRP, +BGP)
Настраиваем IPSEC/GRE туннель между Cisco IOS и Linux
Рассмотрим несколько вариантов реализации симбиоза VPN туннелей между Cisco и Linux Debian.
Во всех случаях примем по умолчанию параметры шифрования: 3des/md5/dh1024/IKEv1, PSK
Условие А: Два сайта, на каждом по маршрутизатору. С одной стороны Cisco router, с другой стороны Linux Box. С обеих сторон есть публичный (белый) IP адрес.
Топология сети С1: Локальная сеть 192.168.100.0/24, WAN ip address 1.1.1.1, на роутере сайта блэкхол для приватных супернетов 10/8, 172.16/12 и 192.168/16.
Топология сети С2: Локальная сеть 192.168.200.0/24, WAN ip address 2.2.2.2.
-
Подготовка туннеля на Cisco IOS. Самая легкая, и самая понятная часть. Само собой должна быть приобретена и активирована лицензия для тяжелого шифрования (PayloadEncryption).
Код: Выделить всё
! crypto isakmp policy 20 encr aes 256 hash sha256 authentication pre-share group 2 ! crypto isakmp key SuperSecretPSK-12345 address 2.2.2.2 ! crypto ipsec transform-set ts-VPN esp-aes 256 esp-sha256-hmac mode tunnel ! crypto ipsec profile ipp-VPN set security-association lifetime seconds 1800 set transform-set ts-VPN ! interface GigabitEthernet0/0 description WAN ip address 1.1.1.1 255.255.255.0 ! interface GigabitEthernet0/1 description LAN ip address 192.168.100.1 255.255.255.0 ! interface Tunnel17228 description VPN tunnel ip address 172.28.0.1 255.255.255.252 ip mtu 1400 tunnel source GigabitEthernet0/0 tunnel destination 2.2.2.2 tunnel protection ipsec profile ipp-VPN ! ip route 0.0.0.0 0.0.0.0 1.1.1.254 name Default route ip route 10.0.0.0 255.0.0.0 Null 0 ip route 172.16.0.0 255.240.0.0 Null 0 ip route 192.168.0.0 255.255.0.0 Null 0 ip route 192.168.200.0 255.255.255.0 172.28.0.2 !
-
Теперь настройка другой стороны с линуксом. Вот тут начинаются невообразимые чудеса.
Сперва настроим sysctl для роутинга. Минимум опций такой, можете добавить еще какой-нибудь тюнинг.
root@vpn-router:~# nano /etc/sysctl.confКод: Выделить всё
net.ipv4.tcp_syncookies=1 net.ipv4.ip_forward=1
Для работы с GRE и IPIP туннелями нам потребуется загрузить специальные модули ядра, для этого откроем файл /etc/modules и внесем в него строки:
Код: Выделить всё
ip_gre ipip
Если вы не собираетесь использовать один из протоколов, то его модуль можно не подключать. Для вступления изменений в силу компьютер следует перезагрузить. Если такой возможности нет, то можно временно загрузить модули вручную, командой modprobe, например, для GRE:
Код: Выделить всё
modprobe ip_gre
После настроим сетевые интерфейсы
root@vpn-router:~# nano /etc/network/interfacesКод: Выделить всё
# WAN network interface allow-hotplug ens32 iface ens32 inet static address 2.2.2.2/24 gateway 2.2.2.254 # LAN network interface allow-hotplug ens33 iface ens33 inet static address 192.168.200.1/24 # VPN network interface auto tun1 iface tun1 inet tunnel address 172.28.0.2 netmask 255.255.255.252 mode gre local 2.2.2.2 endpoint 1.1.1.1 ttl 255 up ifconfig tun1 multicast mtu 1400 post-up ip route add 192.168.100.0/24 via 172.28.0.1
Далее установим и настроим пакеты strongswan. В конфигах оставляем параметры по умолчанию, за исключением тех, что будут указаны.
Код: Выделить всё
apt-get install strongswan strongswan-swanctl libstrongswan-extra-plugins strongswan-ike strongswan-ikev1 strongswan-pki
root@vpn-router:~# nano /etc/strongswan.d/charon.conf
Код: Выделить всё
# Options for the charon IKE daemon. charon { # Send Cisco Unity vendor ID payload (IKEv1 only). cisco_unity = yes # Send strongSwan vendor ID payload send_vendor_id = yes # Number of worker threads in charon. threads = 16 } }
root@vpn-router:~# nano /etc/strongswan.d/charon-logging.conf
Код: Выделить всё
charon { filelog { /var/log/charon.log { # add a timestamp prefix time_format = %b %e %T # loggers to files also accept the append option to open files in # append mode at startup (default is yes) append = no # the default loglevel for all daemon subsystems (defaults to 1). default = 1 # flush each line to disk flush_line = yes } } }
root@vpn-router:~# nano /etc/ipsec.conf
Код: Выделить всё
config setup # strictcrlpolicy=yes # uniqueids = no # Add connections here. include /etc/ipsec.d/CONNS/*.conf
root@vpn-router:~# nano /etc/ipsec.d/CONNS/site1.conf
Код: Выделить всё
config setup # loglevel configuration #charondebug="dmn 2, mgr 2, chd 2, net 2, ike 2, knl 3, cfg 0" # plutostart=no conn base-prop fragmentation=yes dpdaction=restart ike=aes256-sha256-modp1024 esp=aes256-sha256-modp1024 keyexchange=ikev1 type=transport keyingtries=%forever compress=no closeaction=restart dpddelay=30s dpdtimeout=150s dpdaction=restart aggressive=yes ikelifetime=86400s lifetime=1800s type=tunnel conn ipsec-tun1 also=base-prop leftauth=psk rightauth=psk auto=route # auto=start left=1.1.1.1 leftprotoport=47 right=2.2.2.2 rightprotoport=47
root@vpn-router:~# nano /etc/ipsec.secrets
Код: Выделить всё
1.1.1.1 2.2.2.2 : PSK "SuperSecretPSK-12345"
Если используется iptables или nftables, надо сделать правила.
Для iptables:Код: Выделить всё
$IPTABLES -A INPUT -i ens32 -p udp -d 2.2.2.2 -s 1.1.1.1 -m multiport --dports 500,4500 -j ACCEPT $IPTABLES -A INPUT -i ens32 -p esp -d 2.2.2.2 -s 1.1.1.1 -j ACCEPT $IPTABLES -A INPUT -i ens32 -p gre -d 2.2.2.2 -s 1.1.1.1 -j ACCEPT
Для nftables:
Код: Выделить всё
# ipsec ip protocol udp ip saddr 1.1.1.1 udp dport 500 accept ip protocol esp ip saddr 1.1.1.1 accept # gre tunnels ip protocol gre ip saddr 1.1.1.1 accept