VK Cloud logo

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

Прежде всего убедитесь, что вы установили Terraform и создали файл main.tf с необходимыми провайдерами.

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

Создание виртуальной сети

Для создания VPN соединения нам потребуются виртуальная сеть с роутером. Если у вас уже есть существующая сеть и роутер, то перейдите на шаг Создание VPN соединения. Создадим сеть со следующими объектами:

  1. Ресурсы (resource):
  • vkcs_networking_network — сеть, в которой будет создана ВМ. В примере ниже сеть создается с именем «extnet».
  • vkcs_networking_subnet — подсеть из сети. В примере: «subnet».
  • vkcs_networking_router — роутер для внешней сети и взаимодействия с внешним миром. В примере: router.
  • vkcs_networking_router_interface — подключить роутер к внутренней сети.
  1. Источники данных (data source):
  • vkcs_networking_network – внешняя сеть для получения публичного IP (Floating IP).
1data "vkcs_networking_network" "extnet" {
2  name = "ext-net"
3}
4
5resource "vkcs_networking_network" "network" {
6  name = "vpnaas_network"
7}
8
9resource "vkcs_networking_subnet" "subnet" {
10 	network_id = "${vkcs_networking_network.network.id}"
11 	cidr = "192.168.199.0/24"
12 	ip_version = 4
13}
14
15resource "vkcs_networking_router" "router" {
16  name = "router"
17  external_network_id = data.vkcs_networking_network.extnet.id
18}
19
20resource "vkcs_networking_router_interface" "router_interface" {
21 	router_id = "${vkcs_networking_router.router.id}"
22 	subnet_id = "${vkcs_networking_subnet.subnet.id}"
23}

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

  1. vkcs_vpnaas_service — управляет сервисом VPN внутри VK Cloud. Включает в себя следующий параметр:
  • router_id — ID роутера. Изменение значения этого параметра создает новый сервис. Если необходимо использовать существующий роутер, то укажите его id (data.vkcs_networking_router.router.id), используя источник данных:
1data "vkcs_networking_router" "router" {
2  name = "router_1"
3}
  1. vkcs_vpnaas_ipsec_policy — управляет политикой IPSec ресурса внутри VK Cloud. Включается в себя следующий параметр:
  • name — имя создаваемой политики. Изменение значения этого параметра меняет имя существующей политики.
  1. vkcs_vpnaas_ike_policy — управляет политикой IKE ресурса внутри VK Cloud. Включает в себя следующий параметр:
  • name — имя создаваемой политики. Изменение значения этого параметра меняет имя существующей политики.
  1. vkcs_vpnaas_endpoint_group — управляет ресурсом «группа эндпоинтов» внутри VK Cloud. Включает в себя следующие параметр:
  • type — тип эндпоинтов в группе. Принимаются значения типов subnet, cidr, network, router или vlan. Изменение значения этого параметра создает новую группу.
  • endpoints — список эндпоинтов одинакового типа, включаемых в группу эндпоинтов. Тип значений зависит от типа эндпоинтов. Изменение значения этого параметра создает новую группу.
  1. vkcs_vpnaas_site_connection - управляет ресурсом подключения IPSec сайта внутри VK Cloud. Включает в себя следующие параметры:
  • name — имя соединения. Изменение значения этого параметра меняет имя существующего подключения.

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

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

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

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

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

  • peer_id — ID peer-роутера для прохождения аутентификации. Принимаются значения типов: адрес IPv4, адрес IPv6, e-mail, 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-подключения в формате <net_adress>/<префикс>. Требует указания параметра 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 соединение не запустится прежде чем не будет выполнено создание указанных ресурсов.

1resource "vkcs_vpnaas_service" "service" {
2  router_id = "${vkcs_networking_router.router.id}"
3}
4
5resource "vkcs_vpnaas_ipsec_policy" "policy_1" {
6	name = "ipsec-policy"
7}
8
9resource "vkcs_vpnaas_ike_policy" "policy_2" {
10  name = "ike-policy"
11}
12
13resource "vkcs_vpnaas_endpoint_group" "group_1" {
14	type = "cidr"
15	endpoints = ["10.0.0.24/24", "10.0.0.25/24"]
16}
17resource "vkcs_vpnaas_endpoint_group" "group_2" {
18	type = "subnet"
19	endpoints = [ "${vkcs_networking_subnet.subnet.id}" ]
20}
21
22resource "vkcs_vpnaas_site_connection" "connection" {
23	name = "connection"
24	ikepolicy_id = "${vkcs_vpnaas_ike_policy.policy_2.id}"
25	ipsecpolicy_id = "${vkcs_vpnaas_ipsec_policy.policy_1.id}"
26	vpnservice_id = "${vkcs_vpnaas_service.service.id}"
27	psk = "secret"
28	peer_address = "192.168.10.1"
29	peer_id = "192.168.10.1"
30	local_ep_group_id = "${vkcs_vpnaas_endpoint_group.group_2.id}"
31	peer_ep_group_id = "${vkcs_vpnaas_endpoint_group.group_1.id}"
32	dpd {
33		action   = "restart"
34		timeout  = 42
35		interval = 21
36	}
37	depends_on = ["vkcs_networking_router_interface.router_interface"]
38}

Добавьте обе части примера в файл vpn.tf и выполните следующие команды:

terraform init
terraform apply