我不确定这是否是一个一般的路由问题,或者与 Wireguard 或 EasyTether 有关,但我认为它是一般路由。
我有一台 Raspberry Pi 4,可以使 Android 手机充当 NAT 路由器上的 WAN 端口。
Pi 运行易用Tether通过 USB 连接到手机。这是可行的。它提供了一个tun-easytether
接口。192.168.117.0/31
手机是192.168.117.1
。
我定义了一个网关,结果如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.117.1 0.0.0.0 UG 0 0 0 tun-easytether
192.168.115.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.117.0 0.0.0.0 255.255.255.254 U 0 0 0 tun-easytether
192.168.118.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
192.168.115.1
eth0 是连接到路由器 WAN 的以太网端口。路由器 WAN 有一个静态 IP 192.168.115.2
。
效果很好。我可以用连接到路由器 LAN 端的笔记本电脑浏览网页。
现在我试着介绍一下 Wireguard。我在 Digital Ocean 的 droplet 和 Pi 上安装了 Wireguard。服务器位于192.168.118.1
,Pi 位于192.168.118.2
。
我更改了默认路由并为 VPN 设置了一条路由,结果如下:
0.0.0.0 192.168.118.2 0.0.0.0 UG 0 0 0 wg0
68.x.x.x 192.168.117.1 255.255.255.255 UGH 0 0 0 tun-easytether
192.168.115.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.117.0 0.0.0.0 255.255.255.254 U 0 0 0 tun-easytether
192.168.118.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
68.xxx 是服务器的公共地址。这基本可行,因为我可以从 Pi 上的命令行 ping192.168.118.1
和。跟踪路由显示它正在通过 Digital Ocean。一切看起来都很好,只是我无法再从路由器 LAN 端的笔记本电脑访问外部世界。跟踪路由停止在,即 Pi 上的 eth0。8.8.8.8
8.8.8.8
192.168.115.1
Pi 似乎没有转发进入的流量192.168.115.1
。我已多次恢复到原始的非 VPN 配置,以确保它仍然有效。在 Pi 上net.ipv4.ip_forward=1
设置。sysctl.conf
我感觉我已经接近目标了,但还是缺少了一些东西。我可以提供 Wireguard 设置等,但这似乎不相关,因为它似乎可以正常工作。
谢谢你的帮助。
编辑:经过进一步挖掘,我认为这不是 Wireguard 的问题,我可能错了。它看起来像是https://serverfault.com/questions/1014577/howto-configure-wireguard-on-linux-router-to-route-all-traffic-from-lan-to-remot
答案1
解决了!这就是在 eth0 和 wg0 之间转发流量所需要的。
iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
好像不需要网关设置。这是我的路由表。
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.115.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.117.0 0.0.0.0 255.255.255.254 U 0 0 0 tun-easytether
68.x.x.x 192.168.117.1 255.255.255.255 UGH 0 0 0 tun-easytether
我删除了之前关于将 eth0 与 wg0 放在同一网络上的答案。那是一种黑客行为。