Введение
Я решил протестировать 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.
Схема подключения
Конфигурация 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...
Я отредактировал конфигурацию созданную скриптом под свои требования:
-
Настраиваем службу для работы с 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
-
Отредактировал конфигурацию 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
Отредактировал клиентскую конфигурацию
/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.
Выбираем конфигурацию из списка, жмём Start, ничего страшного, если будут предупреждения, перепроверим конфиг, и включаем интерфейс ovpn
Осталось добавить маршрут до 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
После установки заходим в 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
Редактируем дефолтный конфиг /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-интерфейсе
Настроим диапазон адресов для выдачи DHCP сервером
Если мы смогли подключиться к точке доступа, получили 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:
Конфигурация клиента OpenVPN
Переходим в данное меню и загружаем скачанную с сервера конфигурацию openwrt.ovpn
Включаем добавленный инстанс и проверяем подключение к серверу через SSH OpenWRT
Приступим к конфигурации маршрутов
-
Отключим получение Default gateway от DHCP сервера на WAN интерфейсе
-
В Network -> Routing добавляем статический маршрут до "белого ip" нашего VPS сервера через IP роутера
-
Добавляем маршрут до домашней сети через внутренний адрес OpenVPN MikroTik 10.12.0.2
-
Добавляем статический Default gateway через 10.12.0.1, что бы весь траффик шел через туннель
Проверяем сетевую связанность оборудования
Заключение
Данный проект продемонстрировал, что с использованием OpenWRT и OpenVPN можно организовать удобный и безопасный удалённый доступ к домашней инфраструктуре. Главное преимущество такой системы — гибкость. Вы можете добавлять и комбинировать решения под ваши конкретные задачи. Например, подключить USB Wi-Fi адаптер для подключения к любому роутеру по Wi-Fi, установить USB LTE модем для обеспечения канала связи, и так далее.
Важно помнить, что каждая конфигурация имеет свои особенности, поэтому стоит тестировать различные варианты. Надеюсь, что данное руководство и мой кейс использования стал полезным для построения вашей системы и сподвиг на реализацию подобного решения.
Если у вас есть вопросы, предложения или интересные кейсы, делитесь ими в комментариях!
Комментарии (3)
itshnick88
04.12.2024 15:43По умолчанию OpenWRT доступен через интерфейс
eth0
по IP-адресу192.168.1.1/24
Хмм) /24?
Kononvaler
На не майкротике может было бы наоборот между wg vs ovpn?
На кинетике wg выдает около 95 процентов от максимума. И такого ужаса с настройками нет.
Еще и OpenConnect завезли с уходои от dpi, там похуже с производительностью само собой так как и обработок больше.
При равных условиях опенвпн дикий тормоз по сравнению с wg.