Оглавление:
- Введение
- Сетевая топология развертывания
- Требования к облачным ресурсам
- Особенности развертывания
- Подготовка к развертыванию
- Развертывание 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
), который будет использоваться для отправки в Интернет и получения из Интернет трафика сетевого интерфейсаoutside
IPsec Container Instance. - Группа безопасности для сетевого интерфейса
outside
IPsec 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