Настройка IPSEC между облаком Azure и Linux

Пример настройки SITE-TO-SITE VPN между облаком Azure Pack от ActiveCloud и ALTLinux.

Сервером у нас будет Московское облако ActiveCloud, а ALTLinux будет выступать в качестве клиента, для этого будем использовать пакет strongswan. С точки зрения strongswan клиентская сторона - левая, а серверная (Azure) - правая. Клиентская сеть у нас будет 192.168.90.0/24, а сеть в облаке 192.168.91.0/24.Получается такая схема:

82.209.209.42 это внешний белый IP адрес на Linux машине, а 185.65.139.14 это белый адрес шлюза в облаке Azure, узнать его можно если нажать DASHBOARD в настройках сети:

Первым шагом сгенерируем PSK ключ, сделать это можно на любой линукс машине.

$ openssl rand -base64 48
lnQkQm7W2cd7ow6yXpbhzXJsEuCt7IpA6JrAEcmX+4Qh03JTCJE0NE0J0Ub/c5jS

Далее настроим все со стороны облака:

1. Переходим в Networks -> "наша сеть" ->SITE-TO-SITE VPN, внизу видим "+" с надписью "CREATE VPN", жмем сюда;

Вводим имя VPN-соединения и внешний IP адрес нашего Linux клиента, а так же ключ который ме сгенерировали ранее:

2. Переходим на следующий шаг. Тут заполняем адресные пространства сетей, которые находятся на стороне клиента, сетей может быть несколько

3 и 4 шаги позволяют ограничить полосы пропускания incomming и outgoing

Жмем на Complite и ждем несколько секунд пока VPN-соединение создается. В результате вы должны будете видеть нечто такое:

Все настройка облачной части закончена, переходим к настройке Linux-машины.

Для начала на клиентском линуксе поставим необходимый пакет:

# apt-get install strongswan

Далее запустим его

# service ipsec start

При первом запуске он создаст файл /etc/strongswan/ipsec.secrets

В который мы должны добавить наш PSK ключ, что бы получилось вот так:

[root@sf-srv strongswan]# cat ipsec.secrets
: RSA myKey.der
185.65.139.14 : PSK lnQkQm7W2cd7ow6yXpbhzXJsEuCt7IpA6JrAEcmX+4Qh03JTCJE0NE0J0Ub/c5jS

IP адрес указанный тут, это адрес шлюза в Azure.

Теперь отредактируем /etc/strongswan/ipsec.conf следующим образом:

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
        # strictcrlpolicy=yes
        # uniqueids = no
conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    authby=secret
conn Azure
    left=82.209.209.42
    leftsubnet=192.168.90.0/24
    leftfirewall=no
    right=185.65.139.14
    rightsubnet=192.168.91.0/24
    auto=add
    type=tunnel

Напоминаю, левая часть клиентская, т.е. наш линукс, указываем внешний адрес и leftsubnet, тоже самое с правой частью для Azure.

В основной конфиг /etc/strongswan/strongswan.conf мы должны добавить необходимые модули.

charon {
        threads = 16
        load = aes des sha1 sha2 md5 gmp random nonce hmac stroke kernel-netlink socket-default updown
}

Теперь перезапускаем ipsec

[root@sf-srv strongswan]# service ipsec restart
Stopping strongSwan IPsec...
Starting strongSwan 5.1.0 IPsec [starter]...
!! Your strongswan.conf contains manual plugin load options for charon.
!! This is recommended for experts only, see
!! http://wiki.strongswan.org/projects/strongswan/wiki/PluginLoad

И поднимаем сам тунель (указываем такое же имя как в конфигурации, т.е. Azure):

