Настройка site-to-site VPN с помощью strongSwan
В разделе описано, как настроить сетевую связность между инфраструктурой в облаке Cloud.ru Evolution и некоторой удаленной стороной. На практике в качестве удаленной стороны может выступать, например, сетевая инфраструктура в офисе или в другом облаке.
Для организации защищенного соединения будет настроен IPsec-туннель с помощью ПО strongSwan, где в качестве одной из сторон выступает инфраструктура в облаке Cloud.ru Evolution. Виртуальная машина в облаке используется как VPN-шлюз, через который другие машины из этого облака отправляют трафик в удаленную подсеть. Такой туннель позволяет безопасно передавать трафик между приватными сетями через интернет.
В качестве удаленной стороны развернем аналогичную инфраструктуру на платформе Cloud.ru Advanced.
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
-
Убедитесь, что для вашей учетной записи достаточно прав на проект. При необходимости настройте права или запросите их у администратора.
Разверните инфраструктуру на стороне Evolution
На стороне облака Evolution необходимо развернуть следующие ресурсы:
-
виртуальную сеть «cloud-vpc»;
-
подсеть «cloud-subnet», в которой размещаются виртуальные машины;
-
группу безопасности «cloud-sg» для управления трафиком виртуальных машин;
-
ВМ «cloud-gateway» с публичным IP-адресом, которая выполняет роль облачного VPN-шлюза;
-
ВМ «cloud-vm» без публичного IP-адреса, которая выполняет роль клиентской машины в облаке.
Создайте VPC
-
Перейдите в личный кабинет платформы Evolution.
-
На верхней панели слева нажмите
и выберите Сеть → VPC.
-
Нажмите Создать VPC.
-
Укажите название VPC — «cloud-vpc».
-
Нажмите Создать.
Создайте подсеть
-
На верхней панели слева нажмите
и выберите Сеть → Подсети.
-
Нажмите Создать подсеть.
-
Укажите настройки:
-
Название — «cloud-subnet».
-
VPC — «cloud-vpc».
-
Зона доступности — «ru.AZ-1».
-
Адрес — 172.16.0.0/24.
-
-
Нажмите Создать.
-
Скопируйте и сохраните адрес подсети: он потребуются для дальнейшей настройки.
Создайте группу безопасности для VPN-шлюза
Группы безопасности в облаке Evolution позволяют контролировать входящий и исходящий трафик для создаваемых ресурсов.
-
На верхней панели слева нажмите
и выберите Сеть → Группы безопасности.
-
Нажмите Создать группу безопасности.
-
В поле Зона доступности выберите «ru.AZ-1».
-
Укажите название группы безопасности — «cloud-sg».
-
Добавьте правила для исходящего трафика:
-
В блоке Правила исходящего трафика нажмите Добавить правило.
-
Создайте правило со следующими параметрами:
-
Протокол — «Любой».
-
Порт — оставьте пустым.
-
Тип источника — «IP-адрес».
-
Источник — «0.0.0.0/0».
-
-
Нажмите Создать.
-
-
Нажмите Создать.
После создания удаленного VPN-шлюза на платформе Advanced в эту группу необходимо добавить правила для входящего трафика.
Создайте облачный VPN-шлюз
Облачный VPN-шлюз будет принимать трафик от клиентских ВМ и направлять его в удаленную подсеть.
-
На верхней панели слева нажмите
и выберите Инфраструктура → Виртуальные машины.
-
Нажмите Создать виртуальную машину.
-
Введите название виртуальной машины — «cloud-gateway».
-
Укажите настройки:
-
Зона доступности — «ru.AZ-1».
-
Образ — на вкладке Маркетплейс выберите «strongSwan».
-
Гарантированная доля vCPU — 10%.
-
-
Нажмите Продолжить.
-
Подключите ВМ к подсети:
-
В блоке Сетевые настройки нажмите Подключить к подсети.
-
В поле Подсети выберите подсеть «cloud-subnet».
-
В поле Группы безопасности выберите группу «cloud-sg».
-
Нажмите Подключить.
-
-
Назначьте ВМ публичный IP-адрес:
-
В поле Тип IP выберите Плавающий.
-
Нажмите Арендовать новый.
-
В поле Интерфейс выберите сетевой интерфейс, подключенный к подсети «cloud-subnet».
-
-
Настройте параметры авторизации пользователя:
-
В поле Логин введите имя пользователя виртуальной машины: например, «cloud-user».
-
Выберите пароль в качестве метода аутентификации.
-
Укажите пароль пользователя.
-
-
Нажмите Создать.
-
В строке созданной ВМ скопируйте и сохраните адреса из столбцов Внутренний IP и Публичный IP: они потребуются для дальнейшей настройки.
Создайте клиентскую ВМ
Клиентская ВМ будет отправлять трафик в удаленную подсеть через облачный VPN-шлюз.
-
На странице сервиса «Виртуальные машины» нажмите Создать виртуальную машину.
-
Введите название виртуальной машины — «cloud-vm».
-
Укажите настройки:
-
Зона доступности — «ru.AZ-1».
-
Образ — на вкладке Публичные выберите «Ubuntu 22.04».
-
Гарантированная доля vCPU — 10%.
-
-
Нажмите Продолжить.
-
Подключите ВМ к подсети:
-
В блоке Сетевые настройки нажмите Подключить к подсети.
-
В поле Подсети выберите подсеть «cloud-subnet».
-
В поле Группы безопасности выберите группу «cloud-sg».
-
Нажмите Подключить.
-
-
Отключите опцию Подключить публичный IP.
-
Настройте параметры авторизации пользователя:
-
В поле Логин введите имя пользователя виртуальной машины: например, «client».
-
Выберите пароль в качестве метода аутентификации.
-
Укажите пароль пользователя.
-
-
Нажмите Создать.
-
В строке созданной ВМ скопируйте и сохраните адрес из столбца Внутренний IP: он потребуется для дальнейшей настройки.
Настройте сетевой интерфейс облачного VPN-шлюза
На сетевом интерфейсе облачного VPN-шлюза необходимо отключить проверку адресов источника и назначения.
-
На странице сервиса «Виртуальные машины» выберите виртуальную машину «cloud-gateway».
-
Перейдите на вкладку Сетевые параметры.
-
В разделе Подсети нажмите на название подсети «cloud-subnet».
-
Перейдите на вкладку Интерфейсы.
-
В строке нужного интерфейса нажмите
и выберите Свойства.
-
Отключите опцию Проверка адреса источника/назначения.
-
Подтвердите отключение.
Разверните инфраструктуру на стороне Advanced
На стороне платформы Advanced необходимо развернуть следующие ресурсы:
-
виртуальную сеть «remote-vpc»;
-
подсеть «remote-subnet», в которой размещаются виртуальные машины;
-
группу безопасности «remote-sg» для управления трафиком виртуальных машин;
-
ВМ «remote-gateway» с публичным IP-адресом, которая выполняет роль удаленного VPN-шлюза;
-
ВМ «remote-vm» без публичного IP-адреса, которая выполняет роль клиентской машины на удаленной стороне.
Создайте сеть VPC и подсеть
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Virtual Private Cloud.
-
В правом верхнем углу нажмите Create VPC.
-
Укажите параметры сети и подсети:
-
В блоке Basic Information:
-
Name — «remote-vpc».
-
IPv4 CIDR Block — «10.0.0.0/8-24».
-
Enterprise Project — выберите существующий проект из списка или нажмите Create Enterprise Project, чтобы создать новый.
-
-
В блоке Subnet Setting:
-
Subnet Name — «remote-subnet».
-
IPv4 CIDR Block — «10.0.0.0/24». Сохраните адрес подсети — он потребуется для дальнейшей настройки.
-
-
-
Нажмите Create Now.
Новая сеть VPC появится на вкладке My VPCs.
Создайте группу безопасности
Для работы strongSwan и проверки доступности виртуальных машин необходимо:
-
разрешить входящий трафик со стороны облачного VPN-шлюза через порты UDP 500 и 4500;
-
разрешить входящий трафик из облачной подсети по протоколу ICMP.
-
В списке сервисов выберите Virtual Private Cloud.
-
В меню слева выберите Security Groups.
-
В правом верхнем углу нажмите Create Security Group.
-
Укажите параметры группы:
-
Name — «remote-sg».
-
Enterprise Project — выберите существующий проект из списка или нажмите Create Enterprise Project, чтобы создать новый.
-
Template — «Fast-add rule».
-
-
Нажмите ОК.
-
Настройте правила группы:
-
Напротив созданной группы безопасности нажмите Manage Rules.
-
На вкладке Inbound Rules нажмите Add Rule.
-
Добавьте правила согласно таблице:
Priority
Action
Type
Protocol & Port
Source
1
Allow
IPv4
UDP: 500
<cloud_gateway_public_IP>
1
Allow
IPv4
UDP: 4500
<cloud_gateway_public_IP>
1
Allow
IPv4
ICMP: All
<cloud_subnet_IP>
Где:
-
<cloud_gateway_public_IP> — публичный IP-адрес ВМ «cloud-gateway» на платформе Evolution.
-
<cloud_subnet_IP> — адрес подсети «cloud-subnet» на платформе Evolution.
-
-
Создайте удаленный VPN-шлюз
Удаленный VPN-шлюз будет принимать трафик от клиентских ВМ и направлять его в подсеть на стороне Evolution.
-
В списке сервисов выберите Elastic Cloud Server.
-
Нажмите Create ECS.
-
Задайте основные параметры на этапе Configure Basic Settings:
-
AZ — «AZ1».
-
Specifications — выберите спецификацию «General-Purpose» и флейвор «s6.small.1».
-
Image — «Ubuntu 22.04».
-
-
Нажмите Next: Configure Network.
-
Задайте параметры сети на этапе Configure Network:
-
Network — выберите облачную сеть «remote-vpc» и подсеть «remote-subnet».
-
Source/Destination Check — отключите опцию.
-
Security Group — выберите группу «remote-sg».
-
EIP — «Auto assign».
-
Billed By — «By Traffic».
-
-
Нажмите Next: Configure Advanced Settings.
-
Задайте расширенные параметры на этапе Configure Advanced Settings:
-
ECS Name — «remote-gateway».
-
Login Mode — «Password».
-
Password — введите пароль пользователя.
-
Confirm Password — повторите введенный ранее пароль.
-
-
Нажмите Next: Confirm.
-
На заключительном этапе Confirm проверьте настройки виртуальной машины и в поле Enterprise Project выберите проект, в котором она будет создана.
-
Завершите создание виртуальной машины, нажав Apply Now.
-
Сохраните IP-адреса виртуальной машины из столбца IP Address: публичный (EIP) и внутренний (Private IP). Они потребуются для дальнейшей настройки.
Создайте удаленную клиентскую ВМ
Клиентская ВМ будет отправлять трафик в подсеть на стороне Evolution через удаленный VPN-шлюз.
-
В списке сервисов выберите Elastic Cloud Server.
-
Нажмите Create ECS.
-
Задайте основные параметры на этапе Configure Basic Settings:
-
AZ — «AZ1».
-
Specifications — выберите спецификацию «General-Purpose» и флейвор «s6.small.1».
-
Image — «Ubuntu 22.04».
-
-
Нажмите Next: Configure Network.
-
Задайте параметры сети на этапе Configure Network:
-
Network — выберите облачную сеть «remote-vpc» и подсеть «remote-subnet».
-
Security Group — выберите группу «remote-sg».
-
EIP — «Do not use».
-
-
Нажмите Next: Configure Advanced Settings.
-
Задайте расширенные параметры на этапе Configure Advanced Settings:
-
ECS Name — «remote-vm».
-
Login Mode — «Password».
-
Password — введите пароль пользователя.
-
Confirm Password — повторите введенный ранее пароль.
-
-
Нажмите Next: Confirm.
-
На заключительном этапе Confirm проверьте настройки виртуальной машины и в поле Enterprise Project выберите проект, в котором она будет создана.
-
Завершите создание виртуальной машины, нажав Apply Now.
-
Сохраните внутренний IP-адрес виртуальной машины из столбца IP Address: он потребуется для дальнейшей настройки.
Добавьте правила в группу безопасности облачного VPN-шлюза
Для работы strongSwan и проверки доступности виртуальных машин необходимо:
-
разрешить входящий трафик со стороны удаленного VPN-шлюза через порты UDP 500 и 4500;
-
разрешить входящий трафик из удаленной подсети по протоколу ICMP.
-
Перейдите в личный кабинет платформы Evolution.
-
На верхней панели слева нажмите
и выберите Сеть → Группы безопасности.
-
Выберите группу безопасности «cloud-sg».
-
Перейдите на вкладку Правила.
-
Добавьте правила для входящего трафика:
-
В блоке Правила входящего трафика нажмите Добавить правило.
-
Добавьте правила согласно таблице:
Протокол
Порт
Тип источника
Источник
UDP
500
IP-адрес
<remote_gateway_public_IP>
UDP
4500
IP-адрес
<remote_gateway_public_IP>
ICMP
Любой
IP-адрес
<remote_subnet_IP>
Где:
-
<remote_gateway_public_IP> — публичный IP-адрес ВМ «remote-gateway» на платформе Advanced.
-
<remote_subnet_IP> — адрес подсети «remote-subnet» на платформе Advanced.
-
-
Настройте VPN-шлюзы
Для установления IPsec-туннеля необходимо настроить VPN-шлюзы на стороне Evolution и Advanced.
Настройте облачный VPN-шлюз
-
Перейдите в личный кабинет платформы Evolution.
-
На верхней панели слева нажмите
и выберите Инфраструктура → Виртуальные машины.
-
Выберите виртуальную машину «cloud-gateway» в списке.
-
Перейдите на вкладку Серийная консоль.
-
Введите логин и пароль, указанные при создании виртуальной машины.
-
Включите маршрутизацию пакетов и отключите функциональность ICMP Redirects:
-
Откройте файл /etc/sysctl.conf для редактирования. В терминале выполните команду:
sudo nano /etc/sysctl.conf -
Добавьте в файл параметры:
net.ipv4.ip_forward = 1net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.enp3s0.accept_redirects = 0net.ipv4.conf.enp3s0.send_redirects = 0 -
Примените изменения:
sudo sysctl -p /etc/sysctl.conf
-
-
Заполните файл конфигурации IPsec-туннеля:
-
Откройте файл /etc/ipsec.conf для редактирования:
sudo nano /etc/ipsec.conf -
Вставьте конфигурацию в файл:
config setupstrictcrlpolicy=yesuniqueids=yesconn evo-to-advancedtype=tunnelauto=startkeyexchange=ikev2authby=secretleft=<left_internal_IP>leftid=<left_public_IP>leftsubnet=<left_subnet>right=<right_public_IP>rightsubnet=<right_subnet>ike=aes256-sha2_256-modp1024!esp=aes256-sha2_256!Где:
-
<left_internal_IP> — внутренний IP-адрес ВМ «cloud-gateway».
-
<left_public_IP> — публичный IP-адрес ВМ «cloud-gateway».
-
<left_subnet> — адрес подсети «cloud-subnet».
-
<right_public_IP> — публичный IP-адрес ВМ «remote-gateway» на платформе Advanced.
-
<right_subnet> — адрес подсети «remote-subnet» на платформе Advanced.
Подробное описание параметров файла /etc/ipsec.conf смотрите в документации strongSwan.
-
-
-
Заполните файл секретов:
-
Откройте файл /etc/ipsec.secrets для редактирования:
sudo nano /etc/ipsec.secrets -
Вставьте в файл ключевую фразу (PSK, Pre-Shared Key) туннеля:
<left_public_IP> <right_public_IP> : PSK "<secret_phrase>"Где:
-
<left_public_IP> — публичный IP-адрес ВМ «cloud-gateway».
-
<right_public_IP> — публичный IP-адрес ВМ «remote-gateway» на платформе Advanced.
-
<secret_phrase> — ключ для установки IPsec-соединения. Значение ключа необходимо придумать самостоятельно.
-
-
-
Перезапустите strongSwan:
sudo systemctl restart strongswan-starter.service -
Проверьте, что VPN-шлюз на стороне Evolution поднят и находится в ожидании установления IPsec-туннеля c удаленной стороной:
sudo ipsec statusРезультат:
Security Associations (0 up, 1 connecting):evo-to-advanced[1]: CONNECTING, 172.31.***.***[%any]...37.18.***.***[%any]
Настройте удаленный VPN-шлюз
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Elastic Cloud Server.
-
Напротив виртуальной машины «remote-gateway» нажмите Remote Login.
-
Введите логин и пароль, указанные при создании виртуальной машины.
-
Обновите версии пакетов. В терминале выполните команду:
sudo apt update -
Установите strongSwan:
sudo apt install -y strongswan -
Включите маршрутизацию пакетов и отключите функциональность ICMP Redirects:
-
Откройте файл /etc/sysctl.conf для редактирования:
sudo nano /etc/sysctl.conf -
Добавьте в файл параметры:
net.ipv4.ip_forward = 1net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.eth0.accept_redirects = 0net.ipv4.conf.eth0.send_redirects = 0ПримечаниеНа практике имена локальных интерфейсов на удаленной стороне могут отличаться.
-
Примените изменения:
sudo sysctl -p /etc/sysctl.conf
-
-
Заполните файл конфигурации IPsec-туннеля:
-
Откройте файл /etc/ipsec.conf для редактирования.
sudo nano /etc/ipsec.conf -
Вставьте конфигурацию в файл:
config setupstrictcrlpolicy=yesuniqueids=yesconn advanced-to-evotype=tunnelauto=startkeyexchange=ikev2authby=secretright=<right_public_IP>rightsubnet=<right_subnet>left=<left_internal_IP>leftid=<left_public_IP>leftsubnet=<left_subnet>ike=aes256-sha2_256-modp1024!esp=aes256-sha2_256!Где:
-
<right_public_IP> — публичный IP-адрес ВМ «cloud-gateway» на платформе Evolution.
-
<right_subnet> — адрес подсети «cloud-subnet» на платформе Evolution.
-
<left_internal_IP> — внутренний IP-адрес ВМ «remote-gateway».
-
<left_public_IP> — публичный IP-адрес ВМ «remote-gateway».
-
<left_subnet> — адрес подсети «remote-subnet».
При настройке удаленной стороны она становится левой стороной туннеля, а сторона облака Evolution становится правой стороной.
Подробное описание параметров файла /etc/ipsec.conf смотрите в документации strongSwan.
-
-
-
Заполните файл секретов:
-
Откройте файл /etc/ipsec.secrets для редактирования:
sudo nano /etc/ipsec.secrets -
Вставьте в файл ключевую фразу (PSK, Pre-Shared Key) туннеля:
<left_public_IP> <right_public_IP> : PSK "<secret_phrase>"Где:
-
<left_public_IP> — публичный IP-адрес ВМ «cloud-gateway» на платформе Evolution.
-
<right_public_IP> — публичный IP-адрес ВМ «remote-gateway».
-
<secret_phrase> — ключ для установки IPsec-соединения. Укажите такое же значение, как и в настройках облачного VPN-шлюза.
-
-
-
Перезапустите strongSwan:
sudo systemctl restart strongswan-starter.service -
Проверьте, что VPN-шлюз на стороне Advanced поднят, а IPsec-туннель установлен:
sudo ipsec statusРезультат:
Security Associations (1 up, 0 connecting):advanced-to-evo[2]: ESTABLISHED 110 seconds ago, 10.0.***.***[37.18.***.***]...176.108.***.***[176.108.***.***]advanced-to-evo{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c9c35ad9_i c0c7b197_oadvanced-to-evo{1}: 10.0.***.***/24 === 172.31.***.***/24
Проверьте работу шлюзов
Проверьте, что на обоих VPN-шлюзах появилась возможность пинговать внутренний IP-адрес шлюза с противоположной стороны.
-
На стороне платформы Evolution на ВМ «cloud-gateway» выполните команду:
ping -c4 <remote_gateway_internal_IP>Где <remote_gateway_internal_IP> — внутренний IP-адрес ВМ «remote-gateway» на платформе Advanced.
-
На стороне платформы Advanced на ВМ «remote-gateway» выполните команду:
ping -c4 <cloud_gateway_internal_IP>Где <cloud_gateway_internal_IP> — внутренний IP-адрес ВМ «cloud-gateway» на платформе Evolution.
Настройте маршрутизацию
В виртуальных сетях на обеих сторонах необходимо добавить статические маршруты. Это позволит перенаправлять трафик с клиентских ВМ на противоположную сторону туннеля через внутренний интерфейс VPN-шлюза.
Настройте маршрутизацию в Evolution
-
Перейдите в личный кабинет платформы Evolution.
-
На верхней панели слева нажмите
и выберите Сеть → VPC.
-
Выберите сеть «cloud-vpc».
-
Перейдите на вкладку Маршруты.
-
Нажмите Создать маршрут.
-
Укажите параметры маршрута:
-
Адрес назначения — адрес подсети «remote-subnet» на платформе Advanced.
-
Next Hop Type — «Виртуальная машина».
-
Виртуальная машина — выберите ВМ «cloud-gateway».
-
Интерфейс — выберите интерфейс ВМ «cloud-gateway», который подключен к подсети «cloud-subnet».
-
-
Нажмите Создать.
Дождитесь, когда статус маршрута сменится на «Активен».
Настройте маршрутизацию в Advanced
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Virtual Private Cloud.
-
В меню слева выберите Route Tables.
-
Нажмите Create Route Table.
-
Укажите параметры таблицы маршрутизации:
-
Name — «rtb-remote-vpc».
-
VPC — выберите сеть «remote-vpc».
-
-
Добавьте маршрут в таблицу:
-
В блоке Route Settings нажмите Add Route.
-
Укажите параметры маршрута:
-
Destination Type — «IP address».
-
Destination — адрес подсети «cloud-subnet» на платформе Evolution.
-
Next Hop Type — «Server».
-
Next Hop — выберите ВМ «remote-gateway».
-
-
-
Нажмите OK.
-
Во всплывающем окне нажмите Associate Subnet.
-
На вкладке Associated Subnets нажмите Associate Subnet.
-
Отметьте подсеть «remote-subnet» и нажмите OK.
Проверьте работу клиентских ВМ
-
Проверьте, что удаленный VPN-шлюз и удаленная клиентская ВМ доступны с облачной клиентской ВМ:
-
Перейдите в личный кабинет платформы Evolution.
-
На верхней панели слева нажмите
и выберите Инфраструктура → Виртуальные машины.
-
Выберите виртуальную машину «cloud-vm» в списке.
-
Перейдите на вкладку Серийная консоль.
-
Введите логин и пароль, указанные при создании виртуальной машины.
-
В терминале поочередно выполните команды:
ping -c4 <remote_gateway_internal_IP>ping -c4 <remote_vm_internal_IP>Где:
-
<remote_gateway_internal_IP> — внутренний IP-адрес ВМ «remote-gateway» на платформе Advanced.
-
<remote_vm_internal_IP> — внутренний IP-адрес ВМ «remote-vm» на платформе Advanced.
-
-
-
Проверьте, что облачный VPN-шлюз и облачная ВМ доступны с удаленной клиентской ВМ:
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Elastic Cloud Server.
-
Напротив виртуальной машины «remote-vm» нажмите Remote Login.
-
Введите логин и пароль, указанные при создании виртуальной машины.
-
В терминале поочередно выполните команды:
ping -c4 <cloud_gateway_internal_IP>ping -c4 <cloud_vm_internal_IP>Где:
-
<cloud_gateway_internal_IP> — внутренний IP-адрес ВМ «cloud-gateway» на платформе Evolution.
-
<cloud_vm_internal_IP> — внутренний IP-адрес ВМ «cloud-vm» на платформе Evolution.
-
-
Теперь клиентские ВМ могут обмениваться трафиком с помощью настроенного IPsec-туннеля.
- Перед началом работы
- Разверните инфраструктуру на стороне Evolution
- Разверните инфраструктуру на стороне Advanced
- Добавьте правила в группу безопасности облачного VPN-шлюза
- Настройте VPN-шлюзы
- Настройте маршрутизацию