Настройка OpenVPN на примере двух RTUx68

Настройка OpenVPN на примере двух RTUx68

Оглавление

Для корректной работы OpenVPN, на роутере, который будет выступать в роли Сервера, должен быть внешний/внутренний статический IP-адрес. Этот IP-адрес необходимо будет указывать на роутерах и других устройствах OpenVPN, которые будут работать в режиме Клиент.

Также потребуется создать сертификаты CA, сервера и клиентов. Ознакомиться с примером создания сертификатов можно в статье — Создание сертификатов OpenVPN с помощью XCA.


В данной статье будет описана настройка OpenVPN между роутерами с операционной системой OpenWRT



На данной схеме представлены два роутера, один из которых клиент и имеет динамический IP-адрес (RTU1068_Client)
(также может иметь статический IP-адрес) , а второй, который имеет статический IP-адрес будет сервером.

Задача: объединить две подсети роутеров посредством OpenVPN.

Настройка сервера RTU1068

Настройка OpenVPN

Для настройки OpenVPN, необходимо сгенерировать сертификаты клиента и сервера, которые должны быть подписаны общим центром сертификации.

Процесс генерации сертификатов расписан, в ранее указанной статье  Создание сертификатов OpenVPN с помощью XCA

Однако для настройки OpenVPN необходимо также сгенерировать ключ Диффи-Хелмана и желательно ключ ta для дополнительной tls аутентификации. Данный процесс не описан в руководстве, поэтому сгенерируем ta ключ на роутере, а ключ Диффи-Хелмана через xca.

Генерируем ключ Диффи-Хелмана:





Генерируем ta.key

Подключимся к роутеру через консоль в соответствии с пунктом 2Б руководства: https://teleofis.ru/faq/3g-4g-routery-teleofis-serii-rtu/nachalo-raboty/kak-podklyuchitsya-k-routeru...


Для генерации ключей необходимо установить утилиту openssl-util

Для этого подаём команду opkg update и после вывода "Signature check passed" подаём команду opkg install openssl-util

root@RTU1068_Server:~# opkg install openssl-util
Installing openssl-util (1.1.1t-2) to root...
Downloading https://downloads.openwrt.org/releases/21.02.2/packages/arm_arm926ej-s/base/openssl-util_1.1.1t-2_ar...
Installing libopenssl-conf (1.1.1t-2) to root...
Downloading https://downloads.openwrt.org/releases/21.02.2/packages/arm_arm926ej-s/base/libopenssl-conf_1.1.1t-2...
Configuring libopenssl-conf.
Configuring openssl-util.
root@RTU1068_Server:~#

Генерируем ta ключ:
openvpn --genkey secret ta.key

Сгенерированный ключ будет находится в директории /root/

Ключ нужно выгрузить с роутера с помощью WinSCP


Перейдём в конфигурацию OpenVPN и отредактируем её:





  • Параметр verb можно указать от 7 до 9 на время отладки туннеля, тогда журналирование будет расширенным и можно будет углубиться в журнал, если возникнет проблема при создании туннеля;

Далее добавляем другие параметры:

  •   port - 1194
  •   server - подсеть туннеля. Для примера возьмем сеть 10.0.0.0 255.255.255.0. Тогда сервер должен получить первый адрес (10.0.0.1) из этой сети, а клиенты - остальные свободные адреса из этой сети;
  •   dev_type - tun
  •   ca - импортируем созданный сертификат ЦС
  •   dh - импортируем параметры Диффи-Хелмана
  •   cert - импортируем сертификат сервера
  •   key - импортируем ключ сервера
  •   proto - UDP




Переходим в расширенные настройки:



В пункте VPN добавляем параметр route и прописываем маршрут 192.168.88.0 255.255.255.0 10.0.0.5 в подсеть клиента.
Также добавляем параметр topology и выбираем subnet



Сохраняем изменения

В пункте VPN добавляем параметры:

  • client_config_dir, в котором указываем директорию для ccd файлов клиентов /etc/openvpn/ccd/
  • Параметр push, в который прописываем маршрут в подсеть сервера "route 192.168.89.0 255.255.255.0 10.0.0.1"


Сохраняем изменения и переходим во вкладку "Криптография"

Добавляем параметры:
  • tls_auth - c помощью WinSCP переносим наш ta.key в директорию /etc/openvpn/ после в параметре tls-auth прописываем путь к нему "/etc/openvpn/ta.key 0" после пути указываем 0, чтобы указать, что авторизоваться будет сервер.



После применяем изменения.

Теперь необходимо настроить файл ccd через консоль

создаём директорию /etc/openvpn/ccd/

mkdir /etc/openvpn/ccd/

Создаём файл Client1 

Файл должен называться по сommon name сертификата клиента, для которого мы создаём файл ccd

nano /etc/openvpn/ccd/Client1

Пропишем параметр iroute, чтобы указать чтобы указать серверу подсеть клиента.

iroute 192.168.88.0 255.255.255.0

В данном файле также можно задавать и другие параметры для конкретного клиента, например зададим конкретный IP-адрес, который получит клиент при подключении:


ifconfig-push 10.0.0.5 255.255.255.0



Сохраняем файл комбинацией

1) Ctrl + X
2) y
3) Enter

Запускаем OpenVPN:


Настройка межсетевого экрана

Для своей работы OpenVPN использует порт 1194, поэтому откроем его в межсетевом экране:
Перейдём в раздел "Сеть - Межсетевой экран - Правила для трафика"


Создаём новое правило со следующими параметрами:





Создаём зону для интерфейса tun, в которой разрешаем любой входящий трафик:





