Создание туннеля между двумя подсетями при помощи OpenVPN Access Server
- Подготовьте облако к работе
- Создайте сеть и подсети
- Создайте ВМ-шлюз
- Запустите сервер VPN
- Настройте разрешения сетевого трафика
- Получите пароль администратора
- Создайте пользователя OpenVPN для туннеля
- Настройте шлюз второй подсети для доступа к серверу OpenVPN
- Проверьте работу туннеля
- Как удалить созданные ресурсы
При размещении вычислительных ресурсов в публичном облаке часто возникает потребность в безопасном соединении между двумя различными подсетями, например офисной сетью и тестовой фермой в облаке Yandex Cloud. Основным решением для подобных задач выступает VPN, чтобы:
- объединить территориально удаленные сети;
- подключить внештатных сотрудников к офисной сети;
- организовать соединение с шифрованием поверх открытой сети Wi-Fi.
На этой странице рассказано, как организовать VPN-туннель с использованием технологии OpenVPN.
ПО OpenVPN Access Server совместимо с открытой версией
В примере туннель, объединяющий в одну сеть две разные подсети, организуется между двумя VPN-шлюзами, в качестве одного из которых выступает OpenVPN Access Server, а в качестве другого — машина с клиентом OpenVPN. Для тестирования работы VPN-туннеля необходимо настроить шлюзы на обеих сторонах туннеля. В примере рассмотрим случай, когда одна подсеть находится в облаке Yandex Cloud. Другая подсеть может находиться как в Yandex Cloud, так и во внешней сети.
Чтобы создать туннель между двумя различными подсетями:
- Подготовьте облако к работе.
- Создайте сеть и подсети.
- Создайте ВМ, которые хотите связать.
- Создайте ВМ-шлюз.
- Запустите сервер VPN.
- Настройте разрешения сетевого трафика.
- Получите пароль администратора.
- Создайте пользователя OpenVPN для туннеля.
- Настройте шлюз второй подсети для доступа к серверу OpenVPN.
- Проверьте работу туннеля.
Если сервер VPN больше не нужен, удалите созданные ВМ.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры OpenVPN входят:
- плата за диски и постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud);
- плата за лицензию OpenVPN Access Server (при использовании более двух подключений).
Создайте сеть и подсети
Для связи облачных ресурсов с интернетом необходимо иметь сеть и подсети.
Создайте сеть
- В консоли управления
перейдите в каталог, в котором хотите создать облачную сеть. - В списке сервисов выберите Virtual Private Cloud.
- Нажмите Создать сеть.
- Задайте имя сети, например
ovpn-network
. - Отключите опцию Создать подсети.
- Нажмите Создать сеть.
Создайте подсети
- Выберите сеть
ovpn-network
. - Нажмите Добавить подсеть.
- Укажите название подсети, например
ovpn-left
. - Выберите зону доступности из выпадающего списка.
- Введите CIDR подсети:
10.128.0.0/24
. - Нажмите Создать подсеть.
- Повторите шаги 2-6 для второй подсети с названием
ovpn-right
и CIDR10.253.11.0/24
.
Создайте ВМ, которые хотите связать
-
В консоли управления
перейдите в каталог, в котором хотите создать облачную сеть. -
На странице каталога
нажмите кнопку Создать ресурс и выберите Виртуальная машина. -
В блоке Базовые параметры:
- Введите имя
ao-openvpn-test
и описание ВМ. - Выберите зону доступности, в которой находится подсеть
ovpn-left
.
- Введите имя
-
В блоке Выбор образа/загрузочного диска выберите образ для ВМ.
-
В блоке Сетевые настройки:
- Укажите сеть
ovpn-network
и подсетьovpn-left
. - В поле Публичный адрес выберите Без адреса.
- В поле Внутренний адрес выберите Вручную и укажите адрес
10.128.0.4
.
- Укажите сеть
-
В блоке Доступ укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя SSH, например,
yc-user
. - В поле SSH-ключ вставьте открытый ключ SSH.
- В поле Логин введите имя пользователя SSH, например,
-
Нажмите кнопку Создать ВМ.
-
Повторите шаги 1-7 для создания второй ВМ с именем
vm-ovpn-host
и внутренним адресом10.253.11.110
, которая будет размещена в подсетиovpn-right
.
Создайте ВМ-шлюз
-
В консоли управления
перейдите в каталог, в котором хотите создать облачную сеть. -
На странице каталога
нажмите кнопку Создать ресурс и выберите Виртуальная машина. -
В блоке Базовые параметры:
- Введите имя
vm-ovpn-gw
и описание ВМ. - Выберите зону доступности, в которой находится подсеть
ovpn-right
.
- Введите имя
-
В блоке Выбор образа/загрузочного диска выберите образ для ВМ.
-
В блоке Сетевые настройки:
-
Укажите сеть
ovpn-network
и подсетьovpn-right
. -
В поле Публичный адрес выберите Вручную или Автоматически.
Используйте только статические публичные IP-адреса из списка, или сделайте IP-адрес созданной машины статическим. Динамический IP-адрес может измениться после перезагрузки ВМ и соединения перестанут работать.
-
В поле Внутренний адрес выберите Вручную и укажите адрес
10.253.11.19
.
-
-
В блоке Доступ укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя SSH, например,
yc-user
. - В поле SSH-ключ вставьте открытый ключ SSH.
- В поле Логин введите имя пользователя SSH, например,
-
Нажмите кнопку Создать ВМ.
Запустите сервер VPN
Создайте ВМ, которая будет шлюзом VPN-подключений:
-
На странице каталога
нажмите кнопку Создать ресурс и выберите Виртуальная машина. -
В блоке Базовые параметры:
- Введите имя
vpn-server
и описание ВМ. - Выберите зону доступности, в которой находится подсеть
ovpn-left
.
- Введите имя
-
В блоке Выбор образа/загрузочного диска:
- Перейдите на вкладку Cloud Marketplace.
- Нажмите кнопку Посмотреть больше.
- В списке публичных образов выберите OpenVPN Access Server и нажмите Использовать.
-
В блоке Диски укажите размер диска — 10 ГБ.
-
В блоке Вычислительные ресурсы укажите:
- vCPU — 2.
- RAM — 2 ГБ.
-
В блоке Сетевые настройки:
-
Укажите сеть
ovpn-network
и подсетьovpn-left
. -
В поле Публичный адрес выберите Вручную или Автоматически.
Используйте только статические публичные IP-адреса из списка, или сделайте IP-адрес созданной машины статическим. Динамический IP-адрес может измениться после перезагрузки ВМ и соединения перестанут работать.
-
В поле Внутренний адрес выберите Вручную и укажите адрес
10.128.0.3
. -
Если доступен список Группы безопасности, выберите группу безопасности. Если оставить поле пустым, будет назначена группа безопасности по умолчанию.
-
-
В блоке Доступ укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя SSH, например,
yc-user
. - В поле SSH-ключ вставьте открытый ключ SSH.
- В поле Логин введите имя пользователя SSH, например,
-
Нажмите кнопку Создать ВМ.
-
Появится окно с информацией о типе тарификации: BYOL (Bring Your Own License).
-
Нажмите Создать.
Настройте разрешения сетевого трафика
Группы безопасности работают как виртуальный брандмауэр для входящего и исходящего трафика. См. подробнее о группе безопасности по умолчанию.
-
Для работы OpenVPN Access Server добавьте следующие правила в группу безопасности по умолчанию:
Направление
трафикаОписание Диапазон портов Протокол Источник CIDR блоки Входящий VPN Server
443
TCP
CIDR
0.0.0.0/0
Входящий VPN Server
1194
UDP
CIDR
0.0.0.0/0
Входящий Admin Web UI,
Client Web UI
943
TCP
CIDR
0.0.0.0/0
Сервер VPN способен перенаправлять трафик с порта
HTTPS
, поэтому при необходимости оставьте открытым единственный портTCP 443
. См. также настройки на вкладке Configuration → Network Settings в административной панели сервера. -
Если вы настроили собственную группу безопасности, убедитесь, что в ней разрешен трафик между сервером VPN и требуемыми ресурсами. Например, они находятся в одной группе безопасности и создано правило Self для всей группы.
Получите пароль администратора
На сервере OpenVPN заранее создан пользователь openvpn
с административными правами. Пароль генерируется автоматически при создании виртуальной машины.
Получите пароль в выводе последовательного порта или в серийной консоли. Пароль отобразится в строке:
To login please use the "openvpn" account with <пароль> password.
Где <пароль>
— пароль пользователя openvpn
.
Для первого входа в административную панель используйте логин openvpn
и полученный пароль.
Если вы не получили пароль после первого запуска сервера VPN, необходимо заново создать ВМ с OpenVPN Access Server. При перезапусках пароль не отображается.
Создайте пользователя OpenVPN для туннеля
OpenVPN Access Server предоставляет два веб-интерфейса:
- Client Web UI по адресу
https://<публичный IP-адрес ВМ>:943/
. Интерфейс предназначен для входа обычных пользователей, скачивания клиентских программ и профилей конфигурации. - Admin Web UI по адресу
https://<публичный IP-адрес ВМ>:943/admin/
. Интерфейс предназначен для настройки сервера.
Примечание
По умолчанию на сервер установлен самоподписанный сертификат. Если вам необходимо поменять сертификат, воспользуйтесь инструкцией
После того, как на виртуальной машине в облаке Yandex Cloud, которая будет выполнять функцию шлюза, будет развернут OpenVPN Access Server, у вас будут конкретные адреса и учетные записи следующего вида (ваши IP-адреса могут быть другими):
- Внутренний IP шлюза
vpn-server
:10.128.0.3
- Публичный IP машины
vpn-server
:<публичный IP-адрес ВМ>
- Admin Web UI:
https://<публичный IP-адрес ВМ>:943/admin
- учетная запись для доступа в Admin UI:
openvpn/<пароль администратора>
- Client Web UI:
https://<публичный IP-адрес ВМ>:943
Создайте на сервере OpenVPN пользователя, от имени которого шлюз второй подсети будет осуществлять доступ к серверу OpenVPN для работы туннеля. Чтобы создать пользователя, войдите в административную панель Admin Web UI:
- Откройте в браузере адрес
https://<публичный IP-адрес ВМ>:943/admin
. - Введите имя пользователя
openvpn
и пароль (см. раздел про получение пароля администратора). - Нажмите кнопку Agree. Откроется главный экран административной панели OpenVPN.
- Разверните вкладку User management и выберите пункт User permissions.
- В списке пользователей введите имя нового пользователя в поле New Username, например
as-gw-user
. - Нажмите значок карандаша в столбце More Settings и в поле Local Password введите пароль нового пользователя.
- В поле Access Control выберите User Routing и укажите текущую локальную подсеть, в которой установлен сервер OpenVPN Access Server, например
10.128.0.0/24
. - В поле VPN Gateway выберите Yes и укажите другую локальную подсеть, к которой нужно прокинуть туннель, например
10.253.11.0/24
. - Нажмите кнопку Save settings.
- Нажмите кнопку Update running server.
- Зайдите в панель пользователя под новым аккаунтом
as-gw-user
, сохраните профиль подключения в файлеas-gw-user.conf
и перенесите этот файл на виртуальную машину, которая будет служить шлюзом для туннеля OpenVPN в другой подсети.
Настройте шлюз второй подсети для доступа к серверу OpenVPN
В консоли машины vm-ovpn-gw
выполните следующие команды:
sudo apt update
sudo apt install openvpn
cp as-gw-user.conf /etc/openvpn/client/
echo -e "as-gw-user\n<пароль>" > /etc/openvpn/client/param.txt
После этого в папке /etc/openvpn/client/
должен появиться файл param.txt
, и туда же скопируйте созданный ранее файл конфигурации as-gw-user.conf
пользователя OpenVPN, созданного для организации туннеля:
ls -lh /etc/openvpn/client/
Результат:
total 16K
-rw-rw-r-- 1 root root 9.7K Nov 10 14:37 as-gw-user.conf
-rw-r--r-- 1 root root 24 Nov 10 14:31 param.txt
В файле /etc/openvpn/as-gw-user.conf
в строке с auth-user-pass
укажите имя файла param.txt
:
dev tun
dev-type tun
remote-version-min 1.2
reneg-seq 604800
auth-user-pass param.txt
verb 3
push-peer-info
Выполните команды:
sudo systemctl enable openvpn-client@as-gw-user
sudo systemctl start openvpn-client@as-gw-user
sudo systemctl status openvpn-client@as-gw-user
Результат должен выглядеть примерно так:
● openvpn-client@as-gw-user.service - OpenVPN tunnel for as/gw/user
Loaded: loaded (/lib/systemd/system/openvpn-client@.service; enabled; vendor preset:
enabled)
Active: active (running) since Fri 2022-11-11 20:12:49 UTC; 1h 6min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 2626 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 2237)
Memory: 2.0M
CPU: 157ms
CGroup: /system.slice/system-openvpn\x2dclient.slice/openvpn-client@as-gw-user.service
└─2626 /usr/sbin/openvpn --suppress-timestamps --nobind --config as-gw-user.conf
Для включения пересылки пакетов от других хостов выполните команды:
vm-ovpn-gw:~$ sudo bash -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
vm-ovpn-gw:~$ sudo sysctl -p
Проверьте на шлюзе vpn-server
, что есть маршрут до 10.253.11.0/24
:
vpn-server:~$ sudo ip route
Результат:
default via 10.128.0.1 dev eth0 proto dhcp src 10.128.0.3 metric 100
10.128.0.0/24 dev eth0 proto kernel scope link src 10.128.0.3
10.128.0.1 dev eth0 proto dhcp scope link src 10.128.0.3 metric 100
10.253.11.0/24 dev as0t2 proto static
172.27.224.0/22 dev as0t0 proto kernel scope link src 172.27.224.1
172.27.228.0/22 dev as0t1 proto kernel scope link src 172.27.228.1
172.27.232.0/22 dev as0t2 proto kernel scope link src 172.27.232.1
172.27.236.0/22 dev as0t3 proto kernel scope link src 172.27.236.1
Проверьте на машине vm-ovpn-gw
маршрут до 10.128.0.0/24
:
sudo ip route
Результат:
default via 10.253.11.1 dev ens18 proto dhcp src 10.253.11.19 metric 100
10.128.0.0/24 via 172.27.232.1 dev tun0 metric 101
10.253.11.0/24 dev ens18 proto kernel scope link src 10.253.11.19 metric 100
10.253.11.1 dev ens18 proto dhcp scope link src 10.253.11.19 metric 100
172.27.224.0/20 via 172.27.232.1 dev tun0 metric 101
172.27.232.0/22 dev tun0 proto kernel scope link src 172.27.232.5
178.154.226.72 via 10.253.11.1 dev ens18
Проверьте работу туннеля
Для проверки работы туннеля вам потребуются описанные ранее тестовые машины, которые находятся в обеих подсетях и отличны от шлюзов туннеля.
Чтобы эти две машины могли передавать между собой данные, обе они должны видеть статические маршруты до другой подсети. На ao-openvpn-test
— до 10.253.11.0/24
, а на vm-ovpn-host
до 10.128.0.0/24
.
На vm-ovpn-host
выполните команду:
sudo ip route add 10.128.0.0./24 via 10.253.11.19
На тестовой машине в облаке Yandex Cloud добавление статического маршрута внутри виртуальной машины не поможет. В облаке Yandex Cloud статические маршруты для виртуальных машин нужно указывать иначе.
В облаке Yandex Cloud виртуальные машины ao-openvpn-as
(сервер OpenVPN) и ao-openvpn-test
находятся в одной подсети default
. В настройках этой подсети добавьте статический маршрут с такими параметрами:
Name: office-net
Prefix: 10.253.11.0/24
Next hop: 10.128.0.3
Чтобы этот статический маршрут применился к виртуальной машине ao-openvpn-test
, выключите и включите ее.
Теперь с машины vm-ovpn-host
проверьте туннель командой ping
до другой тестовой машины:
ping 10.128.0.4
Результат:
PING 10.128.0.4 (10.128.0.4) 56(84) bytes of data.
64 bytes from 10.128.0.4: icmp_seq=1 ttl=61 time=7.45 ms
64 bytes from 10.128.0.4: icmp_seq=2 ttl=61 time=5.61 ms
64 bytes from 10.128.0.4: icmp_seq=3 ttl=61 time=5.65 ms
^C
--- 10.128.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 5.613/6.235/7.446/0.855 ms
И с другой стороны туннеля, с тестовой машины ao-openvpn-test
:
ping 10.253.11.110
Результат:
PING 10.253.11.110 (10.253.11.110) 56(84) bytes of data.
64 bytes from 10.253.11.110: icmp_seq=1 ttl=61 time=6.23 ms
64 bytes from 10.253.11.110: icmp_seq=2 ttl=61 time=5.90 ms
64 bytes from 10.253.11.110: icmp_seq=3 ttl=61 time=6.09 ms
64 bytes from 10.253.11.110: icmp_seq=4 ttl=61 time=5.69 ms
^C
--- 10.253.11.110 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 5.688/5.976/6.229/0.203 ms
Как удалить созданные ресурсы
Чтобы освободить ресурсы в каталоге, удалите ВМ vpn-server
и тестовую ВМ.
Если вы зарезервировали публичный статический IP-адрес, удалите его.