这可能更像是一个 Linux 防火墙问题,但上下文是 Ubuntu 上的 Wireguard VPN 设置。请注意,我几乎不熟悉这些东西。
我在 Digital Ocean Ubuntu 上启动并运行了 Wireguard,Windows 和 Android 客户端都在使用它。一切似乎都很好。
我在出现时使用的基本防火墙命令如下: 因此,第 3 行似乎将所有进入wg0
(私有 VPN)的流量通过公共eth0
接口路由出去。正如它应该(几乎?),它工作正常。Wgo/Private 网络是10.8.0.1/24
,服务器是10.8.0.1
. 当客户端流量进入下面的服务器10.8.0.x
(专用网络中的另一个地址)时,它会超时。
我“认为”这是因为它试图通过路由eth0
?如果是这样,我如何确保发往私有子网的流量仍然使用wg0
接口?如果没有,还有其他建议吗?
PreUp = sysctl -w net.ipv4.ip_forward=1
PreUp = sysctl -w net.ipv6.conf.all.forwarding=1
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w net.ipv4.ip_forward=0
PostDown = sysctl -w net.ipv6.conf.all.forwarding=0
如果您的默认策略是在 iptables/ufw 中删除或拒绝转发。那么你很可能错过了允许流量在不同的wireguard接口之间流动或在同一个接口上进出的防火墙/ufw条目。
您可以检查您的 dmesg 是否有
[UFW BLOCK]
消息。允许在同一个 wg 接口上不受限制地流入和流出
PostUp = ufw route allow in on wg0 out on wg0
我更喜欢直接修改配置文件
sudo vim /etc/ufw/before.rules
去过滤,在需要的行结束后可以添加你需要的转发规则。例如:-A ufw-before-forward -i wg0 -s 10.8.0.1/24 -o wg0 -d 10.8.0.1/24 -j ACCEPT
这将允许从接口 wg0 上的(-s 标志)10.8.0.1/24 到接口 wg0 上的(-d 标志)10.8.0.1/24 的流量。-i 是输入接口,-o 是输出接口。
如果您更喜欢使用 up\down 方式,可以在命令前添加 iptables。
iptables -A ufw-before-forward -i wg0 -s 10.8.0.1/24 -o wg0 -d 10.8.0.1/24 -j ACCEPT
祝你好运 :)