Оглавление:
- Введение
- Сетевая топология развертывания
- Требования к облачным ресурсам
- Особенности развертывания
- Подготовка к развертыванию
- Развертывание IPsec Container Instance с помощью Web-UI
- Развертывание IPsec Container Instance с помощью YC-CLI
- Развертывание IPsec Container Instance с помощью Terraform
Развернуть IPsec Container Instance в формате одной виртуальной машины для организации сетевой IP-связности между ресурсами в Yandex Cloud и ресурсами на удаленной площадке.
Примечания:
- В данном развертывании резервирование (отказоустойчивость)
IPsec Container Instanceне предусматривается. - В данном развертывании предполагается, что IPsec шлюз (на схеме
Remote IPsec-GW) предварительно настроен и готов к взаимодействию с развертываемымIPsec Container Instance.
Типовая схема организации связи между Yandex Cloud и удаленной площадкой (на схеме обозначена как Remote site) представлена на схеме ниже.
Развертывание IPsec Container Instance предполагается в уже существующей инфраструктуре Yandex Cloud. Перед началом развёртывания необходимо убедиться, что в вашей облачной инфраструктуре в Yandex Cloud уже созданы следующие ресурсы:
- Облако
- Каталог облачных ресурсов
- Две отдельных VPC сети с подсетями для подключения внешнего (
outside) и внутреннего (inside) сетевых интерфейсов IPsec Container Instance. Совмещатьoutsideиinsideтрафик на одном сетевом интерфейсе в данном развертывании не рекомендуется. На схеме сети VPC и их подсети обозначены следующим образом:- сеть
outside-netс подсетьюoutside-subnet - сеть
inside-netс подсетямиsubnet-1,subnet-2иsubnet-N
- сеть
В процессе развертывания IPsec Container Instance в облачной инфраструктуре дополнительно будут созданы следующие ресурсы:
- Статический публичный IP-адрес (на схеме
public-ip-1), который будет использоваться для отправки в Интернет и получения из Интернет трафика сетевого интерфейсаoutsideIPsec Container Instance. - Группа безопасности для сетевого интерфейса
outsideIPsec Container Instance. - Виртуальная машина (на схеме
IPsec Container Instance) на базе решения strongSwan, которая будет обеспечивать работу IPsec соединения с удаленной площадкой, а также маршрутизацию сетевого трафика между ресурсами в Yandex Cloud и удаленной площадкой. - Таблица маршрутизации VPC, которая обеспечивает маршрутизацию трафика в нужных подсетях в Yandex Cloud к подсетям на удаленной площадке через
IPsec Container Instance. На схеме обозначена какipsec-rt.
- ВМ с
IPsec Container Instanceразвертывается в одной из зон доступности, на схемеru-central1-d. Сетевые интерфейсыinsideиoutsideподключаются к подсетям в той же зоне доступности (на схеме этоsubnet-1иoutside-subnetсоответственно). - При создании ВМ необходимо добавить в неё
два сетевых интерфейсав следующем порядке: дляoutsideтрафика (eth0) иinsideтрафика (eth1). - Передача параметров для настройки
IPsec Container Instanceпроисходит с помощью сервиса метаданных ВМ. Список параметров зависит от выбранного инструмента развертывания (Web-UI, yc-CLI, Terraform). - Для направления сетевого трафика к подсетям на удаленной площадке из отдельной подсети в Yandex Cloud, необходимо привязать таблицу маршрутизации
ipsec-rtк этой подсети. В противном случае трафик в ВМ сIPsec Container Instanceнаправляться не будет. - В данном развертывании ПО
strongSwanзапускается внутри ВМIPsec Container Instanceв виде docker контейнера. - При изменении списка подсетей в параметре
remote_subnetsметаданных ВМ, эти изменения будут автоматически приводить к изменению набора статических маршрутов на уровне ВМ.
Перед выполнением развертывания необходимо определить его параметры:
-
Название ВМ, например,
ipsec-gateway. -
Зону доступности, где будет развертываться ВМ, например,
ru-central1-d. -
Названия подсетей для подключения сетевых интерфейсов ВМ
insideиoutside. -
Список подсетей, трафик из которых нужно будет маршрутизировать через
IPsec Container Instance. -
Название таблицы маршрутизации VPC с помощью которой трафик будет маршрутизироваться к
IPsec Container Instance. -
Кол-во ресурсов ВМ (CPU, RAM) для ВМ. В большинстве случаев будет достаточно
2 vCPU и 4GB RAM. -
Образ для развертывания
ipsec-container-instance. -
Название для группы безопасности
outsideинтерфейса ВМ и состав правил в ней. Пример конфигурации группы безопасности в формате YC-CLI:yc vpc security-group create --name ipsec-outside-sg --network-name=outside-net \ --rule "description=ipsec,direction=ingress,port=4500,protocol=udp,v4-cidrs=[0.0.0.0/0]" \ --rule "description=ssh,direction=ingress,port=22,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \ --rule "description=icmp,direction=ingress,protocol=icmp,v4-cidrs=[0.0.0.0/0]" \ --rule "description=permit-any,direction=egress,port=any,protocol=any,v4-cidrs=[0.0.0.0/0]"
-
Блок параметров метаданных
ipsecв формате YAML:policy_name: yc-ipsec remote_ip: x.x.x.x preshared_key: Sup@385paS4 remote_subnets: 10.10.11.0/24,10.10.12.0/24 ike_proposal: aes128gcm16-prfsha256-ecp256 esp_proposal: aes128gcm16 r_timeout: 3.0 r_tries: 3 r_base: 1.0
где,
policy_name- название соединения IPsec в конфигурации strongSwan.remote_ip- публичный IPv4 адрес IPsec шлюза удаленной площадки. На схеме обозначен какpublic-ip-2.preshared_key- ключ шифрования для организации IPsec соединения. Должен быть одинаковым с обеих сторон соединения.remote_subnets- набор IPv4 префиксов подсетей со стороны удаленной площадки, которые будут доступны через IPsec соединение в Yandex Cloudike_proposal- шифр для IKE proposal.esp_proposal- шифр для ESP proposal.r_timeout,r_tries,r_base- параметры Retransmission timeouts для IPsec соединения.
-
Перейти в консоль управления Yandex Cloud.
-
Зарезервировать выделенный статический IP-адрес, на схеме обозначен как
public-ip-1. -
Создать группу безопасности для
outsideинтерфейса ВМ. При создании группы безопасности необходимо добавить в неё правила, описанные в разделе подготовка к развертыванию. При необходимости можно добавить в эту группу безопасности дополнительные правила. -
Создать таблицу маршрутизации VPC с набором маршрутов (CIDR) подсетей на удаленной площадке и привязать ее к нужным подсетям в сети
inside-net. -
Создать виртуальную машину, используя параметры, описанные в разделе подготовка к развертыванию, например:
- Образ загрузочного диска:
Marketplace -> IPsec Container Instance - Вычислительные ресурсы:
Standard -> 2 vCPU 4ГБ RAM - Сетевые настройки:
- Сетевой интерфейс №0 (eth0):
- Подсеть:
outside-net/outside-subnet - Публичный IP-адрес:
Список-> выбрать из списка зарезервированный ранее публичный IP-адрес - Группы безопасности: выбрать из списка имя созданной ранее группы безопасности
- раскрыть раздел "Дополнительно":
- внутренний IPv4 адрес:
Список - IP-адрес:
Зарезервировать. Заполнить форму резервирования IP адреса, указав внутренний IP-адрес дляoutsideинтерфейса ВМ, например,192.168.0.5
- внутренний IPv4 адрес:
- Подсеть:
- Нажать на кнопку
Добавить сетевой интерфейс. - Сетевой интерфейс №1 (eth1):
- Подсеть:
inside-net/subnet-1 - Публичный IP-адрес:
Без адреса - Группы безопасности: -
- раскрыть раздел "Дополнительно":
- внутренний IPv4 адрес:
Список - IP-адрес:
Зарезервировать. Заполнить форму резервирования IP адреса, указав внутренний IP-адрес дляinsideинтерфейса ВМ, например,192.168.1.5
- внутренний IPv4 адрес:
- Подсеть:
- Сетевой интерфейс №0 (eth0):
- Доступ:
- Логин: указать имя администратора ВМ, например,
oper. Внимание! Именаrootиadminиспользовать запрещено! - SSH-ключ: выбрать из списка уже существующий или загрузить новый публичный SSH-ключ для администратора ВМ.
- Логин: указать имя администратора ВМ, например,
- Общая информация:
- Имя ВМ (пример):
ipsec-gateway
- Имя ВМ (пример):
- Раскрыть раздел
Метаданные:- Ключ:
ipsec - Значение:
policy_name: yc-ipsec remote_ip: <public-ip-2> preshared_key: Sup@385paS4 remote_subnets: 10.10.11.0/24,10.10.12.0/24 ike_proposal: aes128gcm16-prfsha256-ecp256 esp_proposal: aes128gcm16 r_timeout: 3.0 r_tries: 3 r_base: 1.0
- Ключ:
- Нажать на кнопку "Создать ВМ".
- Образ загрузочного диска:
-
После создания ВМ, подключиться к ней по SSH, используя публичный IP-адрес, и запустить настройку
IPsec:ssh oper@<public-ip-1> sudo -i /usr/local/bin/ipsec-init.sh
-
Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).
-
В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:
ssh oper@<public-ip-1>
и провести диагностику состояния
IPsecсоединения с помощью команд:sudo -i swanctl -l swanctl -L swanctl --log
-
Если у вас еще нет интерфейса командной строки
YC-CLI, установите и инициализируйте его. -
Загрузить развертывание из репозитория на github.com:
git clone https://github.com/yandex-cloud-examples/yc-ipsec-instance.git
-
Перейти в папку с развертыванием
cd yc-ipsec-instance -
Заполнить значения параметров развертывания в файле ipsec-cli-deploy.sh
-
Подготовить окружение:
source env-yc.sh -
Выполнить развертывание
IPsec Container Instance:./ipsec-cli-deploy.sh
-
Привязать созданную ранее таблицу маршрутизации VPC (на схеме обозначена как
ipsec-rt) к нужным подсетям в сетиinside-net. -
Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).
-
В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:
ssh oper@<public-ip-1>
и провести диагностику состояния
IPsecсоединения с помощью команд:sudo -i swanctl -l swanctl -L swanctl --log
-
Если у вас еще нет
Terraform, установите его и настройте провайдер Yandex Cloud. -
Загрузить развертывание из репозитория на github.com:
git clone https://github.com/yandex-cloud-examples/yc-ipsec-instance.git
-
Перейти в папку с развертыванием
cd yc-ipsec-instance -
Заполнить значения параметров развертывания в файле terraform.tfvars
-
Подготовить окружение:
source env-yc.sh terraform init -
Выполнить развертывание
IPsec Container Instance:terraform apply
-
Привязать созданную таблицу маршрутизации VPC (на схеме обозначена как
ipsec-rt) к нужным подсетям в сетиinside-net. -
Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).
-
В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:
ssh oper@<public-ip-1>
и провести диагностику состояния
IPsecсоединения с помощью команд:sudo -i swanctl -l swanctl -L swanctl --log