Введение

Я решил протестировать snapshot OpenWRT на Raspberry Pi 5, тем более далеко улетаю, требуется что бы траффик во внешку был зашифрован, и я имел доступ до домашней инфраструктуры, подключаясь проводом к любому роутеру. В этом проекте решил протестировать возможность организации удаленного доступа с использованием OpenVPN. Для снижения задержек я выбрал VPS-сервер, расположенный в Финляндии, учитывая, что буду подключаться из Европы в Россию. Почему именно OpenVPN? Помимо стабильной работы, MikroTik hAP ax³ поддерживает аппаратное шифрование AES-256, что позволяет достичь скорости до 400 Мбит/с, превосходя WireGuard, который в моих тестах показал лишь 150 Мбит/с. Важный нюанс: OpenVPN-клиент MikroTik, начиная с версии ROS 7.9.x, работает только через TCP (forum.mikrotik.com), UDP, к сожалению, сломали.

Обзор используемого оборудования и программного обеспечения 

Для реализации я использовал следующее оборудование: 

Raspberry Pi 5. На Raspberry Pi 5 я установил последний snapshot OpenWRT (на момент написания статьи: r28214-5a4eb56a7b). Устройство выполняет роль точки доступа и заворачивает весь входящий трафик в OpenVPN. 

VPS-сервер: На VPS-сервере установлена Ubuntu Server 24.04. Он выступает шлюзом для доступа в интернет и к домашней сети, выполняя роль OpenVPN-сервера. 

MikroTik hAP ax³: MikroTik с версией RouterOS 7.17rc1 служит основным домашним роутером с клиентом OpenVPN.

Схема подключения

Pasted image 20241202142603.png
Схема подключения

Конфигурация VPS и настройка

На VPS установлен Ubuntu Server 24.04. Сначала обновляем систему: 

apt update && apt upgrade -y 

Устанавливаем OpenVPN с помощью скрипта:

 wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh 

Во время установки скрипт запросит настройки:

Which IPv4 address should be used?
     1) *.*.*.*
     2) 1Which IPv4 address should be used?
     1) *.*.*.*
     2) 172.17.0.1
IPv4 address [1]: 1

Which protocol should OpenVPN use?
   1) UDP (recommended)
   2) TCP
Protocol [1]: 2

What port should OpenVPN listen to?
Port [1194]: 

Select a DNS server for the clients:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]: 3

Enter a name for the first client:
Name [client]: mikrotik

OpenVPN installation is ready to begin.
Press any key to continue...

72.17.0.1
IPv4 address [1]: 1

Which protocol should OpenVPN use?
   1) UDP (recommended)
   2) TCP
Protocol [1]: 2

What port should OpenVPN listen to?
Port [1194]: 

Select a DNS server for the clients:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]: 3

Enter a name for the first client:
Name [client]: mikrotik

OpenVPN installation is ready to begin.
Press any key to continue...

Я отредактировал конфигурацию созданную скриптом под свои требования:

  1. Настраиваем службу для работы с iptables:

     /etc/systemd/system/openvpn-iptables.service

[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.12.0.0/24 -o ens3 -j MASQUERADE
ExecStart=/usr/sbin/iptables -I INPUT -p tcp --dport 1194 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -s 10.12.0.0/24 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
  1. Отредактировал конфигурацию OVPN-сервера

     /etc/openvpn/server/server.conf 

local <ip-сервера>
port 1194
proto tcp
dev tun
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
cipher AES-256-GCM
topology subnet
server 10.12.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
client-config-dir ccd
crl-verify crl.pem
route 192.168.50.0 255.255.255.0 10.12.0.2 #домашняя сеть
route 192.168.55.0 255.255.255.0 10.12.0.3 #openwrt сеть
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
  1. Отредактировал клиентскую конфигурацию /root/mikrotik.ovpn, которую скрипт создал во время установки сервера.

client
dev tun
proto tcp
remote <ip-сервера> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
tls-client
auth SHA512
cipher AES-256-GCM
verb 3

Создаём директорию для клиентских конфигураций:

 mkdir /etc/openvpn/server/ccd 

в этой директории необходимо создать 2 конфигурации

nano /etc/openvpn/server/ccd/mikrotik 

с содержимым:

iroute 192.168.50.0 255.255.255.0

для удаленной домашней сети 

nano /etc/openvpn/server/ccd/openwrt 

с содержимым 

iroute 192.168.55.0 255.255.255.0 

для удаленной сети openwrt перезапускаем службу 

systemctl start openvpn-server@server.service

Для того, что бы добавить клиента openwrt на сервер запустим скрипт

 openvpn-install.sh

OpenVPN is already installed.

Select an option:
   1) Add a new client
   2) Revoke an existing client
   3) Remove OpenVPN
   4) Exit
Option: 1

Provide a name for the client:
Name: openwrt

Наконец-то приступаем к конфигурации MikroTik

Cкачиваем с сервера mikrotik.ovpn, и заливаем его в MikroTIk Импортируем её через интерфейс PPP -> Interface -> Import.

Pasted image 20241202182036.png
PPP > Interface > Import

Выбираем конфигурацию из списка, жмём Start, ничего страшного, если будут предупреждения, перепроверим конфиг, и включаем интерфейс ovpn

Pasted image 20241202182541.png
Pasted image 20241202182541.png

Осталось добавить маршрут до Raspberry Pi 5, в моём случае, на RPI 5 сеть 192.168.55.1/24 

/ip/route/add dst-address=192.168.55.0/24 gateway=10.12.0.1

Установка и конфигурация OpenWRT Загружаем последнюю сборку OpenWRT (snapshot) по ссылке.
Записываем образ на SD-карту с помощью утилиты rpi-imager

