Страница 1 из 1

Cisco IPSEC/GRE + Linux Debian Strongswan (+NHRP, +BGP)

Добавлено: 29 авг 2017, 03:20
xor

Настраиваем 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.

  1. Подготовка туннеля на 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
    !
    
  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