Создание туннеля IPSec VPN

В сценарии рассматривается настройка IPSec-инстанса для передачи трафика от виртуальных машин Яндекс.Облака в туннель IPSec VPN с использованием демона strongSwan.

В примере туннель настраивается между двумя VPN-шлюзами. Для тестирования работы VPN-туннеля вам потребуется настроить шлюзы на обеих сторонах туннеля. Для этого можно воспользоваться другой сетью в Яндекс.Облаке или вашей локальной сетью.

Чтобы настроить VPN-туннель:

  1. Подготовьте облако к работе.
  2. Создайте и настройте IPSec-инстанс.
  3. Настройте IPsec.
  4. Настройте статическую маршрутизацию в облачной сети.
  5. Настройте IPSec на втором шлюзе.
  6. Проверьте работу VPN-туннеля.

Если IPSec-инстанс больше не нужен, удалите его.

Подготовьте облако к работе

Перед тем, как разворачивать сервер, нужно зарегистрироваться в Облаке и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Облако или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.

Подробнее об облаках и каталогах.

В стоимость поддержки инфраструктуры IPSec VPN входят:

Создайте сети и подсети

Для связи облачных ресурсов с интернетом необходимо иметь созданные сети и подсети.

Создайте IPSec-инстанс

Создайте в Облаке виртуальную машину, которая будет служить шлюзом для IPSec-туннеля.

  1. Откройте ваш каталог и нажмите кнопку Создать ресурс. Выберите пункт Виртуальная машина.

  2. Укажите имя виртуальной машины, например ipsec-instance.

  3. Выберите зону доступности, где находится подсеть, к которой будет подключен IPSec-инстанс, и где уже находится тестовая ВМ.

  4. В блоке Публичные образы нажмите кнопку Выбрать и выберите образ IPSec-инстанс.

  5. В блоке Сетевые настройки выберите требуемую сеть, подсеть и назначьте ВМ публичный IP-адрес из списка или автоматически.

    Используйте только статические публичные IP-адреса из списка, или сделайте IP-адрес созданной машины статическим. Динамический IP-адрес может измениться после перезагрузки ВМ и туннель перестанет работать.

  6. В поле Доступ укажите логин и SSH-ключ для доступа к ВМ.

  7. Нажмите кнопку Создать ВМ.

Настройте IPSec

Настройте шлюз с публичным IP-адресом и подсетью, который будет устанавливать IPSec-соединение с удаленным шлюзом.

В примере ниже публичный IP-адрес шлюза будет 130.193.32.25. За шлюзом будет находиться подсеть 10.128.0.0/24. Этот шлюз будет устанавливать IPSec-соединение с удаленным шлюзом с IP-адресом 1.1.1.1, за которым находится подсеть 192.168.0.0/24.

  1. Подключитесь к виртуальной машине по SSH:

    $ ssh 130.193.32.25
    
  2. Откройте конфигурацию IPSec:

    $ sudo nano /etc/ipsec.conf
    
  3. Приведите раздел config setup к следующему виду:

    config setup
            charondebug="all"
            uniqueids=yes
            strictcrlpolicy=no
    
  4. Задайте следующие параметры тестового соединения:

    • leftid — публичный IP-адрес IPSec-инстанса.
    • leftsubnet — CIDR подсети, к которой подключен IPSec-инстанс.
    • right — укажите публичный IP-адрес шлюза на другом конце VPN-туннеля.
    • rightsubnet — укажите CIDR подсети, к которой подключен VPN-шлюз на другом конце VPN-туннеля.
    • В параметрах ike и esp укажите алгоритмы шифрования, которые поддерживаются на удаленном шлюзе. Списки поддерживаемых алгоритмов шифрования см. на сайте strongSwan: IKEv1 и IKEv2.
    • Остальные настройки укажите, консультируясь с документацией strongSwan и учитывая настройки удаленного шлюза.

    Сохраните изменения и закройте файл.

    Должна получиться конфигурация вида:

    conn cloud-to-hq
          authby=secret
          left=%defaultroute
          leftid=130.193.32.25
          leftsubnet=10.128.0.0/24
          right=1.1.1.1
          rightsubnet=192.168.0.0/24
          ike=aes256-sha2_256-modp1024!
          esp=aes256-sha2_256!
          keyingtries=0
          ikelifetime=1h
          lifetime=8h
          dpddelay=30
          dpdtimeout=120
          dpdaction=restart
          auto=start
    
  5. Откройте файл /etc/ipsec.secrets и укажите в нем пароль для установки соединения:

    130.193.32.25 1.1.1.1 : PSK "<пароль>"
    
  6. Перезапустите strongSwan:

    $ systemctl restart strongswan
    

3. Настройте статическую маршрутизацию

Настройте маршрутизацию между IPSec-инстансом и заранее созданной виртуальной машиной без публичного IP-адреса.

Создайте таблицу маршрутизации и добавьте в нее статические маршруты:

  1. Откройте раздел Virtual Private Cloud в каталоге, где требуется создать статический маршрут.

  2. Выберите сеть, в которой требуется создать таблицу маршрутизации.

  3. Нажмите кнопку imageСоздать таблицу маршрутизации.

  4. Задайте имя таблицы маршрутизации.

    • Длина — от 3 до 63 символов.
    • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
    • Первый символ — буква. Последний символ — не дефис.
  5. Нажмите кнопку Добавить маршрут.

  6. В открывшемся окне введите префикс подсети назначения на удаленной стороне, в примере это 192.168.0.0/24.

  7. В поле Next hop укажите внутренний IP-адрес IPSec-шлюза. Нажмите кнопку Добавить.

  8. Нажмите кнопку Создать таблицу маршрутизации.

Чтобы использовать статические маршруты, необходимо привязать таблицу маршрутизации к подсети. Для этого:

  1. В строке нужной подсети нажмите кнопку image.
  2. В открывшемся меню выберите пункт Привязать таблицу маршрутизации.
  3. В открывшемся окне выберите созданную таблицу в списке.
  4. Нажмите кнопку Привязать.

Созданный маршрут можно применять и к другим подсетям в той же сети.

4. Настройте IPSec на другом шлюзе

Для работы VPN-туннеля требуется настроить еще один шлюз IPSec VPN. Вы можете создать в своем каталоге еще одну облачную сеть с подсетью и создать в ней IPSec-инстанс из образа, либо используйте в качестве шлюза машину в вашей локальной сети.

  1. Настройте strongSwan аналогично первому IPSec-шлюзу, но с зеркальными настройками IP-адресов и подсетей в файле /etc/ipsec.conf:

    conn hq-to-cloud
          authby=secret
          left=%defaultroute
          leftid=1.1.1.1
          leftsubnet=192.168.0.0/24
          right=130.193.32.25
          rightsubnet=10.128.0.0/24
          ike=aes256-sha2_256-modp1024!
          esp=aes256-sha2_256!
          keyingtries=0
          ikelifetime=1h
          lifetime=8h
          dpddelay=30
          dpdtimeout=120
          dpdaction=restart
          auto=start
    
  2. Укажите пароль для соединения в /etc/ipsec.secrets, указав IP-адреса шлюзов в обратном порядке:

    1.1.1.1 130.193.32.25 : PSK "<пароль>"
    
  3. Перезапустите strongSwan:

    $ systemctl restart strongswan
    

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

Чтобы убедиться, что туннель между шлюзами установлен, выполните на любом из шлюзов команду:

$ sudo ipsec status
Security Associations (1 up, 0 connecting):
 hq-to-cloud[3]: ESTABLISHED 29 minutes ago, 10.128.0.26[130.193.33.12]...192.168.0.23[1.1.1.1]
 hq-to-cloud{3}:  INSTALLED, TUNNEL, reqid 3, ESP in UDP SPIs: c7fa371d_i ce8b91ad_o
 hq-to-cloud{3}:   10.128.0.0/24 === 192.168.0.0/24

Статус ESTABLISHED означает, что туннель между шлюзами создан.

Проверить статус демона strongSwan можно командой systemctl status strongswan:

$ systemctl status strongswan
● strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
   Loaded: loaded (/lib/systemd/system/strongswan.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-06-20 14:54:07 UTC; 3 days ago
 Main PID: 481 (starter)
    Tasks: 18 (limit: 1117)
   CGroup: /system.slice/strongswan.service
           ├─481 /usr/lib/ipsec/starter --daemon charon --nofork
           └─527 /usr/lib/ipsec/charon

Посмотреть логи strongSwan можно с помощью команды journalctl -u strongswan. В логах находятся сведения об установке и работе соединения.

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

Если вам больше не нужен IPSec-инстанс, удалите ВМ ipsec-instance.