
私は OpenWRT OpenWrt 19.07.8 r11364-ef56c85848 を搭載した GL.inet ルーターを使用しています。
リモート マシンに Wireguard サーバーをセットアップしました。VPN が接続されていない場合は、パブリック IP を使用して LAN からそのサーバーにアクセスできます。VPN が接続されている場合は、内部 IP を使用してアクセスできますが、LAN 上のコンピューターから外部 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
私はできる内部 IP を使用してリモート サーバーにアクセスする場合 (例: ssh 経由)、VPN が確立されているかどうかに応じて適切なアドレスを選択する必要があるため不便です。
Wireguard の設定に何か不足しているのでしょうか、それとも他の問題があるのでしょうか?
答え1
私も最近この問題に直面しました。ルーターがサーバーの IP アドレスに IP ルールを追加していることがわかりました (表 31)。
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
コマンドを使用してこのルールを手動で削除すると、LAN ネットワークから Wireguard サーバー IP に直接 ping/ssh を実行できるようになります。
このルールが追加されている場所をいくつか見つけました:
/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 の専門家ではないので、これらの変更がルーターの再起動後も保存されることは保証できません。