Skip to content

Развертывание IPsec шлюза в Yandex Cloud на базе решения strongSwan в контейнере для организации сетевой IP-связности между ресурсами в Yandex Cloud и ресурсами на удаленной площадке.

License

Notifications You must be signed in to change notification settings

yandex-cloud-examples/yc-ipsec-container-instance

Repository files navigation

Развертывание IPsec Container Instance в Yandex Cloud

Оглавление:

Какую задачу решаем

Развернуть IPsec Container Instance в формате одной виртуальной машины для организации сетевой IP-связности между ресурсами в Yandex Cloud и ресурсами на удаленной площадке.

Примечания:

  1. В данном развертывании резервирование (отказоустойчивость) IPsec Container Instance не предусматривается.
  2. В данном развертывании предполагается, что IPsec шлюз (на схеме Remote IPsec-GW) предварительно настроен и готов к взаимодействию с развертываемым IPsec Container Instance.

Топология развертывания

Типовая схема организации связи между Yandex Cloud и удаленной площадкой (на схеме обозначена как Remote site) представлена на схеме ниже.

Yandex Cloud IPsec Container Instance diagram

Требования к облачным ресурсам

Развертывание 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 Cloud
    • ike_proposal - шифр для IKE proposal.
    • esp_proposal - шифр для ESP proposal.
    • r_timeout, r_tries, r_base - параметры Retransmission timeouts для IPsec соединения.

Развертывание IPsec Container Instance с помощью Web-UI

  1. Перейти в консоль управления Yandex Cloud.

  2. Зарезервировать выделенный статический IP-адрес, на схеме обозначен как public-ip-1.

  3. Создать группу безопасности для outside интерфейса ВМ. При создании группы безопасности необходимо добавить в неё правила, описанные в разделе подготовка к развертыванию. При необходимости можно добавить в эту группу безопасности дополнительные правила.

  4. Создать таблицу маршрутизации VPC с набором маршрутов (CIDR) подсетей на удаленной площадке и привязать ее к нужным подсетям в сети inside-net.

  5. Создать виртуальную машину, используя параметры, описанные в разделе подготовка к развертыванию, например:

    • Образ загрузочного диска: 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
      • Нажать на кнопку Добавить сетевой интерфейс.
      • Сетевой интерфейс №1 (eth1):
        • Подсеть: inside-net/subnet-1
        • Публичный IP-адрес: Без адреса
        • Группы безопасности: -
        • раскрыть раздел "Дополнительно":
          • внутренний IPv4 адрес: Список
          • IP-адрес: Зарезервировать. Заполнить форму резервирования IP адреса, указав внутренний IP-адрес для inside интерфейса ВМ, например, 192.168.1.5
    • Доступ:
      • Логин: указать имя администратора ВМ, например, 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
    • Нажать на кнопку "Создать ВМ".
  6. После создания ВМ, подключиться к ней по SSH, используя публичный IP-адрес, и запустить настройку IPsec:

    ssh oper@<public-ip-1>
    sudo -i
    /usr/local/bin/ipsec-init.sh
  7. Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).

  8. В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:

    ssh oper@<public-ip-1>

    и провести диагностику состояния IPsec соединения с помощью команд:

    sudo -i
    swanctl -l
    swanctl -L
    swanctl --log

Развертывание IPsec Container Instance с помощью YC-CLI

  1. Если у вас еще нет интерфейса командной строки YC-CLI, установите и инициализируйте его.

  2. Загрузить развертывание из репозитория на github.com:

    git clone https://github.com/yandex-cloud-examples/yc-ipsec-instance.git
  3. Перейти в папку с развертыванием

    cd yc-ipsec-instance
  4. Заполнить значения параметров развертывания в файле ipsec-cli-deploy.sh

  5. Подготовить окружение:

    source env-yc.sh
  6. Выполнить развертывание IPsec Container Instance:

    ./ipsec-cli-deploy.sh
  7. Привязать созданную ранее таблицу маршрутизации VPC (на схеме обозначена как ipsec-rt) к нужным подсетям в сети inside-net.

  8. Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).

  9. В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:

    ssh oper@<public-ip-1>

    и провести диагностику состояния IPsec соединения с помощью команд:

    sudo -i
    swanctl -l
    swanctl -L
    swanctl --log

Развертывание IPsec Container Instance с помощью Terraform

  1. Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  2. Загрузить развертывание из репозитория на github.com:

    git clone https://github.com/yandex-cloud-examples/yc-ipsec-instance.git
  3. Перейти в папку с развертыванием

    cd yc-ipsec-instance
  4. Заполнить значения параметров развертывания в файле terraform.tfvars

  5. Подготовить окружение:

    source env-yc.sh
    terraform init
  6. Выполнить развертывание IPsec Container Instance:

    terraform apply
  7. Привязать созданную таблицу маршрутизации VPC (на схеме обозначена как ipsec-rt) к нужным подсетям в сети inside-net.

  8. Проверить сетевую связность между локальными ресурсами (на схеме это подсети с CIDR 192.168.x.0/24) и удаленными ресурсами (на схеме это подсети с CIDR 10.10.x.0/24).

  9. В случае отсутствия сетевой связности между локальными и удаленными ресурсами необходимо подключиться к ВМ по SSH:

    ssh oper@<public-ip-1>

    и провести диагностику состояния IPsec соединения с помощью команд:

    sudo -i
    swanctl -l
    swanctl -L
    swanctl --log

About

Развертывание IPsec шлюза в Yandex Cloud на базе решения strongSwan в контейнере для организации сетевой IP-связности между ресурсами в Yandex Cloud и ресурсами на удаленной площадке.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published