Сервер Wireguard WAN IP доступен с маршрутизатора, но не из локальной сети

Сервер Wireguard WAN IP доступен с маршрутизатора, но не из локальной сети

Я использую маршрутизатор GL.inet с OpenWRT OpenWrt 19.07.8 r11364-ef56c85848.

Я настроил сервер Wireguard на удаленной машине. При неподключенном VPN я могу получить доступ к этому серверу из своей локальной сети, используя его публичный IP. При подключенном VPN я могу получить доступ к нему по внутреннему IP, но больше не могу получить доступ к нему по внешнему IP с компьютера в своей локальной сети.

Traceroute показывает, что пакеты не проходят через маршрутизатор, и нет маршрута к хосту:

~ % ping 35.190.161.xxx
PING 35.190.161.169 (35.190.161.xxx): 56 data bytes
92 bytes from router.local.wan (192.168.1.254): Destination Host Unreachable

Однако если я подключусь к маршрутизатору по ssh, он не только покажет ожидаемую маршрутизацию, но и ping-запросы и traceroute будут выполнены успешно:

~# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         100.64.0.1      0.0.0.0         UG        0 0          0 wan
10.66.66.0      *               255.255.255.0   U         0 0          0 wg0
34.120.255.244  *               255.255.255.255 UH        0 0          0 wan
35.190.161.xxx  100.64.0.1      255.255.255.255 UGH       0 0          0 wan
100.64.0.0      *               255.192.0.0     U         0 0          0 wan
192.168.0.0     *               255.255.252.0   U         0 0          0 br-lan

~# ping 35.190.161.xxx
PING 35.190.161.xxx (35.190.161.xxx): 56 data bytes
64 bytes from 35.190.161.xxx: seq=0 ttl=59 time=243.335 ms

Моя конфигурация Wireguard для этого клиента:

[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxlMxuhwtB9vV2Gpks=
Address = 10.66.66.3/32,fd42:42:42::3/128
DNS = 8.8.8.8,8.8.4.4

[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxkIIPFsO2/EuXDNbeR3g=
PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxYnnXy4CZUMUzGBAieqU=
Endpoint = 35.190.161.xxx:60242
AllowedIPs = 10.66.66.0/24,::/0

В то время как яможетЧтобы получить доступ к удаленному серверу (например, через ssh), используя внутренний IP, неудобно выбирать правильный адрес в зависимости от того, установлен VPN или нет.

Чего-то не хватает в моей конфигурации Wireguard или есть какая-то другая проблема?

решение1

Недавно я тоже столкнулся с этой проблемой. Я обнаружил, что мой роутер добавляет IP-правило для IP-адреса сервера (таблица 31):

снимок экрана из таблицы маршрутизации LUCI

root@GL-MT300N-V2:~# ip rule
0:  from all lookup local
31: from all fwmark 0x60000/0x60000 lookup 31
1001:   from all iif eth0.2 lookup 1
2001:   from all fwmark 0x100/0x3f00 lookup 1
2061:   from all fwmark 0x3d00/0x3f00 blackhole
2062:   from all fwmark 0x3e00/0x3f00 unreachable
32766:  from all lookup main
32767:  from all lookup default

Если я включу клиент Wireguard, а затем вручную удалю это правило с помощью ip rule del from all fwmark 0x60000/0x60000 lookup 31команды, я смогу выполнить ping/ssh из локальной сети на IP-адрес сервера Wireguard напрямую.

Я нашел несколько мест, где это правило добавлено:

/etc/init.d/wireguard

/etc/vpn.user

Я закомментировал строки с командами добавления правила IP, и теперь я могу включать и выключать клиент Wireguard и по-прежнему иметь доступ к WAN IP:

    #fix ddns conflict
    #local DDNS=$(iptables -nL -t mangle | grep WG_DDNS)
    #local lanip=$(uci get network.lan.ipaddr)
    #local gateway=${lanip%.*}.0/24
    #if [ -z "$DDNS" ];then
            #iptables -t mangle -N WG_DDNS
            #iptables -A WG_DDNS -t mangle -i br-lan -s $gateway -d $publicip -j MARK --set-mark 0x60000
            #iptables -t mangle -I PREROUTING -j WG_DDNS
            #ip rule add fwmark 0x60000/0x60000 lookup 31 pref 31
            #ip route add $publicip dev wg0 table 31
    #fi

Обратите внимание, что я не эксперт в маршрутизации и не знаю, ломает ли этот хак что-нибудь (в комментариях написано «исправить конфликт ddns» — не уверен, что это значит), но у меня он работает нормально и ничего не ломает (я использую подключение Wireguard только для доступа к удаленной сети). Также я не эксперт в OpenWRT, поэтому не могу гарантировать, что эти изменения сохранятся при перезагрузках маршрутизатора.

Связанный контент