Создание VPN соединения

В статье приведен пример создания и настройки VPN-соединения при помощи Terraform.

Пройдя шаги инструкции вы:

  1. Создадите файл конфигурации.
  2. Добавите ресурсы и источники данных для виртуальной сети.
  3. Добавите ресурс для VPN-соединения.
  4. Создадите добавленные ресурсы.

Полное описание параметров — в документации провайдера Terraform.

Подготовительные шаги

  1. Проверьте квоты. Убедитесь, что в выбранном регионе достаточно ресурсов для создания сетей. В разных регионах могут действовать разные квоты.

    При необходимости увеличьте квоты.

  2. Установите Terraform и настройте провайдер, если этого еще не сделано.

  3. Поместите файл с настройками провайдера в директорию, из которой вы будете работать с проектом, и из этой директории выполните команду:

    terraform init

    Дождитесь завершения инициализации Terraform.

1. Создайте файл конфигурации

В директории, из которой вы будете работать с проектом, создайте файл vpn.tf. В этом файле будет описана конфигурация создаваемого подключения.

2. Добавьте виртуальную сеть

  1. В зависимости от используемой SDN скопируйте в файл vpn.tf содержимое одной из вкладок ниже.

    data "vkcs_networking_network" "extnet" {  name = "ext-net"}resource "vkcs_networking_network" "network" {  name = "vpnaas_network"  sdn  = "neutron"}resource "vkcs_networking_subnet" "subnet" {  name = "vpnaas_subnet"  network_id = vkcs_networking_network.network.id  cidr = "192.168.199.0/24"}resource "vkcs_networking_router" "router" {  name = "router"  sdn  = "neutron"  external_network_id = data.vkcs_networking_network.extnet.id}resource "vkcs_networking_router_interface" "router_interface" {  router_id = vkcs_networking_router.router.id  subnet_id = vkcs_networking_subnet.subnet.id}

    Для создания сети потребуются следующие объекты:

    • Ресурсы (resource):

    • Источник данных (data source): vkcs_networking_network — внешняя сеть для получения публичного IP-адреса маршрутизатором, а также выделения Floating IP-адреса сущностям приватной сети.

  2. Отредактируйте значения настроек для вашего подключения.

Подробнее о создании виртуальных сетей с помощью Terraform — в практическом руководстве Создание сетей.

