Настройка Site-to-Site VPN с помощью strongSwan
Чтобы создать защищенное соединение между ресурсами в облаке MWS и сторонней площадкой, например с сервером в другом проекте или в другом облаке, можно настроить Site-to-Site (S2S) VPN с использованием семейства протоколов IPsec.
Это руководство поможет вам настроить Site-to-Site VPN с помощью strongSwan — имплементации IPsec с открытым исходным кодом. Через VPN вы сможете связываться со сторонней подсетью по внутренним IP-адресам.
Для этого вам потребуются два IPsec-шлюза: один — в MWS Cloud Platform, второй — на сторонней площадке:

Чтобы настроить Site-to-Site VPN:
- Установите и настройте strongSwan на обоих IPsec-шлюзах.
1. Подготовьте ресурсы в MWS Cloud Platform
Создайте сеть на стороне MWS Cloud Platform. Для параметра MTU укажите значение
1460: это значение учитывает накладные расходы IPsec-туннеля и помогает избежать фрагментации пакетов.Создайте подсеть внутри созданной сети. Далее в качестве примера для этой подсети используется CIDR
192.168.1.0/24.Зарезервируйте в созданной сети внешний статический IP-адрес — далее для примера используется
198.51.100.2.Создайте виртуальную машину, которая будет использоваться в качестве IPsec-шлюза. Назначьте ей зарезервированный ранее внешний статический IP-адрес —
198.51.100.2.При создании виртуальной машины обязательно включите переадресацию пакетов (IP Forwarding), чтобы ВМ могла перенаправлять транзитный трафик.
2. Подготовьте ресурсы на сторонней площадке
Примечание
Для конкретной площадки могут потребоваться дополнительные настройки в зависимости от ее архитектуры и технических особенностей.
- Выберите сеть и подсеть, которая будет связана с MWS Cloud Platform через IPSec-шлюз.
- Подготовьте сервер, на котором будет установлен strongSwan и который будет использоваться в качестве IPsec-шлюза. Назначьте ему внешний статический IP-адрес — далее для примера используется
203.0.113.2. В качестве внутреннего IP-адрес сервера для примера будет использоваться10.0.1.10.
3. Настройте правила файрвола
Для IPsec-шлюза в MWS Cloud Platform создайте правила файрвола, которые разрешают:
- подключения по SSH (порт
22); - входящий UDP-трафик для портов
500и4500; - исходящий трафик на внешний IP-адрес IPsec-шлюза на сторонней площадке —
203.0.113.2.
Для IPsec-шлюза на сторонней площадке создайте правила файрвола, которые разрешают:
- входящий UDP-трафик на порты
500и4500; - входящий трафик из подсетей MWS Cloud Platform;
- исходящий трафик на внешний IP-адрес IPsec-шлюза в MWS Cloud Platform —
198.51.100.2.
4. Настройте маршрутизацию
В MWS Cloud Platform создайте маршрут для IPsec-шлюза и задайте его параметры:
- В качестве перехода (next hop) укажите внутренний IP-адрес этого IPsec-шлюза —
192.168.1.10. - В качестве префикса назначения (destination) укажите подсеть на сторонней площадке.
На сторонней площадке создайте маршрут для IPsec-шлюза и задайте его параметры:
- В качестве перехода (next hop) укажите внутренний IP-адрес этого IPsec-шлюза —
10.0.1.10. - В качестве префикса назначения (destination) укажите подсеть в MWS Cloud Platform —
192.168.1.0/24.
5. Установите и настройте strongSwan
Установите strongSwan на обоих шлюзах:
О других способах установки strongSwan см. в официальной документации.
Добавьте strongSwan в автозапуск на обоих шлюзах:
bashsudo systemctl enable strongswan-starter sudo systemctl start strongswan-starterНа любом из шлюзов сгенерируйте секретный ключ и сохраните его в отдельном файле:
bashsudo su openssl rand -base64 32 > /etc/swanctl/private/psk.txtСкопируйте сгенерированный ключ на другой шлюз.
На обоих шлюзах добавьте конфигурацию в файл
/etc/swanctl/swanctl.conf:На сторонней площадке
bashconnections { site-to-site { local_addrs = 10.0.1.10 #IP-адрес на сторонней площадке, на котором работает шлюз remote_addrs = 198.51.100.2 #внешний IP-адрес в MWS Cloud local { auth = psk } remote { auth = psk } version = 2 mobike = no dpd_delay = 30s children { net-to-net { local_ts = 10.10.1.0/24 #CIDR локальной сети, которая будет маршрутизироваться через VPN remote_ts = 192.168.1.0/24 #CIDR удаленной сети на стороне MWS Cloud Platform, доступной через VPN start_action = start # запускать при старте dpd_action = restart } } } } secrets { ike-site-to-site { secret = "file:/etc/swanctl/private/psk.txt" # должен быть одинаковым на обоих шлюзах } }На ВМ в MWS Cloud
bashconnections { site-to-site { local_addrs = 192.168.1.10 #внутренний IP-адрес в MWS Cloud remote_addrs = 203.0.113.2 #внешний IP-адрес на сторонней площадке local { auth = psk } remote { auth = psk } version = 2 mobike = no dpd_delay = 30s children { net-to-net { local_ts = 192.168.1.0/24 #CIDR локальной сети, которая будет маршрутизироваться через VPN remote_ts = 10.10.1.0/24 #CIDR удаленной сети на стороне peer, доступной через VPN start_action = start # запускать при старте dpd_action = restart } } } } secrets { ike-site-to-site { secret = "file:/etc/swanctl/private/psk.txt" # должен быть одинаковым на обоих шлюзах } }Активируйте на уровне операционной системы переадресацию пакетов (IP forwarding) на обоих IPsec-шлюзах:
bashecho "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p(опционально) Отключите на обоих IPsec-шлюзах ICMP-перенаправление:
bashecho "net.ipv4.conf.all.accept_redirects = 0" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.conf.all.send_redirects = 0" | sudo tee -a /etc/sysctl.conf sudo sysctl -pПримените новую конфигурацию на обоих IPsec-шлюзах:
bashsudo swanctl --load-allЕсли конфигурация применена успешно, в течение 30 секунд на консоль будет выведено сообщение:
bashsite-to-site: #1, ESTABLISHED, IKEv2 ... net-to-net: #2, INSTALLED, TUNNEL local 192.168.1.10 remote 10.0.1.10
6. Проверьте VPN-соединение
Проверьте, что VPN настроен корректно:
bashswanctl --list-sasВ ответе вы получите информацию о статусе VPN. Если VPN настроен корректно, для него будет указан статус
ESTABLISHED.Пример вывода команды
bashsite-to-site: #3, ESTABLISHED, IKEv2, 038b335c3c38ffcb_i* 526dab3542a54032_r local '192.168.1.4' @ 192.168.0.4[4500] remote '10.0.1.4' @ 2.59.83.194[4500] AES_CBC-128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256 established 429s ago, rekeying in 13572s net-to-net: #4, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_GCM_16-128 installed 309s ago, rekeying in 2963s, expires in 3651s in cfecd695, 168 bytes, 2 packets, 301s ago out c5d6b82c, 168 bytes, 2 packets, 301s ago local 192.168.0.0/24 192.168.1.0/24 remote 10.0.1.0/24Проверьте доступность ресурсов на сторонней площадке:
bashping <любой внутренний IP-адрес из подсети на сторонней площадке>Если ответы приходят, соединение настроено и работает корректно.
Удалите ресурсы
В руководстве были созданы ресурсы, которые тарифицируются. Если вы не планируете использовать их, удалите: