Развертывание S2S VPN с помощью Cloud App strongSwan в Yandex Cloud
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
В этом руководстве вы развернете защищенное site‑to‑site (S2S) VPN‑соединение между облачной инфраструктурой в Yandex Cloud и удаленной площадкой с помощью IPsec‑шлюза на базе strongSwan
- быстро создать защищенный канал поверх публичного интернета;
- обеспечить шифрование трафика между подсетями;
- интегрировать облачные ресурсы в корпоративную сеть с сохранением контроля над маршрутизацией.
Примечание
Готовое приложение автоматизирует развертывание инфраструктуры в Yandex Cloud.
При использовании strongSwan S2S VPN на удаленной площадке (в вашем локальном ЦОД, филиале или другом облаке) необходима настройка вручную.
Чтобы развернуть защищенное соединение:
- Подготовьте облако к работе.
- Создайте сервисный аккаунт.
- Создайте облачную сеть.
- Зарезервируйте публичный статический IP-адрес.
- Создайте пару ключей SSH.
- Разверните приложение.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость развертывания инфраструктуры для данного решения входят:
- Плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud).
- Плата за использование статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- Плата за исходящий трафик (см. тарифы Yandex Virtual Private Cloud)
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Создайте сервисный аккаунт
Создайте сервисный аккаунт s2s-vpn-sa для автоматического создания ресурсов при установке приложения. Назначьте ему роли resource-manager.admin, iam.admin, compute.admin и vpc.admin.
-
Перейдите в сервис Identity and Access Management.
-
Нажмите Создать сервисный аккаунт.
-
Укажите имя сервисного аккаунта:
s2s-vpn-sa. -
Нажмите Добавить роль и выберите роли:
resource-manager.adminiam.admincompute.adminvpc.admin.
-
Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте сервисный аккаунт
s2s-vpn-sa:yc iam service-account create --name s2s-vpn-saРезультат:
id: nfersamh4sjq******** folder_id: b1gc1t4cb638******** created_at: "2023-03-21T10:36:29.726397755Z" name: s2s-vpn-saСохраните идентификатор сервисного аккаунта
s2s-vpn-sa(id) и каталога, в котором его создали (folder_id). -
Назначьте сервисному аккаунту роли
resource-manager.admin,iam.admin,compute.adminиvpc.adminна каталог:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role resource-manager.admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта> yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role iam.admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта> yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role compute.admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта> yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role vpc.admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Результат:
done (1s)
Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роли на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Создайте облачную сеть
Создайте облачную сеть, в которой будет размещена ВМ.
- Перейдите в сервис Virtual Private Cloud.
- Справа сверху нажмите Создать сеть.
- В поле Имя укажите
s2s-vpn-network. - В поле Дополнительно отключите опцию Создать подсети.
- Нажмите Создать сеть.
Выполните команду:
yc vpc network create s2s-vpn-network
Результат:
id: enp1gg8kr3pv********
folder_id: b1gt6g8ht345********
created_at: "2023-12-20T20:08:11Z"
name: s2s-vpn-network
default_security_group_id: enppne4l2eg5********
Чтобы создать облачную сеть, воспользуйтесь методом REST API create для ресурса Network или вызовом gRPC API NetworkService/Create.
Зарезервируйте публичный статический IP-адрес
Зарезервируйте статический публичный IP-адрес для ВМ, на которой будет установлено приложение.
- Перейдите в сервис Virtual Private Cloud.
- На панели слева выберите
IP-адреса и нажмите Зарезервировать адрес. - В открывшемся окне в поле Зона доступности выберите
kz1-bи нажмите Зарезервировать.
Создайте пару ключей SSH
Чтобы подключаться к ВМ по SSH, нужна пара ключей: открытый ключ размещается на ВМ, а закрытый ключ хранится у пользователя. Такой способ безопаснее, чем подключение по логину и паролю.
Примечание
В публичных образах Linux, предоставляемых Yandex Cloud, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.
Чтобы создать пару ключей:
-
Откройте терминал.
-
Создайте новый ключ с помощью команды
ssh-keygen:ssh-keygen -t ed25519 -C "<опциональный_комментарий>"Вы можете передать в параметре
-Cпустую строку, чтобы не добавлять комментарий, или не указывать параметр-Cвообще — в таком случае будет добавлен комментарий по умолчанию.После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением
.pub, закрытый ключ — в файле без расширения.По умолчанию команда предлагает сохранить ключ под именем
id_ed25519в директории/home/<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именемid_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.
Если у вас еще не установлен OpenSSH
-
Запустите
cmd.exeилиpowershell.exe(предварительно обновите PowerShell). -
Создайте новый ключ с помощью команды
ssh-keygen:ssh-keygen -t ed25519 -C "<опциональный_комментарий>"Вы можете передать в параметре
-Cпустую строку, чтобы не добавлять комментарий, или не указывать параметр-Cвообще — в таком случае будет добавлен комментарий по умолчанию.После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением
.pub, закрытый ключ — в файле без расширения.По умолчанию команда предлагает сохранить ключ под именем
id_ed25519в папкуC:\Users\<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именемid_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.
Создайте ключи с помощью приложения PuTTY:
-
Скачайте
и установите PuTTY. -
Добавьте папку с PuTTY в переменную
PATH:- Нажмите кнопку Пуск и в строке поиска Windows введите Изменение системных переменных среды.
- Справа снизу нажмите кнопку Переменные среды....
- В открывшемся окне найдите параметр
PATHи нажмите Изменить. - Добавьте путь к папке в список.
- Нажмите кнопку ОК.
-
Запустите приложение PuTTYgen.
-
В качестве типа генерируемой пары выберите EdDSA. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.

