Маршрутизация траффика wireguard

У меня есть VPS c выделенным IP - На нем установлен wireguard

В локальной сети дома есть сервер, на нем докер и web приложения

В данный момент весь трафик (домашнего сервера) идет через туннель WG VPS, но я хочу чтобы основной шлюз (домашнего сервера) был шлюз моего домашнего интернета (192.168.1.1.)

При этом я хочу иметь доступ по домену, (привязанному к ip VPS), к моему домашнему серверу Подскажите как это можно сделать?

Приложу примитивную схему

Схема маршрутизации

VPS

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 51820
PrivateKey = key

PostUp = iptables -I INPUT -p udp --dport 51820 -j ACCEPT
PostUp = iptables -I FORWARD -i ens3 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostUp = ip6tables -I FORWARD -i wg0 -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 51820 -j ACCEPT
PostDown = iptables -D FORWARD -i ens3 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

PreUp = iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 80 -j DNAT --to-destination 10.66.66.2:80
PostDown = iptables -t nat -D PREROUTING -i ens3 -p tcp --dport 80 -j DNAT --to-destination 10.66.66.2:80
PreUp = iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443
PostDown = iptables -t nat -D PREROUTING -i ens3 -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443

### Client home server
[Peer]
PublicKey =key
PresharedKey = key
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128 

Home server

[Interface]
PrivateKey = key
Address = 10.66.66.2/32,fd42:42:42::2/128
#DNS = 192.168.1.1,8.8.8.8

PreUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0

########
PostUp = iptables -t nat -A POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o `ip route | awk '/default/ {print $5; exit}'` -j MASQUERADE

PostUp = iptables -I FORWARD -i wlp2s0 -o %i -s 172.0.0.0/0 -d 10.66.66.0/24 -j ACCEPT # разрешат компьютерам сети отправлять пакеты VPN-клиентам
PostUp = iptables -I FORWARD -i %i -o wlp2s0 -s 10.66.66.0/24 -d 172.0.0.0/0 -j ACCEPT # разрешат компьютерам сети получать пакеты от VPN-клиентов
PostDown = iptables -D FORWARD -i wlp2s0 -o %i -s 172.0.0.0/0 -d 10.66.66.0/24 -j ACCEPT
PostDown = iptables -D FORWARD -i %i -o wlp2s0 -s 10.66.66.0/24 -d 172.0.0.0/0 -j ACCEPT

[Peer]
PublicKey = key
PresharedKey = key
Endpoint = 123.123.123.123:51820
AllowedIPs = 0.0.0.0/0,::/0
PersistentKeepalive = 25

Я нашел решение! Оно оказалось простым и описано в:

https://www.procustodibus.com/blog/2022/09/wireguard-port-forward-from-internet/

Проблема была в том что я тестировал с телефона и веб приложения не открывались. Нужно было очистить кэш браузера или открыть в приватном режиме!

Конфигурация домашнего сервера теперь выглядит следующим образом:

[Interface]
PrivateKey = key
Address = 10.66.66.2/32

PreUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0

Table = 123
PreUp = ip rule add from 10.66.66.2 table 123 priority 456
PostDown = ip rule del from 10.66.66.2 table 123 priority 456

[Peer]
PublicKey = key
PresharedKey = key
Endpoint = 123.123.123.123:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

При таком подходе вы сможете подключиться к веб-приложению на частном сервере с любого узла в Интернете, используя имя хоста и порт публичного сервера (например, curl public.example.com:2000). Веб-приложение на частном сервере будет видеть оригинальный IP-адрес источника, но также сможет корректно отправлять ответы обратно через публичный сервер. Весь остальной трафик частного сервера, включая трафик, исходящий с самого частного сервера, будет продолжать использовать основную таблицу маршрутизации сервера, не затронутую конфигурацией WireGuard.


Ответы (0 шт):