Debain サーバーを Wireguard クライアントとして設定すると、ローカル ネットワーク外で (パブリック IP を使用して) サーバーで実行されているサービスに接続できなくなります。ローカルネットワークでWireguard接続を停止すると、すべてがうまく機能します。 tcpdump ログは、要求がすべてサーバーに到着したことを示します。
wg0.conf:
[Interface]
PrivateKey = ...
Address = 100.64.67.64/32
DNS = 127.0.0.1
[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = ...
PresharedKey = ...
wg-quick up wg0
:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 100.64.67.64/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
ip -4 rule show table 51820
:
32765: not from all fwmark 0xca6c lookup 51820
wg-quick down wg0
:
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d wg0 -f
[#] iptables-restore -n
答え1
私はそれについて考えた。もちろん、問題は要求がeth0に移動しますが、応答はWireguardトンネル(wg1)を介して送信され、別のIPを使用してクライアントに到達することです。
Request: Client -> Internet -> Router [NAT] -> Server
Response: Server -> Router [NAT] -> Internet -> VPN Provider [NAT] -> Internet -> Client
したがって、このような場合は、ルールを追加してデフォルトのルーティングテーブルを使用してVPNトンネルをバイパスする必要があります。
ip rule add from <interface IP> lookup main
例:
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:ed:fc:a5:65 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
$ ip rule add from 192.168.0.2 lookup main
$ ip route show table main
default via 192.168.0.1 dev eth0 src 192.168.0.2 metric 202
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.2 metric 202
$ ip rule show
0: from all lookup local
32756: from 192.168.178.2 lookup main
32761: from all lookup main suppress_prefixlength 0
32762: not from all fwmark 0xca6c lookup 51820
32766: from all lookup main
32767: from all lookup default
私の場合、ローカルネットワークの外部からアクセスしたいサービスはWireguardサーバーでした。 Wireguardクライアントがローカルネットワークとインターネットにアクセスするには、次の規則も追加する必要があります。
ip rule add from <Wireguard IP range> lookup main
例:
$ ip a
11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.6.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
$ ip rule add from 10.6.0.1/24 lookup main