我在 MacOS 上使用wg-quick
from 来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
可以正确地通过内部隧道将流量路由到网站。所以看起来我只需要修复路由表,一切就都正常了。