Оглавление
Для корректной работы OpenVPN, на роутере, который будет выступать в роли Сервера, должен быть внешний/внутренний статический IP-адрес. Этот IP-адрес необходимо будет указывать на роутерах и других устройствах OpenVPN, которые будут работать в режиме Клиент.
Также потребуется создать сертификаты CA, сервера и клиентов. Ознакомиться с примером создания сертификатов можно в статье — Создание сертификатов OpenVPN с помощью XCA.
(также может иметь статический 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
Настройка межсетевого экрана
Перейдём в раздел "Сеть - Межсетевой экран - Правила для трафика"
Создаём новое правило со следующими параметрами:
Создаём зону для интерфейса tun, в которой разрешаем любой входящий трафик:
Теперь создадим интерфейс и добавим его в созданную зону:
Перейдём в пункт "Сеть" - "Интерфейсы" - "Добавить новый интерфейс"
Выбираем протокол не управляемый и устройство "tun0", затем нажимаем "Создать интерфейс"
Затем снова редактируем созданный интерфейс и добавляем его в зону:
Сохраняем и применяем изменения, а после перезагружаем роутер.
Настройка Клиента
1. Настройка OpenVPN
Отредактируем конфигурацию OpenVPN
- Параметр verb можно указать от 7 до 9 на время отладки туннеля, тогда журналирование будет расширенным и можно будет углубиться в журнал, если возникнет проблема при создании туннеля;
- remote - Прописываем IP-адрес сервера после нажимаем на плюс
Далее добавляем другие параметры:
- port - 1194
- dev_type - tun
- ca - импортируем созданный сертификат ЦС
- cert - импортируем сертификат сервера
- key - импортируем ключ сервера
- proto - UDP
Нажимаем сохранить и переходим в расширенные настройки.
На вкладке "Криптография" добавляем параметры:
- tls_auth - указываем путь к ta ключу, который мы предварительно загрузили в директорию /etc/openvpn/ и прописываем после директории цифру 1, что означает авторизация как клиент.
- remote_cert_tls - указываем "server".
Настройка Межсетевого экрана
Создаём зону для интерфейса tun, в которой разрешаем любой входящий трафик:
Теперь создадим интерфейс и добавим его в созданную зону:
Перейдём в пункт "Сеть" - "Интерфейсы" - "Добавить новый интерфейс"
Выбираем протокол не управляемый и устройство tun0, затем нажимаем "Создать интерфейс"
Затем снова редактируем созданный интерфейс и добавляем его в зону:
После установки соединения проверить полученный IP-адрес можно командой "ip a" или "ifconfig"
Полученный IP-адрес на сервере:
Полученный IP-адрес на клиенте:
Проверка соединения
Выполним проверку соединения с помощью Ping1) Пинг с клиента до туннельного адреса сервера:
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:~#