Настройка 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-шлюзы
- Настройте маршрутизацию