-
В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.
-
Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.
-
Нажмите кнопку Save public key и сохраните открытый ключ в файле
<имя_ключа>.pub.
Разверните приложение
Установите приложение
В результате установки приложения будут автоматически созданы ресурсы Yandex Cloud:
- сервисный аккаунт;
- подсеть;
- IP-адрес;
- таблица маршрутизации;
- группа безопасности;
- виртуальная машина.
Важно
Убедитесь, что в целевом облаке не израсходованы квоты:
- Количество сервисных аккаунтов
- Количество подсетей
- Количество статических публичных IP-адресов
- Количество таблиц маршрутизации
- Количество статических маршрутов
- Количество групп безопасности
- Количество виртуальных машин
- Количество дисков
- Общий объём SSD-дисков
- Общий объём RAM виртуальных машин
Если какая-либо квота израсходована, создайте запрос на расширение квоты и дождитесь его исполнения.
-
Перейдите в сервис Cloud Apps.
-
На панели слева выберите
Магазин приложений. -
В поле Поиск продуктов введите
strongswan, выберите strongSwan S2S VPN и нажмите Использовать. -
В открывшемся окне укажите:
- Имя —
s2s-vpn. - Сервисный аккаунт —
s2s-vpn-sa. - Сеть VPC —
s2s-vpn-network. - CIDR новой подсети —
10.130.0.0/24. - Зона новой подсети —
kz1-b. - IP-адрес удалённого шлюза — IP-адрес удаленного VPN-шлюза, который будет добавлен в конфигурацию strongSwan.
- CIDR удаленных подсетей — список подсетей в виде перечисления CIDR через запятую, которые будут автоматически добавлены в таблицу маршрутизации.
- Ключ SSH — содержимое открытого SSH-ключа, созданного ранее.
- IPsec IKE Proposal —
aes128gcm16-prfsha256-ecp256. - IPsec ESP Proposal —
aes128gcm16. - IPsec PSK — ключ IPsec Pre-Shared Key (PSK), который будет указан в конфигурации strongSwan.
- Имя —
-
Нажмите Установить и дождитесь завершения установки.
Привяжите таблицу маршрутизации
Чтобы трафик между облачной и удаленной сетями направлялся через VPN-туннель, свяжите таблицу маршрутизации и подсеть.
- Перейдите в сервис Virtual Private Cloud.
- На панели слева выберите
Подсети. - В строке автоматически созданной подсети
ipsec-sgw-...нажмите → Привязать таблицу маршрутизации и выберите автоматически созданную таблицуipsec-sgw-.... - Нажмите Привязать.
Выполните команду:
yc vpc subnet update <имя_автоматически_созданной_подсети> \
--route-table-name=<имя_автоматически_созданной_таблицы>
Результат:
id: e9b6n3jj3gh6********
folder_id: b1g681qpemb4********
created_at: "2024-05-19T13:24:58Z"
name: ipsec-sgw-kz1-b
network_id: enppoggov6ub********
zone_id: kz1-b
v4_cidr_blocks:
- 10.1.0.0/16
route_table_id: enp4v8foko6s********
dhcp_options: {}
Чтобы привязать таблицу маршрутизации к подсети, воспользуйтесь методом REST API update для ресурса Subnet или вызовом gRPC API SubnetService/Update.
Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре updateMask (одной строкой через запятую).
Настройте виртуальную машину
После установки приложения выполните финальную настройку IPsec-шлюза на ВМ.
-
Подключитесь к ВМ по SSH. Для этого используйте логин
adminи закрытый SSH-ключ созданный ранее. -
Получите права администратора:
sudo su -
Перейдите в домашнюю папку администратора и запустите скрипт:
cd /root ./update.shВ папке
/rootбудут созданы текстовые файлыipsec-*.txt, которые могут быть использованы как пример для настройки подключения на удаленном эндпоинте.Совет
В случае совпадения IP-диапазонов в Yandex Cloud и удаленной сети может потребоваться использование Source NAT. Для этого выполните команду:
iptables \ -t nat \ -A POSTROUTING \ -s <локальная_подсеть> \ -d <удаленная_подсеть> \ -j SNAT \ --to-source <новый_адрес>
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Удалите приложение strongSwan S2S VPN:
-
Перейдите в сервис Cloud Apps.
-
В строке с приложением нажмите
→ Удалить и подтвердите удаление.Вместе с приложением удалятся все связанные с ним ресурсы.
-
-
Удалите таблицу маршрутизации.
-
Удалите сервисный аккаунт.
-
Удалите статический публичный IP-адрес.
-
Удалите облачную сеть.