Pasted image 20241202184755.png
rpi-imager

После установки заходим в OpenWRT через SSH. По умолчанию OpenWRT доступен через интерфейс eth0 по IP-адресу 192.168.1.1/24

В файле /etc/config/network меняем static на dhcp и удаляем статические IP

config interface 'lan'
	option proto 'dhcp'
	option device 'lan-br'

Перезапуск сети

/etc/init.d/network restart

Отключение файрвола (временно)

/etc/init.d/firewall stop

Обновление пакетов

apk update
apk upgrade

Установка необходимых пакетов

apk add vim luci kmod-usb-net usb-modeswitch kmod-usb-net-cdc-ether kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan openvpn-openssl luci-app-openvpn

Настройка драйверов для USB-сетевой карты


Если вы планируете использовать внешнюю USB-сетевую карту, определите её чипсет командой:

lshw -C network

В моём случае драйвером оказался rtl8152, устанавливаем:

apk add kmod-usb-net-rtl8152

Проверяем, что сетевая карта определилась в системе: ip a

Pasted image 20241202190056.png
Вывод команды ip a

Редактируем дефолтный конфиг /etc/config/network

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config interface 'wan'
	option device 'eth0'
	option proto 'dhcp'
	option type 'bridge'

config device
	option type 'bridge'
	option name 'lan-br'
	list ports 'eth1'
	option ipv6 '0'
	option bridge_empty '1'

config interface 'lan'
	option proto 'static'
	option device 'lan-br'
	option ipaddr '192.168.55.1'
	option netmask '255.255.255.0'

В данном случае, конфигурация описывает DHCP клиент на eth0 для WAN, и lan-br со статическим IP, который включает в себя интерфейс eth1 для LAN

Конфигурация Wi-Fi точки доступа: конфигурационный файл находится в директории /etc/config/wireless

config wifi-device 'radio0'
        option type 'mac80211'
        optioconfig wifi-device 'radio0'
        option type 'mac80211'
        option path 'platform/axi/1001100000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
        option band '5g'
        option channel '36'
        option htmode 'VHT80'
        option cell_density '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'psk2'
        option key 'wirelesspe$$w0rd!'
n path 'platform/axi/1001100000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
        option band '5g'
        option channel '36'
        option htmode 'VHT80'
        option cell_density '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'psk2'
        option key 'wirelesspe$$w0rd!'

После редактирования конфигурации выполните: 

wifi up

Проверяем конфигурацию интерфейсов в LuCI Web-интерфейсе

Pasted image 20241202211441.png
LuCI Web-интерфейс

Настроим диапазон адресов для выдачи DHCP сервером

Pasted image 20241125215703.png
Interfaces>LAN

Если мы смогли подключиться к точке доступа, получили IP, и зашли по SSH в OpenWRT из внутренней сети 192.168.55.0, то можно включить firewall: 

/etc/init.d/firewall start

Включаем маскарадинг в 

/etc/config/firewall 

config nat 
list proto 'all'
option src 'wan'
option src_ip '192.168.55.0/24'
option target 'MASQUERADE'

Проверка подключения к интернету с Wi-Fi:

Pasted image 20241125220238.png
> Ping куда угодно

Конфигурация клиента OpenVPN

Переходим в данное меню и загружаем скачанную с сервера конфигурацию openwrt.ovpn

Pasted image 20241202223106.png

Включаем добавленный инстанс и проверяем подключение к серверу через SSH OpenWRT

Pasted image 20241203115324.png

Приступим к конфигурации маршрутов

  1. Отключим получение Default gateway от DHCP сервера на WAN интерфейсе

    Pasted image 20241203115500.png
    Interfaces>WAN
  2. В Network -> Routing добавляем статический маршрут до "белого ip" нашего VPS сервера через IP роутера

    Pasted image 20241203122342.png
    Network -> Routing
  3. Добавляем маршрут до домашней сети через внутренний адрес OpenVPN MikroTik 10.12.0.2

    Pasted image 20241203132211.png
    Network -> Routing
  4. Добавляем статический Default gateway через 10.12.0.1, что бы весь траффик шел через туннель

    Pasted image 20241203120630.png
    Network -> Routing

    Проверяем сетевую связанность оборудования

    Pasted image 20241203132348.png

Заключение

Данный проект продемонстрировал, что с использованием OpenWRT и OpenVPN можно организовать удобный и безопасный удалённый доступ к домашней инфраструктуре. Главное преимущество такой системы — гибкость. Вы можете добавлять и комбинировать решения под ваши конкретные задачи. Например, подключить USB Wi-Fi адаптер для подключения к любому роутеру по Wi-Fi, установить USB LTE модем для обеспечения канала связи, и так далее.

Важно помнить, что каждая конфигурация имеет свои особенности, поэтому стоит тестировать различные варианты. Надеюсь, что данное руководство и мой кейс использования стал полезным для построения вашей системы и сподвиг на реализацию подобного решения.

Если у вас есть вопросы, предложения или интересные кейсы, делитесь ими в комментариях!

Комментарии (3)


  1. Kononvaler
    04.12.2024 15:43

    На не майкротике может было бы наоборот между wg vs ovpn?

    На кинетике wg выдает около 95 процентов от максимума. И такого ужаса с настройками нет.

    Еще и OpenConnect завезли с уходои от dpi, там похуже с производительностью само собой так как и обработок больше.

    При равных условиях опенвпн дикий тормоз по сравнению с wg.


  1. crawlingroof
    04.12.2024 15:43

    Теперь это так называется? По краю ходите. Сегодня уже 4е. (


  1. itshnick88
    04.12.2024 15:43

    По умолчанию OpenWRT доступен через интерфейс eth0 по IP-адресу 192.168.1.1/24

    Хмм) /24?