Создание туннеля IPSec VPN
В сценарии рассматривается настройка IPSec-инстанса для передачи трафика от виртуальных машин Yandex Cloud в туннель IPSec VPN с использованием демона strongSwan.
В примере туннель настраивается между двумя VPN-шлюзами. Для тестирования работы VPN-туннеля вам потребуется настроить шлюзы на обеих сторонах туннеля. Для этого можно воспользоваться другой сетью в Yandex Cloud или вашей локальной сетью.
Чтобы настроить VPN-туннель:
- Подготовьте облако к работе.
- Создайте и настройте IPSec-инстанс.
- Настройте IPSec.
- Настройте статическую маршрутизацию в облачной сети.
- Настройте IPSec на втором шлюзе.
- Проверьте работу IPSec-туннеля.
Если IPSec-инстанс больше не нужен, удалите его.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры IPSec VPN входят:
- плата за постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте сети и подсети
Для связи облачных ресурсов с интернетом необходимо иметь созданные сети и подсети.
Создайте IPSec-инстанс
Создайте в Yandex Cloud виртуальную машину, которая будет служить шлюзом для IPSec-туннеля.
-
Откройте ваш каталог и нажмите кнопку Создать ресурс. Выберите пункт Виртуальная машина.
-
Укажите имя виртуальной машины, например
ipsec-instance
. -
Выберите зону доступности, где находится подсеть, к которой будет подключен IPSec-инстанс, и где уже находится тестовая ВМ.
-
В блоке Выбор образа/загрузочного диска перейдите на вкладку Cloud Marketplace и выберите образ IPSec-инстанс.
-
В блоке Сетевые настройки выберите требуемую сеть, подсеть и назначьте ВМ публичный IP-адрес из списка или автоматически.
Используйте только статические публичные IP-адреса из списка, или сделайте IP-адрес созданной машины статическим. Динамический IP-адрес может измениться после перезагрузки ВМ и туннель перестанет работать.
-
В поле Доступ укажите логин и SSH-ключ для доступа к ВМ.
-
Нажмите кнопку Создать ВМ.
Настройте IPSec
Настройте шлюз с публичным IP-адресом и подсетью, который будет устанавливать IPSec-соединение с удаленным шлюзом.
В примере ниже публичный IP-адрес шлюза будет 130.193.32.25
. За шлюзом будет находиться подсеть 10.128.0.0/24
. Этот шлюз будет устанавливать IPSec-соединение с удаленным шлюзом с IP-адресом 1.1.1.1
, за которым находится подсеть 192.168.0.0/24
.
-
Подключитесь к виртуальной машине по SSH:
ssh 130.193.32.25
-
Откройте конфигурацию IPSec:
sudo nano /etc/ipsec.conf
-
Приведите раздел
config setup
к следующему виду:config setup charondebug="all" uniqueids=yes strictcrlpolicy=no
-
Задайте следующие параметры тестового соединения:
leftid
— публичный IP-адрес IPSec-инстанса.leftsubnet
— CIDR подсети, к которой подключен IPSec-инстанс.right
— укажите публичный IP-адрес шлюза на другом конце VPN-туннеля.rightsubnet
— укажите CIDR подсети, к которой подключен VPN-шлюз на другом конце VPN-туннеля.- В параметрах
ike
иesp
укажите алгоритмы шифрования, которые поддерживаются на удаленном шлюзе. Списки поддерживаемых алгоритмов шифрования см. на сайте strongSwan: IKEv1 и IKEv2. - Остальные настройки укажите, консультируясь с документацией strongSwan и учитывая настройки удаленного шлюза.
Сохраните изменения и закройте файл.
Должна получиться конфигурация вида:
conn cloud-to-hq authby=secret left=%defaultroute leftid=130.193.32.25 leftsubnet=10.128.0.0/24 right=1.1.1.1 rightsubnet=192.168.0.0/24 ike=aes256-sha2_256-modp1024! esp=aes256-sha2_256! keyingtries=0 ikelifetime=1h lifetime=8h dpddelay=30 dpdtimeout=120 dpdaction=restart auto=start
Если IPSec-инстанс и ресурсы, которые необходимо связать VPN-туннелем, находятся в одной подсетиДобавьте исключающие правила для шлюза по умолчанию и собственного интерфейса IPSec-инстанса:
conn passthrough-1 left=%defaultroute leftsubnet=<IP-адрес_шлюза_подсети_по_умолчанию> rightsubnet=10.0.0.0/8 type=passthrough auto=route conn passthrough-2 left=%defaultroute leftsubnet=<внутренний_IP-адрес_IPSec-инстанса> rightsubnet=10.0.0.0/8 type=passthrough auto=route
Где:
<IP-адрес_шлюза_подсети_по_умолчанию>
— CIDR подсети, в которой находятся IPSec-инстанс и ресурсы, которые необходимо связать VPN-туннелем.<внутренний_ip-адрес_IPSec-инстанса>
— внутренний IP-адрес ВМ с IPSec-инстансом.
IPSec-инстанс будет доступен для диагностики и отвечать по протоколу ICMP.
Примечание
Для повышения скорости передачи данных в туннеле можно использовать оптимизированные алгоритмы шифрования. Для этого добавьте в код выше следующие строки:
keyexchange=ikev2 ike=aes128gcm16-prfsha256-ecp256,aes256gcm16-prfsha384-ecp384! esp=aes128gcm16-ecp256,aes256gcm16-ecp384!
Возможность использования оптимизированных алгоритмов шифрования зависит от реализации стека IPSEC на используемой вами платформе.
-
Откройте файл
/etc/ipsec.secrets
и укажите в нем пароль для установки соединения:130.193.32.25 1.1.1.1 : PSK "<пароль>"
-
Перезапустите strongSwan:
systemctl restart strongswan-starter
Настройте статическую маршрутизацию
Настройте маршрутизацию между IPSec-инстансом и заранее созданной виртуальной машиной без публичного IP-адреса.
Создайте таблицу маршрутизации и добавьте в нее статические маршруты:
-
Откройте раздел Virtual Private Cloud в каталоге, где требуется создать статический маршрут.
-
Выберите сеть, в которой требуется создать таблицу маршрутизации.
-
Нажмите кнопку
Создать таблицу маршрутизации. -
Задайте имя таблицы маршрутизации.
- Длина — от 3 до 63 символов.
- Может содержать строчные буквы латинского алфавита, цифры и дефисы.
- Первый символ — буква. Последний символ — не дефис.
-
Нажмите кнопку Добавить маршрут.
-
В открывшемся окне введите префикс подсети назначения на удаленной стороне, в примере это
192.168.0.0/24
. -
В поле Next hop укажите внутренний IP-адрес IPSec-шлюза. Нажмите кнопку Добавить.
-
Нажмите кнопку Создать таблицу маршрутизации.
Чтобы использовать статические маршруты, необходимо привязать таблицу маршрутизации к подсети. Для этого:
- В строке нужной подсети нажмите кнопку
- В открывшемся меню выберите пункт Привязать таблицу маршрутизации.
- В открывшемся окне выберите созданную таблицу в списке.
- Нажмите кнопку Привязать.
Созданный маршрут можно применять и к другим подсетям в той же сети.
Настройте IPSec на другом шлюзе
Для работы VPN-туннеля требуется настроить еще один шлюз IPSec VPN. Вы можете создать в своем каталоге еще одну облачную сеть с подсетью и создать в ней IPSec-инстанс из образа, либо используйте в качестве шлюза машину в вашей локальной сети.
-
Настройте strongSwan аналогично первому IPSec-шлюзу, но с зеркальными настройками IP-адресов и подсетей в файле
/etc/ipsec.conf
:conn hq-to-cloud authby=secret left=%defaultroute leftid=1.1.1.1 leftsubnet=192.168.0.0/24 right=130.193.32.25 rightsubnet=10.128.0.0/24 ike=aes256-sha2_256-modp1024! esp=aes256-sha2_256! keyingtries=0 ikelifetime=1h lifetime=8h dpddelay=30 dpdtimeout=120 dpdaction=restart auto=start
Примечание
Для повышения скорости передачи данных в туннеле можно использовать оптимизированные алгоритмы шифрования. Для этого добавьте в код выше следующие строки:
keyexchange=ikev2 ike=aes128gcm16-prfsha256-ecp256,aes256gcm16-prfsha384-ecp384! esp=aes128gcm16-ecp256,aes256gcm16-ecp384!
Возможность использования оптимизированных алгоритмов шифрования зависит от реализации стека IPSEC на используемой вами платформе.
-
Укажите пароль для соединения в
/etc/ipsec.secrets
, указав IP-адреса шлюзов в обратном порядке:1.1.1.1 130.193.32.25 : PSK "<пароль>"
-
Перезапустите strongSwan:
systemctl restart strongswan-starter
Проверьте работу IPSec-туннеля
Чтобы убедиться, что туннель между шлюзами установлен, выполните на любом из шлюзов команду:
sudo ipsec status
Security Associations (1 up, 0 connecting):
hq-to-cloud[3]: ESTABLISHED 29 minutes ago, 10.128.0.26[130.193.33.12]...192.168.0.23[1.1.1.1]
hq-to-cloud{3}: INSTALLED, TUNNEL, reqid 3, ESP in UDP SPIs: c7fa371d_i ce8b91ad_o
hq-to-cloud{3}: 10.128.0.0/24 === 192.168.0.0/24
Статус ESTABLISHED
означает, что туннель между шлюзами создан.
Проверить статус демона strongSwan можно командой systemctl status strongswan-starter
:
systemctl status strongswan-starter
● strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
Loaded: loaded (/lib/systemd/system/strongswan-starter.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-06-20 14:54:07 UTC; 3 days ago
Main PID: 481 (starter)
Tasks: 18 (limit: 1117)
CGroup: /system.slice/strongswan-starter.service
├─481 /usr/lib/ipsec/starter --daemon charon --nofork
└─527 /usr/lib/ipsec/charon
Посмотреть логи strongSwan можно с помощью команды journalctl -u strongswan-starter
. В логах находятся сведения об установке и работе соединения.
Удалите созданные ресурсы
Если вам больше не нужен IPSec-инстанс, удалите ВМ ipsec-instance
.