VK Cloud logo
Обновлена 19 марта 2024 г. в 14:14

Организация VPN-туннеля

Далее виртуальная сеть VK Cloud будет соединена с клиентской сетью через VPN-туннель. Для примера будет построен VPN-туннель до другой сети платформы VK Cloud, в качестве VPN-эндпоинта будет использоваться виртуальная машина. Также будут созданы несколько виртуальных машин для проверки работоспособности туннеля.

Инструкции по настройке VPN-туннеля можно адаптировать под работу с любым другим VPN-эндпоинтом, например, корпоративным межсетевым экраном или другим сетевым оборудованием.

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

  1. Убедитесь, что клиент OpenStack установлен, и пройдите аутентификацию в проекте.

  2. Создайте сети.

    Эта сеть будет выступать в роли клиентской сети.

    При создании сети задайте следующие параметры:

    • Имя сети: clientNet.

    • Доступ в интернет: убедитесь, что эта опция выбрана. Она позволит назначить виртуальным машинам в этой сети публичные плавающие IP-адреса.

    • Маршрутизатор: Создать новый.

    • Список подсетей: отредактируйте единственную подсеть в списке. Задайте следующие параметры для подсети:

      • Имя: clientSubnet.
      • Адрес: 172.16.0.0/29.
      • Шлюз: 172.16.0.1.
      • Включить DHCP: убедитесь, что эта опция выбрана.
      • Пул DHCP IP-адресов: 172.16.0.2 - 172.16.0.6.
      • Приватный DNS: убедитесь, что эта опция выбрана.
  3. Определите, какие маршрутизаторы были созданы для этих сетей. Эта информация понадобится при дальнейшей настройке VPN.

    Далее предполагается, что:

    • для сети clientNet был создан маршрутизатор router_1234;
    • для сети vkcloudNet был создан маршрутизатор router_5678.
  4. Определите IP-адрес интерфейса SNAT для маршрутизатора router_5678:

    1. Откройте страницу со списком подсетей для сети vkcloudNet.
    2. Нажмите на имя подсети vkcloudSubnet.
    3. Перейдите на вкладку Порты.
    4. Найдите в списке портов порт устройства SNAT и скопируйте его IP-адрес.
  5. Создайте виртуальную машину, которая будет выступать в качестве VPN-шлюза в клиентской сети clientNet, со следующими параметрами:

    • Имя виртуальной машины: client_vpn_gw.
    • Тип виртуальной машины: STD3-2-4.
    • Количество машин в конфигурации: одна.
    • Операционная система: Ubuntu 22.04.
    • Сеть: клиентская сеть и соответствующая подсеть clientNet: clientSubnet.
    • Ключ виртуальной машины: ключ, с помощью которого будет выполняться подключение по SSH.
    • Настройки Firewall: все разрешено (all).
    • Назначить внешний IP: убедитесь, что эта опция выбрана.

    Прочие параметры виртуальной машины выберите на свое усмотрение.

  6. Соберите сведения, необходимые для дальнейшей работы. Далее предполагается, что:

    Объект
    Значение
    Публичный IP-адрес маршрутизатора router_5678
    192.0.2.100
    IP-адрес виртуальной машины client_vpn_gw в подсети clientSubnet
    172.16.0.5
    Плавающий публичный IP-адрес виртуальной машины client_vpn_gw
    192.0.2.200
    Клиентская подсеть со стороны клиентского VPN-шлюза client_vpn_gw
    172.16.0.0/29
    Виртуальная подсеть со стороны облачного VPN-шлюза
    10.0.0.0/29
    IP-адрес порта SNAT в облачной подсети
    10.0.0.5

Example Infrastructure

2. Настройте VPN-туннель на стороне облачной сети

Создайте VPN со следующими параметрами:

Выберите IKE-политикаНовая IKE-политика, и задайте:

  • Имя политики: vkcloud-client-ike.
  • Время жизни ключа: 3600 секунд.
  • Алгоритм авторизации: sha256.
  • Алгоритм шифрования: aes-256.
  • Версия IKE: v2.
  • Группа Диффи-Хеллмана: group14.