Теперь создадим интерфейс и добавим его в созданную зону:
Перейдём в пункт "Сеть" - "Интерфейсы" - "Добавить новый интерфейс"





Выбираем протокол не управляемый и устройство "tun0", затем нажимаем "Создать интерфейс"

Затем снова редактируем созданный интерфейс и добавляем его в зону:





Сохраняем и применяем изменения, а после перезагружаем роутер.


Настройка Клиента

1. Настройка OpenVPN

Отредактируем конфигурацию OpenVPN




  • Параметр verb можно указать от 7 до 9 на время отладки туннеля, тогда журналирование будет расширенным и можно будет углубиться в журнал, если возникнет проблема при создании туннеля;
  • remote -  Прописываем IP-адрес сервера после нажимаем на плюс

Далее добавляем другие параметры:

  •   port - 1194
  •   dev_type - tun
  •   ca - импортируем созданный сертификат ЦС
  •   cert - импортируем сертификат сервера
  •   key - импортируем ключ сервера
  •   proto - UDP



Нажимаем сохранить и переходим в расширенные настройки.

Во вкладке "VPN" добавляем параметр "pull" и активируем его - это позволит получать параметры от сервера:



На вкладке "Криптография" добавляем параметры:

  • tls_auth - указываем путь к ta ключу, который мы предварительно загрузили в директорию /etc/openvpn/ и прописываем после директории цифру 1, что означает авторизация как клиент.
  • remote_cert_tls - указываем "server".



Сохраняем и применяем изменения

Настройка Межсетевого экрана

Создаём зону для интерфейса tun, в которой разрешаем любой входящий трафик:





Теперь создадим интерфейс и добавим его в созданную зону:
Перейдём в пункт "Сеть" - "Интерфейсы" - "Добавить новый интерфейс"





Выбираем протокол не управляемый и устройство tun0, затем нажимаем "Создать интерфейс"

Затем снова редактируем созданный интерфейс и добавляем его в зону:






Запускаем OpenVPN:




После установки соединения проверить полученный IP-адрес можно командой "ip a" или "ifconfig"

Полученный IP-адрес на сервере:



Полученный IP-адрес на клиенте:



Проверка соединения

Выполним проверку соединения с помощью Ping

1) Пинг с клиента до туннельного адреса сервера:

root@RTU1068_Client:~# ping 10.0.0.1

PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=159.470 ms 
64 bytes from 10.0.0.1: seq=1 ttl=64 time=108.235 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=96.507 ms
64 bytes from 10.0.0.1: seq=3 ttl=64 time=110.483 ms
 
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 96.507/118.673/159.470 ms root@RTU1068_Client:~#

2) Пинг с клиента до локального адреса сервера:

root@RTU1068_Client:~# ping 192.168.89.1

PING 192.168.89.1 (192.168.89.1): 56 data bytes
64 bytes from 192.168.89.1: seq=0 ttl=64 time=76.713 ms
64 bytes from 192.168.89.1: seq=1 ttl=64 time=114.171 ms
64 bytes from 192.168.89.1: seq=2 ttl=64 time=115.399 ms
64 bytes from 192.168.89.1: seq=3 ttl=64 time=100.401 ms
--- 192.168.89.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 76.713/101.671/115.399 ms
root@RTU1068_Client:~#

3) Пинг с клиента до устройства с адресом 192.168.89.5

root@RTU1068_Client:~# ping 192.168.89.5
PING 192.168.89.5 (192.168.89.5): 56 data bytes 64 bytes from 192.168.89.5: seq=0 ttl=254 time=122.186 ms 64 bytes from 192.168.89.5: seq=1 ttl=254 time=102.404 ms 64 bytes from 192.168.89.5: seq=2 ttl=254 time=119.894 ms 64 bytes from 192.168.89.5: seq=3 ttl=254 time=95.760 ms --- 192.168.89.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 95.760/110.061/122.186 ms
root@RTU1068_Client:~#

4) Пинг с сервера до туннельного адреса клиента:

root@RTU1068_Server:~# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes 64 bytes from 10.0.0.5: seq=0 ttl=64 time=165.402 ms 64 bytes from 10.0.0.5: seq=1 ttl=64 time=122.358 ms 64 bytes from 10.0.0.5: seq=2 ttl=64 time=114.323 ms 64 bytes from 10.0.0.5: seq=3 ttl=64 time=105.261 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 105.261/126.836/165.402 ms
root@RTU1068_Server:~#


5) Пинг с сервера до локального адреса клиента:

root@RTU1068_Server:~# ping 192.168.88.1
PING 192.168.88.1 (192.168.88.1): 56 data bytes 64 bytes from 192.168.88.1: seq=0 ttl=64 time=113.996 ms 64 bytes from 192.168.88.1: seq=1 ttl=64 time=99.530 ms 64 bytes from 192.168.88.1: seq=2 ttl=64 time=119.455 ms 64 bytes from 192.168.88.1: seq=3 ttl=64 time=120.586 ms --- 192.168.88.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 99.530/113.391/120.586 ms
root@RTU1068_Server:~#

6) Пинг с сервера до устройства с адресом 192.168.88.25


root@RTU1068_Server:~# ping 192.168.88.25
PING 192.168.88.25 (192.168.88.25): 56 data bytes 64 bytes from 192.168.88.25: seq=0 ttl=254 time=133.484 ms 64 bytes from 192.168.88.25: seq=1 ttl=254 time=89.994 ms 64 bytes from 192.168.88.25: seq=2 ttl=254 time=140.514 ms 64 bytes from 192.168.88.25: seq=3 ttl=254 time=122.252 ms
--- 192.168.88.25 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 89.994/121.561/140.514 ms
root@RTU1068_Server:~#