Добрый день!
В моей домашней сети есть Raspberry Pi, которую я хочу использовать в том числе как dns-резалку рекламы и как vpn-шлюз.
Для этих целей я установил AdGuard home и настроил на нём dns-over-tls, выпустив его в Интернет. Теперь реклама на мобильных телефонах режется не только при подключении к домашнему wifi, но и при использовании мобильной сети (в Андроиде есть штатные настройки для этого: Настройки -> Сеть и Интернет -> Персональный DNS сервер). Что бы всё работало, для определённого субдомена я настроил DNS запись типа A, указывающую на IP, получаемый от провайдера.
А вот с одновременным использованием Малинки как vpn-шлюза возникают проблемы. Для подключения к VPN я использую штатное приложение NordVPN под Linux и протокол Nordlynx (проприетарную реализацию Wireguard). Как только подключение поднимается, весь трафик уходит в туннель и я теряю доступ к dns-серверу AdGuard из Интернета. Сразу скажу, что настраивать DNS запись типа A на IP VPN провайдера не вариант - там все порты закрыты для входящих соединений.
Таким образом, мне нужно настроить следующую схему: трафик любого клиента из LAN (10.10.10.0/24), использующий Малинку как шлюз должен направляться через туннель с именем nordlynx, а трафик самой Малинки должен идти через провайдера.
Я понимаю, что мне нужен policy-роутинг (
https://habr.com/ru/post/108690/), но как именно его настроить в такой конфигурации - пока догадаться не могу. В этой части и прошу помощи.
Моя текущая конфигурация.
Правило nat для интерфейа nordlynx:
-A POSTROUTING -o nordlynx -j MASQUERADE
Правила для цепочки FORWARD:
-A FORWARD -i eth0 -o nordlynx -j ACCEPT
-A FORWARD -i nordlynx -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Так выглядят таблицы маршрутизации без подключённого VPN:
$ ip rule
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
Вот так - с включённым:
$ ip rule
0: from all lookup local
217: from all lookup main suppress_prefixlength 0
218: not from all fwmark 0xca6c lookup 51820
219: from all to <IP VPN провайдера> lookup main
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
Так выглядят маршруты без VPN подключения:
$ ip route
default via 10.10.10.1 dev eth0 onlink
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
А так - с подключенным VPN:
$ ip route
default via 10.10.10.1 dev eth0 onlink
10.5.0.0/16 dev nordlynx proto kernel scope link src 10.5.0.2
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
Заранее благодарю за советы!