Перейти к содержимому

Настройка 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. Для параметра 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. Подготовьте ресурсы на сторонней площадке

Заголовок раздела «2. Подготовьте ресурсы на сторонней площадке»
Примечание

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

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

    • Debian, Ubuntu
    • CentOS, Alma Linux
    bash
    sudo apt install strongswan strongswan-pki libcharon-extra-plugins strongswan-swanctl -y

    О других способах установки 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" # должен быть одинаковым на обоих шлюзах
    }
    }
    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
  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-адрес из подсети на сторонней площадке>

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

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