[root@sf-srv strongswan]# ipsec up Azure
initiating IKE_SA Azure[1] to 185.65.139.14
generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
sending packet: from 82.209.209.42[500] to 185.65.139.14[500] (676 bytes)
received packet: from 185.65.139.14[500] to 82.209.209.42[500] (38 bytes)
parsed IKE_SA_INIT response 0 [ N(INVAL_KE) ]
peer didn't accept DH group MODP_2048, it requested MODP_1024
initiating IKE_SA Azure[1] to 185.65.139.14
generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
sending packet: from 82.209.209.42[500] to 185.65.139.14[500] (548 bytes)
received packet: from 185.65.139.14[500] to 82.209.209.42[500] (384 bytes)
parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) V V V ]
authentication of '82.209.209.42' (myself) with pre-shared key
establishing CHILD_SA Azure
generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) N(ADD_4_ADDR) N(EAP_ONLY) ]
sending packet: from 82.209.209.42[4500] to 185.65.139.14[4500] (428 bytes)
received packet: from 185.65.139.14[4500] to 82.209.209.42[4500] (204 bytes)
parsed IKE_AUTH response 1 [ IDr AUTH N(MOBIKE_SUP) SA TSi TSr ]
authentication of '185.65.139.14' with pre-shared key successful
IKE_SA Azure[1] established between 82.209.209.42[82.209.209.42]...185.65.139.14[185.65.139.14]
scheduling reauthentication in 3413s
maximum IKE_SA lifetime 3593s
connection 'Azure' established successfully

Проверяем статус:

[root@sf-srv strongswan]# ipsec status
Security Associations (1 up, 0 connecting):
       Azure[1]: ESTABLISHED 20 seconds ago, 82.209.209.42[82.209.209.42]...185.65.139.14[185.65.139.14]
       Azure{1}:  INSTALLED, TUNNEL, ESP SPIs: c57d83d0_i d91d2ba8_o
       Azure{1}:   192.168.90.0/24 === 192.168.91.0/24

Еще отладочную информацию можно увидеть командой:

[root@sf-srv strongswan]# ip -s xfrm state
src 82.209.209.42 dst 185.65.139.14
        proto esp spi 0xde39cbdc(3728329692) reqid 2(0x00000002) mode tunnel
        replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
        auth-trunc hmac(sha1) 0xeccf3b4af91d5effcb3dd0a0a3f229d327c7ae2e (160 bits) 96
        enc cbc(aes) 0x98c85fffc7bc8de8f80cad9672b8b9600ce8dc5f513dbf62cfe04ad2da671c9d (256 bits)
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 914(sec), hard 1200(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          252(bytes), 3(packets)
          add 2016-10-14 17:04:43 use 2016-10-14 17:04:53
        stats:
          replay-window 0 replay 0 failed 0
src 185.65.139.14 dst 82.209.209.42
        proto esp spi 0xce627721(3462559521) reqid 2(0x00000002) mode tunnel
        replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
        auth-trunc hmac(sha1) 0xfe18996b3f433fec209d07181d2be0d436979494 (160 bits) 96
        enc cbc(aes) 0x3834ed7bcba2eda8061fb8172e8d036868c8d6801e956593a0b02b80adfcde2a (256 bits)
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 887(sec), hard 1200(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          252(bytes), 3(packets)
          add 2016-10-14 17:04:43 use 2016-10-14 17:04:53
        stats:
          replay-window 0 replay 0 failed 0

Попробуем попинговать с Linux машины виртуальную машину в нашем облаке Azure.

[root@sf-srv ~]# ping 192.168.91.2
PING 192.168.91.2 (192.168.91.2) 56(84) bytes of data.
64 bytes from 192.168.91.2: icmp_req=1 ttl=62 time=27.9 ms
64 bytes from 192.168.91.2: icmp_req=2 ttl=62 time=26.1 ms
64 bytes from 192.168.91.2: icmp_req=3 ttl=62 time=26.0 ms
^C
--- 192.168.91.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 26.008/26.699/27.917/0.883 ms

А теперь со стороны облака

[root@Konovalov001 ~]# ping 192.168.90.10
PING 192.168.90.10 (192.168.90.10) 56(84) bytes of data.
64 bytes from 192.168.90.10: icmp_seq=1 ttl=62 time=30.7 ms
64 bytes from 192.168.90.10: icmp_seq=2 ttl=62 time=27.1 ms
64 bytes from 192.168.90.10: icmp_seq=3 ttl=62 time=26.1 ms
^C
--- 192.168.90.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 26.158/28.007/30.700/1.957 ms
[root@Konovalov001 ~]#

Незабываем добавить сервис в автозагрузку

# chkconfig ipsec on

Не забывайте так же открыть порты 4500 (TCP) и 500 (TCP) на клиентском линуксе для работы IPSEC.

Больше информации о strongswan можно найти тут https://wiki.strongswan.org/projects/strongswan/wiki/

Как настроить VPN на Centos используя LibreSwan, смотрите тут: http://www.lin.by/2016/09/windows-azure-pack_22.html#more