Настройка 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