问题已解决

问题已解决

我正在使用 WireGuard 设置 VPN,但在相应的 VPN 服务器上配置防火墙时卡住了。我希望以下功能可用:

  • 10.6.0.0/24可从 LAN () 访问VPN 设备 ( 10.20.0.0/24)(问题!)
  • 10.20.0.0/24可从 VPN 获得LAN 设备 ( ) ( 10.6.0.0/24)(有效!)

当前 iptables 配置:

转发来自现有(已打开)连接的任意方向的所有流量

iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这使得 LAN 设备可以通过 VPN 访问(工作正常)

# Direction: VPN -> LAN -------------------------------------------------------------
iptables -t nat -A PREROUTING -d 10.20.0.0/24 -j DNAT --to-destination 10.6.0.1     # Act as destination NAT from VPN to LAN (be the LAN-gateway for the VPN)
iptables -t filter -A FORWARD -s 10.6.0.0/24 -d 10.20.0.0/24 -j ACCEPT              # Accept traffic from VPN to LAN
iptables -t nat -A POSTROUTING -s 10.6.0.0/24 -d 10.20.0.0/24 -j MASQUERADE         # Mask traffic from VPN to LAN for responses

这将使 VPN 设备可从 LAN 访问(需要帮助!)

# Direction: LAN -> VPN -------------------------------------------------------------
iptables -t filter -A FORWARD -s 10.20.0.0/24 -d 10.6.0.0/24 -j ACCEPT              # Accept traffic from LAN to VPN
iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -d 10.6.0.0/24 -j MASQUERADE         # Mask traffic from LAN to VPN for responses

目前的发现:

通过查看这些规则,我可能在下面的部分中遗漏了另一个 DNAT/SNAT,但我仍然无法弄清楚......

VPN 接口上的接口计数器显示,ping 已发送到 VPN 客户端并返回!因此,问题似乎是到达的 VPN 数据包需要转换并转发到 LAN。

如果需要更多信息,请询问:)感谢您的时间!

答案1

问题已解决

正如@MichaelHampton 上面正确评论的那样,在这种情况下,NAT 是不必要的。整个任务仅仅是正确路由的问题,而不是 NAT 的问题。

问题的根源

为了让客户端能够连接到 LAN(10.20.0.0/24),您必须将此子网添加到AllowedIPs服务器配置内的指令中才允许。

但是,这会自动为相应子网设置新路由,覆盖原始路由。结果:您的服务器无法再访问 LAN 子网中的主机,导致所有连接尝试失败:

      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
-ok-> 10.6.0.0        0.0.0.0         255.255.255.0   U     0      0        0 wg0
-!!-> 10.20.0.0       0.0.0.0         255.255.255.0   U     0      0        0 wg0
-ok-> 10.20.0.0       0.0.0.0         255.255.255.0   U     303    0        0 wlan0

由于此路由的度量为 0(低于下面的默认路由的度量),因此该路由将始终被优先使用,并且使得无法尝试连接 LAN。

永久解决方案

就我而言,我只需将以下行添加到我的/etc/wireguard/wg0.conf

PostUp = route del -net 10.20.0.0/24 dev wg0

这将删除将要创建的路线每次 wireguard 重启时. 这需要对所有非 VPN 子网且不应被覆盖的子网执行。

编辑:您只需添加Table=off到您的/etc/wireguard/wg0.confWireGuard 即可停止弄乱您的路由表 :)


总而言之,这是一次相当令人紧张的经历。我很确定我会写一个脚本来处理这些事情,让 WireGuard 更加“即插即用” :)

相关内容