Skip to content

Настройка Site-to-Site VPN с помощью strongSwan

Чтобы создать защищенное соединение между ресурсами в облаке MWS и сторонней площадкой, например с сервером в другом проекте или в другом облаке, можно настроить Site-to-Site (S2S) VPN с использованием семейства протоколов IPsec.

Это руководство поможет вам настроить Site-to-Site VPN с помощью strongSwan — имплементации IPsec с открытым исходным кодом. Через VPN вы сможете связываться со сторонней подсетью по внутренним IP-адресам.

Для этого вам потребуются два IPsec-шлюза: один — в MWS Cloud Platform, второй — на сторонней площадке:

Чтобы настроить Site-to-Site VPN:

  1. Установите и настройте strongSwan на обоих IPsec-шлюзах.

1. Подготовьте ресурсы в MWS Cloud Platform

  1. Создайте сеть на стороне MWS Cloud Platform. Для параметра MTU укажите значение 1460: это значение учитывает накладные расходы IPsec-туннеля и помогает избежать фрагментации пакетов.

  2. Создайте подсеть внутри созданной сети. Далее в качестве примера для этой подсети используется CIDR 192.168.1.0/24.

  3. Зарезервируйте в созданной сети внешний статический IP-адрес — далее для примера используется 198.51.100.2.

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

    При создании виртуальной машины обязательно включите переадресацию пакетов (IP Forwarding), чтобы ВМ могла перенаправлять транзитный трафик.

2. Подготовьте ресурсы на сторонней площадке

Примечание

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

  1. Выберите сеть и подсеть, которая будет связана с MWS Cloud Platform через IPSec-шлюз.
  2. Подготовьте сервер, на котором будет установлен strongSwan и который будет использоваться в качестве IPsec-шлюза. Назначьте ему внешний статический IP-адрес — далее для примера используется 203.0.113.2. В качестве внутреннего IP-адрес сервера для примера будет использоваться 10.0.1.10.

3. Настройте правила файрвола

  1. Для IPsec-шлюза в MWS Cloud Platform создайте правила файрвола, которые разрешают:

    • подключения по SSH (порт 22);
    • входящий UDP-трафик для портов 500 и 4500;
    • исходящий трафик на внешний IP-адрес IPsec-шлюза на сторонней площадке — 203.0.113.2.
  2. Для IPsec-шлюза на сторонней площадке создайте правила файрвола, которые разрешают:

    • входящий UDP-трафик на порты 500 и 4500;
    • входящий трафик из подсетей MWS Cloud Platform;
    • исходящий трафик на внешний IP-адрес IPsec-шлюза в MWS Cloud Platform — 198.51.100.2.

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

  1. В MWS Cloud Platform создайте маршрут для IPsec-шлюза и задайте его параметры:

    • В качестве перехода (next hop) укажите внутренний IP-адрес этого IPsec-шлюза — 192.168.1.10.
    • В качестве префикса назначения (destination) укажите подсеть на сторонней площадке.
  2. На сторонней площадке создайте маршрут для IPsec-шлюза и задайте его параметры:

    • В качестве перехода (next hop) укажите внутренний IP-адрес этого IPsec-шлюза — 10.0.1.10.
    • В качестве префикса назначения (destination) укажите подсеть в MWS Cloud Platform — 192.168.1.0/24.

