Как вручную настроить разделенный туннель приложения в wireguard?

Как вручную настроить разделенный туннель приложения в wireguard?
Как вручную настроить разделенный туннель приложения в wireguard? - wildhoney @ Unsplash

Мне трудно настроить NAS, который у меня есть, для довольно необычного варианта использования. Мне нужна постоянная конфигурация NAS для маршрутизации всего трафика через wireguard, кроме ssh из моей домашней сети. Проблема в том, что NAS (под управлением Debian) находится в VLAN отдельно от остальной части моей домашней сети в 192.168.2.0/24, в то время как остальная часть моей домашней сети находится в 192.168.1.0/24, поэтому ssh доступен только переадресация портов между VLAN, и, следовательно, исключение моих домашних подсетей из AllowedIPs не сработало. Любое решение по настройке wireguard для разрешения ответов на ssh-трафик за NAT решит мою проблему.

Частичное решение, которое я нашел для работы, заключается в использовании автоматического раздельного туннелирования с помощью утилиты mullvad (от моего провайдера VPN), которая исключает маршрутизацию списка процессов через интерфейс VPN. Я нашел pid sshd и добавил его в список исключений следующим образом:

% ps aux | grep sshd
    root    xxxx    ..... sshd: /usr/sbin/sshd ....
% mullvad split-tunnel pid add xxxx

Тогда он ведет себя так, как я хочу. Я полагаю, у меня мог бы быть скрипт, который запускается при запуске, который находит pid для sshd и добавляет его, как я сделал вручную, но меня беспокоит, что я не понимаю, что он делает за кулисами, и это кажется немного хакерским .

Я пытался выяснить, что происходит за кулисами, когда я использую функцию разделенного туннеля утилиты mullvad, и ничего не могу найти. Если я проверю правила брандмауэра % nft list ruleset, там нет ничего, что связано с pid sshd. Более того, если я полностью отключу брандмауэр, я все равно не смогу получить доступ по ssh без функции разделенного туннеля.

Если я проверю % ip route или % ip link с функцией разделения туннеля mullvad или без нее, результаты будут идентичными.

% ip route
default via 192.168.2.1 dev enp0sx proto dhcp src 192.168.2.x metric 202
xxx.xxx.xxx.xxx dev wg-mullvad proto static
192.168.2.0/24 dev enp0sx proto dhcp scope link src 192.168.2.x metric 202
% ip link
....
wg-mullvad: <POINTOPOINT,UP,LOWER_UP> mtu 1380 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/none

Разница, которую я заметил, заключается в том, что при включенной функции разделенного туннеля в выводе интерфейса fwmark: 0xyyyyyyyy появляется % wg, что соответствует правилу IP.

% ip rule
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xyyyyyyy lookup zzzzzzzzzz
32766: from all lookup main
32767: from all lookup default

Я не уверен, что это делает или где настраивается список процессов pid, и я не смог понять документацию wireguard. Я думаю, что я просто немного запутался с таблицами маршрутизации, и я не уверен, что искать, чтобы понять. Любая помощь в настройке этого вручную или просто указание мне нужной документации решит мою проблему.

Я полагаю, что также может иметь значение, какие другие варианты wireguard используются. Для справки, конфигурация wireguard по умолчанию от mullvad, которая работает для маршрутизации всего трафика (wg-quick up mullvad), выглядит следующим образом:

# /etc/wireguard/mullvad.conf

[Interface]
PrivateKey = xxxxxxxxxxxxxxxx
Address = x.x.x.x/32, fc00:x:x:x::x/128
DNS = x.x.x.x

[Peer]
PublicKey = xxxxxxxxxxxxxxxx
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = x.x.x.x:x

Спасибо :)

Вы хотите направлять трафик в свою домашнюю сеть (192.168.1.0/24) так же, как вы направляете трафик в свою сеть NAS (192.168.2.0/24), поэтому, как предложил Дэниел Б., добавьте маршрут специально для вашей домашней сети, который использует тот же шлюз, что и ваша сеть NAS. :

ip route add 192.168.1.0/24 via 192.168.2.1 dev enp0sx

Если у вас есть блок /0 в настройках WireGuard AllowedIPs, wg-quick всегда будет добавлять отмеченные вами правила политик маршрутизации suppress_prefixlength и fwmark — эти правила сообщают ядру пропустить маршрут по умолчанию в вашей основной таблице и вместо этого использовать пользовательскую таблицу. zzzzzzzzzz который wg-quick настраивает для этого случая (кроме трафика с вашей конечной точкой WireGuard, который WireGuard помечает 0xyyyyyyy). Эти правила направляют весь трафик без определенного для него маршрута через туннель WireGuard. Они эффективно переопределяют маршрут по умолчанию в вашей основной таблице, который обычно отправляет этот трафик на ваш маршрутизатор локальной сети 192.168.2.1.


NevaDev, 6 февраля 2023 г., 04:28