Настройка openVPN для схемы с сервером и клиентом
Задача
Построить туннель и обеспечить взаимную доступность адресов из одной локальной сети в другую. Для решения этой задачи мы настроим один роутер как сервер, второй - в качестве клиента.
В данном случае лишь роутеру, выступающему в роли сервера, необходим внешний или «белый» IP адрес. Клиент может использовать «серый» и находиться за NAT-ом.
В этом примере роутер R1 выступает в роли сервера и имеет внешний IP 200.1.1.1 и локальную сеть с адресами из подсети 192.168.2.0/24. Клиентский роутер R2 имеет локальную сеть с адресами в диапазоне 192.168.3.0/24.
| Настройка OpenVPN предполагает наличие на роутере установленных сертификатов для клиента и сервера. Инструкцию как создать, экспортировать и импортировать сертификаты в iRZos смотрите в отдельной статье. |
Сертификаты могут быть созданы с помощью отдельной инфраструктуры PKI (например, easy-rsa), так и в интерфейсе роутера.
Настройка R1 (сервер)
Перейдите в раздел /service → openvpn-server. Пример конфигурации сервера показан на рисунке ниже.
Поле |
Значение |
Dey-Type |
Tun |
Protocol |
UDP (по умолчанию) |
Port |
1194 (по умолчанию) |
Tunel IP |
10.8.0.1/24 |
Pool |
10.8.0.10-10.8.0.20 |
Clipher |
AES-256-CBC (по умолчанию) |
Auth |
SHA1 (по умолчанию) |
TA Key |
|
Ca |
Имя файла нашего CA (у нас это CA) |
Cert |
Имя сертификата сервера (у нас это server) |
Keepalive |
10 60 |
Push To Client |
topology=subnet (по умолчанию); route=192.168.2.0/24 (клиенту будет передан маршрут до локальной сети роутера R1); route-gateway=10.8.0.1 (шлюзом к передаваемому маршруту назначается туннельный адрес роутера R1) |
Flag |
duplicate-cn (по умолчанию) |
Нажмите Apply, чтобы применить внесенные настройки.
Далее необходимо перейти в раздел /service → client.
Нажмите Add и задайте Username.
| Username должен полностью соответствовать common name сертификата пользователя, который будет подключаться к серверу OpenVPN в качестве клиента! |
Настройте параметры для подключаемого клиента.
-
В поле Service выберите openvpn.
-
В поле Tunnel IP можно указать туннельный IP адрес с маской (из диапазона Pool), который будет привязан к данному клиенту. Если оставить это поле пустым, адрес будет назначен автоматически.
-
В поле Route необходимо указать локальную подсеть роутера R2, которую мы хотим сделать доступной с роутера R1. В данном примере это 192.168.3.0/24.
-
Нажмите Apply для применения настроек.
При необходимости подключения к OpenVPN нескольких разных клиентов, необходимо создать соответствующие записи в разделе /service → client с различными Username, идентичными CN соответствующих сертификатов. При необходимости предоставления доступа к локальным сетям данных клиентов их подсети должны быть указаны в поле Route для данного клиента.
Теперь сервер OpenVPN можно запустить в разделе /service → openvpn-server, сняв галочку напротив Disabled и нажав Apply. Статус туннеля изменится на running.
Настройка роутера R2 (клиент)
Зайдите в /tunnel → openvpn. Пример конфигурации показан на рисунке ниже.
Поле |
Значение |
Local IP |
WAN |
Remote IP |
200.1.1.1 |
Tunnel IP |
|
Device Type |
tun |
Protocol |
udp |
Encryption |
tls |
Cipher |
AES-256-CBC |
Auth |
SHA1 |
TA Key |
Не используется в примере |
Ca |
Имя файла сертификата CA (CA.pfx_0) |
Cert |
Имя файла сертификата клиента (client.pfx_0) |
Username |
Не используется в примере |
Password |
Не используется в примере |
Flag |
Pull (по умолчанию) |
Extra Parameters |
Не используется в примере |
Ca и Сert имеют иные наименования в связи с тем, что были созданы на роутере-сервере irzOS и экспортированы, при этом изменись имена файлов.
| Чтобы импортировать сертификаты на роутер, их необходимо загрузить в разделе /storage → file. А затем воспользоваться функцией импорта в разделе /storage → certificate → cert import. Подробнее этот процесс описан в отдельной статье. |
Для завершения настройки нужно снять галочку напротив Disabled и нажать Apply.
Как только туннель поднимется, это отобразится в его статусе.
Туннель поднялся, а клиент получил IP адрес 10.8.0.15/24, как и было задано.
Убедимся в том, что клиент получил нужные маршруты от сервера с помощью списка маршрутов /ip → routes → list.
Видим маршрут №1 для туннельного интерфейса и №3 - до локальной сети R1 через туннельный интерфейс.
| По умолчанию весь трафик для туннельных интерфейсов разрешен. При необходимости настройки правил файрволла доступны в разделе /firewall ! |
Пробуем выполнить ping (/tools → ping):
Настройка сервера и клиента в режиме CLI
Обратите внимание, в силу необходимости использования предварительно созданных сертификатов, настройка в консоли может быть сложнее, чем в Web-версии, хотя оба варианта используют одни и те же параметры.
Настройка для роутера-сервера R1
Создание конфигурации OpenVPN сервера:
/service openvpn-server
auth -
auth SHA1
ca СA
cert server
cipher -
cipher AES-256-CBC
dev-type tun
disabled -
extra -
flag -
flag duplicate-cn
keepalive 10 60
pool 10.8.0.10-10.8.0.20
port 1194
protocol udp
push -
push route-gateway=10.8.0.1,route=192.168.2.0/24,topology=subnet
ta-key -
tunnel-ip 10.8.0.1/24
/service openvpn-server apply
/
Создание учетной записи для клиента. Username должен соответствовать CN (common name) сертификата клиента. Tunnel-ip - только при необходимости задавать фиксированный IP адрес клиенту.
/service client add username=client
disabled -
password -
route -
route 192.168.1.0/24
service -
service openvpn
tunnel-ip 10.8.0.15/24
apply
/
Настройка клиента R2
/tunnel openvpn add name=ovpn1
auth -
auth SHA1
ca ca.crt
cert client-bundle.pem
cipher -
cipher AES-256-CBC
dev-type tun
disabled -
encryption tls
extra -
flag -
flag pull
local-ip auto
password -
protocol udp
remote-ip -
remote-ip 200.1.1.1
ta-key -
tunnel-ip -
username -
apply
/
Дополнительная настройка в режиме "звезда"
На текущий момент в irzOS нет возможности передавать клиентам множественные маршруты, в связи с чем в некоторых ситуациях требуется ручная настройка.
В случае необходимости подключения одновременно двух (и более) клиентов к серверу OpenVPN с необходимостью обеспечения их взаимного доступа к локальным сетям задача может быть решена следующим образом.
Допустим, что локальная сеть Клиента №2 - это 192.168.4.0/24.
-
Необходимо создать сертификат клиента №2 (условный роутер R3) на роутере-сервере R1 или в той системе, в которой создаются сертификаты. Это может быть роутер irzOS, выступающий в роли сервера, или отдельная система PKI.
-
В разделе /service → client необходимо создать дополнительного клиента и указать там LAN подсеть данного клиентам.
-
Настроить на втором клиенте подключение к OpenVPN аналогично инструкции выше;
-
Клиент №2 получит от сервера маршрут до подсети сервера (192.168.2.0/24). Роутер-сервер R1 будет иметь маршрут до клиента R3 (192.168.4.0/24) из его клиентской записи, поле Route.
Дополнительно требуется прописать маршруты до локальной сети клиента R2 на клиенте R3.
В частности, это будет маршрут до 192.168.3.0/24 через туннельный интерфейс OpenVPN, шлюзом будет служить 10.8.0.1.
/ip route list add dst-addr=192.168.3.0/24 interface=ovpn1
disabled -
gateway 10.8.0.1
metric -
src-addr -
table main
type unicast
apply
/
-
Так же на клиенте R2 необходимо указать маршрут до сети R3 192.168.4.0/24 через интерфейс OVPN, шлюз 10.8.0.1.
/ip route list add dst-addr=192.168.4.0/24 interface=OVPN
disabled -
gateway 10.8.0.1
metric -
src-addr -
table main
type unicast
apply
/
Теперь каждый из трех участников (и устройства локальной сети) имеет возможность говорить с локальной сетью другого участника.