5. Установите и настройте strongSwan

  1. Установите strongSwan на обоих шлюзах:

    О других способах установки strongSwan см. в официальной документации.

  2. Добавьте strongSwan в автозапуск на обоих шлюзах:

    bash
    sudo systemctl enable strongswan-starter
    sudo systemctl start strongswan-starter
  3. На любом из шлюзов сгенерируйте секретный ключ и сохраните его в отдельном файле:

    bash
    sudo su
    openssl rand -base64 32 > /etc/swanctl/private/psk.txt
  4. Скопируйте сгенерированный ключ на другой шлюз.

  5. На обоих шлюзах добавьте конфигурацию в файл /etc/swanctl/swanctl.conf:

    На сторонней площадке
    bash
    connections {
      site-to-site {
        local_addrs  = 10.0.1.10 #IP-адрес на сторонней площадке, на котором работает шлюз
        remote_addrs = 198.51.100.2 #внешний IP-адрес в MWS Cloud
    
        local {
          auth = psk
        }
    
        remote {
          auth = psk
        }
    
        version = 2
        mobike = no
        dpd_delay = 30s
    
        children {
          net-to-net {
            local_ts  =  10.10.1.0/24  #CIDR локальной сети, которая будет маршрутизироваться через VPN
            remote_ts =   192.168.1.0/24 #CIDR удаленной сети на стороне MWS Cloud Platform, доступной через VPN
            start_action = start          # запускать при старте
            dpd_action = restart
          }
        }
      }
    }
    
    secrets {
      ike-site-to-site {
        secret = "file:/etc/swanctl/private/psk.txt"   # должен быть одинаковым на обоих шлюзах
      }
    }
    На ВМ в MWS Cloud
    bash
    connections {
      site-to-site {
        local_addrs  = 192.168.1.10 #внутренний IP-адрес в MWS Cloud
        remote_addrs = 203.0.113.2 #внешний IP-адрес на сторонней площадке
    
        local {
          auth = psk
        }
    
        remote {
          auth = psk
        }
    
        version = 2
        mobike = no
        dpd_delay = 30s
    
        children {
          net-to-net {
            local_ts  =  192.168.1.0/24 #CIDR локальной сети, которая будет маршрутизироваться через VPN
            remote_ts = 10.10.1.0/24 #CIDR удаленной сети на стороне peer, доступной через VPN
            start_action = start          # запускать при старте
            dpd_action = restart
          }
        }
      }
    }
    
    secrets {
      ike-site-to-site {
        secret = "file:/etc/swanctl/private/psk.txt"   # должен быть одинаковым на обоих шлюзах
      }
    }
  6. Активируйте на уровне операционной системы переадресацию пакетов (IP forwarding) на обоих IPsec-шлюзах:

    bash
    echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  7. (опционально) Отключите на обоих IPsec-шлюзах ICMP-перенаправление:

    bash
    echo "net.ipv4.conf.all.accept_redirects = 0" | sudo tee -a /etc/sysctl.conf
    echo "net.ipv4.conf.all.send_redirects = 0" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  8. Примените новую конфигурацию на обоих IPsec-шлюзах:

    bash
    sudo swanctl --load-all

    Если конфигурация применена успешно, в течение 30 секунд на консоль будет выведено сообщение:

    bash
    site-to-site: #1, ESTABLISHED, IKEv2
     ...
    net-to-net: #2, INSTALLED, TUNNEL
      local 192.168.1.10
      remote 10.0.1.10

6. Проверьте VPN-соединение

  1. Проверьте, что VPN настроен корректно:

    bash
    swanctl --list-sas

    В ответе вы получите информацию о статусе VPN. Если VPN настроен корректно, для него будет указан статус ESTABLISHED.

    Пример вывода команды
    bash
    site-to-site: #3, ESTABLISHED, IKEv2, 038b335c3c38ffcb_i* 526dab3542a54032_r
      local  '192.168.1.4' @ 192.168.0.4[4500]
      remote '10.0.1.4' @ 2.59.83.194[4500]
      AES_CBC-128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256
      established 429s ago, rekeying in 13572s
      net-to-net: #4, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_GCM_16-128
        installed 309s ago, rekeying in 2963s, expires in 3651s
        in  cfecd695,    168 bytes,     2 packets,   301s ago
        out c5d6b82c,    168 bytes,     2 packets,   301s ago
        local  192.168.0.0/24 192.168.1.0/24
        remote 10.0.1.0/24
  2. Проверьте доступность ресурсов на сторонней площадке:

    bash
    ping <любой внутренний IP-адрес из подсети на сторонней площадке>

    Если ответы приходят, соединение настроено и работает корректно.

Удалите ресурсы

В руководстве были созданы ресурсы, которые тарифицируются. Если вы не планируете использовать их, удалите: