Mac 上的嵌套 Wireguard 路由使用主机的默认网关而不是外部隧道作为内部隧道

Mac 上的嵌套 Wireguard 路由使用主机的默认网关而不是外部隧道作为内部隧道

我在 MacOS 上使用wg-quickfrom 来wireguard-tools创建嵌套隧道host -> outer -> inner -> internet。问题是,当我启动内部隧道时(外部隧道已经启动后),它会尝试通过主机的默认网关路由到它,但由于我的 ISP 配置为阻止我的内部服务器 IP,因此失败。以下是我的配置:

外层隧道服务器:

[Interface]
PrivateKey = ...
Address = 10.0.0.1/32
ListenPort = 51820
PreUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE

[Peer]
PublicKey = ...
AllowedIPs = 10.0.0.2/32

外部隧道客户端

[Interface]
PrivateKey = ...
Address = 10.0.0.2/32
# MTU = 1440
# FwMark = 51820

[Peer]
PublicKey = ...
AllowedIPs = <inner external ip>/32, 10.0.0.1/32
Endpoint = <outer external ip>:51820

到目前为止一切正常,如果我将 AllowedIPs 设置为0.0.0.0/0并运行,wg-quick up ./outer.conf我可以通过外部服务器访问互联网。现在设置内部隧道:

服务器:

A popular VPN provider, so I assume the config is typical. I'm able to connect to it and access the internet using some unrelated test server.

客户:

[Interface]
PrivateKey = ...
Address = 10.1.0.2/32
MTU = 1380

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = <inner external ip>:51820

如果我跑,wg-quick up ./inner.conf它就会跑

[#] route -q -n add -inet 0.0.0.0/1 -interface utun4
[#] route -q -n add -inet 128.0.0.0/1 -interface utun4
[#] route -q -n add -inet <inner external ip> -gateway <host default gateway>

这是不正确的,因为inner external ip无法从主机访问,但可以从外部服务器访问。如果我添加Table = off到内部客户端配置并运行

> sudo wg show utun4 latest-handshakes
... 1700181717

我看到隧道已建立并处于活动状态,我也可以成功 ping 。因此问题范围缩小了,与添加错误的路由有关。我该如何修复它?我还尝试手动保留Table = off和添加前 2 条路由:

sudo route -q -n add -inet 0.0.0.0/1 -interface utun4
sudo route -q -n add -inet 128.0.0.0/1 -interface utun4

并且已经

[#] route -q -n add -inet <inner external ip>/32 -interface utun3

通过外部隧道添加。但它也会失败 - 互联网变得不可用。澄清一下,utun3是外部接口,utun4是内部接口。

更新:保留Table = off并添加一条到单个服务器的路由sudo route -q -n add -inet <website>/32 -interface utun4可以正确地通过内部隧道将流量路由到网站。所以看起来我只需要修复路由表,一切就都正常了。

相关内容