3. Добавьте VPN-соединение

  1. Скопируйте в файл vpn.tf настройки VPN-соединения:

    resource "vkcs_vpnaas_service" "service" {    router_id = vkcs_networking_router.router.id}resource "vkcs_vpnaas_ipsec_policy" "policy_1" {    name = "ipsec-policy"}resource "vkcs_vpnaas_ike_policy" "policy_2" {    name = "ike-policy"}resource "vkcs_vpnaas_endpoint_group" "group_1" {  type = "cidr"  endpoints = ["10.0.0.24/24", "10.0.0.25/24"]}resource "vkcs_vpnaas_endpoint_group" "group_2" {  type = "subnet"  endpoints = [ vkcs_networking_subnet.subnet.id ]}resource "vkcs_vpnaas_site_connection" "connection" {  name = "connection"  ikepolicy_id = vkcs_vpnaas_ike_policy.policy_2.id  ipsecpolicy_id = vkcs_vpnaas_ipsec_policy.policy_1.id  vpnservice_id = vkcs_vpnaas_service.service.id  psk = "secret"  peer_address = "192.168.10.1"  peer_id = "192.168.10.1"  local_ep_group_id = vkcs_vpnaas_endpoint_group.group_2.id  peer_ep_group_id = vkcs_vpnaas_endpoint_group.group_1.id  dpd {    action   = "restart"    timeout  = 42    interval = 21  }  depends_on = [vkcs_networking_router_interface.router_interface]}

    Для добавления VPN-соединения используются следующие ресурсы:

    • vkcs_vpnaas_service — управляет сервисом VPN внутри VK Cloud. Включает в себя параметр router_id — ID маршрутизатора. Изменив значение этого параметра, вы создадите новый сервис. Если необходимо использовать существующий маршрутизатор, укажите его ID (data.vkcs_networking_router.router.id или data.vkcs_dc_router.router.id), используя источник данных.

    • vkcs_vpnaas_ipsec_policy — управляет IPSec-политикой ресурса внутри VK Cloud. Включает в себя параметр name — имя создаваемой политики. Изменив значение этого параметра, вы поменяете имя существующей политики.

    • vkcs_vpnaas_ike_policy — управляет IKE-политикой ресурса внутри VK Cloud. Включает в себя параметр name — имя создаваемой политики. Изменив значение этого параметра, вы поменяете имя существующей политики.

    • vkcs_vpnaas_endpoint_group — управляет группой эндпоинтов внутри VK Cloud. Включает в себя следующие параметры:

      • type — тип эндпоинтов в группе. Может принимать значения subnet, cidr, network, router или vlan. Изменив значения этого параметра, вы создадите новую группу.
      • endpoints — список эндпоинтов одинакового типа, включаемых в группу эндпоинтов. Тип элементов списка определяется параметром type. Изменив значение параметра endpoints, вы создадите новую группу.
    • vkcs_vpnaas_site_connection — управляет ресурсом IPSec-подключения сайта внутри VK Cloud. Включает в себя следующие параметры:

      • name — имя соединения. Изменив значение этого параметра, вы измените имя существующего подключения.

      • ikepolicy_id — ID IKE-политики. Изменив значение этого параметра, вы создадите новое соединение.

      • ipsecpolicy_id — ID IPsec-политики. Изменив значение этого параметра, вы создадите новое соединение.

      • vpnservice_id — ID VPN-сервиса. Изменив значение этого параметра, вы создадите новое соединение.

      • psk — публичный ключ. Принимает любые значения типа string.

      • peer_address — FQDN или публичный IP-адрес (IPv4 или IPv6) peer-шлюза.

      • peer_id — ID peer-роутера для прохождения аутентификации. Может принимать значения типов <АДРЕС_IPv4>, <АДРЕС_IPv6>, <EMAIL>, <KEY_ID>, <FQDN>. Обычно значение этого параметра совпадает со значением параметра peer_address. Изменив значение этого параметра, вы поменяете политику существующего подключения.

      • local_ep_group_id — ID группы эндпоинтов, которая включает в себя частные подсети локального подключения. Требует указания параметра peer_ep_group_id, если не включен режим обратной совместимости, где значения peer_cidrs уже предоставляются вместе со значением subnet_id VPN-сервиса. Изменив значение этого параметра, вы измените существующее подключение.

      • peer_ep_group_id — ID группы эндпоинтов, которая включает в себя частные CIDR-адреса peer-подключения в формате <IP-АДРЕС>/<ПРЕФИКС>. Требует указания параметра local_ep_group_id, если не включен режим обратной совместимости, где значения peer_cidrs уже предоставляются вместе со значением subnet_id VPN-сервиса.

      • dpd — словарь настроек для протокола Dead Peer Detection (DPD). Включает в себя следующие ресурсы:

        • action — действие DPD. Возможные значения: clear, hold, restart, disabled, restart-by-peer. Значение по умолчанию: hold.
        • timeout — тайм-аут DPD в секундах. Принимаются данные типа positive integer, значения которых больше, чем interval. Значение по умолчанию: 120.
        • interval — интервал DPD в секундах. Принимаются данные типа positive integer. Значение по умолчанию: 30.
      • depends_on — VPN-соединение запустится после создания указанных ресурсов.

  2. Отредактируйте значения настроек для вашего подключения.

4. Создайте VPN-соединение

  1. Перейдите в директорию с файлом vpn.tf.

  2. Убедитесь, что конфигурационные файлы корректны и содержат нужные изменения:

    terraform validate && terraform plan
  3. Примените изменения:

    terraform apply

    При запросе подтверждения введите yes.

  4. Дождитесь завершения операции.

5. Проверьте применение конфигурации

Убедитесь, что сеть и инфраструктура были успешно созданы:

  1. Перейдите в личный кабинет VK Cloud.
  2. Перейдите в раздел Виртуальные сетиVPN. Убедитесь, что VPN-соединение создано и содержит все добавленные в примере ресурсы.

Удалите неиспользуемые ресурсы

Если созданные с помощью Terraform ресурсы больше не нужны, удалите их:

  1. Перейдите в директорию с файлами конфигурации Terraform.

  2. Выполните команду:

    terraform destroy

    При запросе подтверждения введите yes.

  3. Дождитесь завершения операции.