3. Настройте VPN-туннель на стороне клиентской сети

  1. Отключите IP Source Guard для порта VPN-шлюза, чтобы он мог пересылать любой трафик:

    1. Найдите порт с приватным IP-адресом 172.16.0.5 виртуальной машины client_vpn_gw. Получите идентификатор этого порта.

    2. Разрешите прохождение трафика с любых адресов через этот порт:

      openstack port set <идентификатор порта> --allowed-address ip-address=0.0.0.0/0
  2. Подключитесь к виртуальной машине client_vpn_gw по SSH. Все дальнейшие действия должны выполняться на этой виртуальной машине.

  3. Включите IP Forwarding, чтобы виртуальная машина могла маршрутизировать трафик из приватной сети в VPN-туннель:

    echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.confsudo sysctl -p
  4. Установите StrongSwan — реализацию IPsec VPN для Linux:

    sudo apt updatesudo apt install -y strongswan libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
  5. Добавьте параметры VPN-соединения со стороны клиентской сети в файл /etc/ipsec.conf. Эти параметры — зеркальное отражение настроек туннеля, сделанных на предыдущем шаге.

    conn client-vkcloud-vpn   authby=secret   left=%defaultroute   leftid=192.0.2.200   leftsubnet=172.16.0.0/29   right=192.0.2.100   rightsubnet=10.0.0.0/29   ike=aes256-sha2_256-modp2048!   esp=aes256-sha2_256!   keyingtries=0   ikelifetime=3600   lifetime=8h   dpddelay=30   dpdtimeout=120   dpdaction=hold   auto=start
  6. Укажите в файле /etc/ipsec.secrets ключ совместного использования (PSK). Ключ должен совпадать с ключом, указанным ранее:

    192.0.2.200 192.0.2.100 : PSK "<pre-shared key, заданный ранее>"
  7. Перезапустите сервис StrongSwan:

    sudo systemctl restart strongswan-starter

4. Добавьте статические маршруты

Чтобы трафик проходил через VPN-туннель, требуется добавить статические маршруты:

  1. Откройте в личном кабинете страницу со списком подсетей для сети vkcloudNet.

  2. Раскройте меню подсети vkcloudSubnet и выберите пункт Редактировать подсеть.

  3. Убедитесь, что выбрана опция Показывать поле статических маршрутов.

  4. В поле пропишите статический маршрут до клиентской сети 172.16.0.0/29. В качестве next hop требуется указать IP-адрес интерфейса SNAT маршрутизатора router_5678 в облачной подсети vkcloudSubnet.

    172.16.0.0/29 - 10.0.0.5

5. Проверьте работоспособность VPN-туннеля

  1. Посмотрите состояние VPN-туннеля со стороны платформы VK Cloud.

    Для этого откройте страницу VPN vkcloud-client-vpn в личном кабинете и перейдите на вкладку Параметры туннеля. VPN должен находиться в статусе ACTIVE.

  2. Создайте группу правил файервола icmp, разрешающую ICMP-трафик.

    В этой группе создайте входящее правило:

    • Тип: ICMP.
    • Удаленный адрес: Все IP-адреса.

    Это нужно, чтобы тестовые виртуальные машины могли пинговать друг друга.

  3. Создайте две виртуальные машины:

    • clientVM:

      • в сети clientNet, подсети clientSubnet;
      • с плавающим IP-адресом для подключения к ней по SSH;
      • с группами правил файервола default, ssh, icmp.
    • vkcloudVM:

      • в сети vkcloudNet, подсети vkcloudSubnet;
      • с плавающим IP-адресом для подключения к ней по SSH;
      • с группами правил файервола default, ssh, icmp.
  4. Определите приватные IP-адреса виртуальных машин в соответствующих подсетях. Пусть:

    • clientVM имеет IP-адрес 172.16.0.4;
    • vkcloudVM имеет IP-адрес 10.0.0.4.
  5. Подключитесь к виртуальной машине vkcloudVM по SSH.

  6. Выполните пинг виртуальной машины clientVM с виртуальной машины vkcloudVM:

    ping 172.16.0.4

    Хост clientVM должен отвечать на пинг.

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

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

  1. Удалите виртуальные машины.

  2. Удалите VPN-туннель.

  3. Удалите статические маршруты, прописанные на стороне клиентской сети.

  4. Удалите маршрутизаторы клиентской и облачной сетей.

  5. Удалите клиентскую и облачную подсети и сети.

  6. Удалите плавающие IP-адреса.