这可能更像是一个 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
答案1
如果您的默认策略是在 iptables/ufw 中删除或拒绝转发。那么您很可能缺少防火墙/ufw 条目,以允许流量在不同的 wireguard 接口之间流动或在同一接口上进出。
您可以检查 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
这将允许来自(-s 标志)接口 wg0 上的 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
祝你好运 :)