我正在使用WireGuard建立虚拟专用网,并在各自的VPN服务器上配置防火墙。我希望有以下功能:
10.6.0.0/24)可从局域网(10.20.0.0/24)获得(问题!)10.20.0.0/24)可从虚拟专用网(10.6.0.0/24) (工作!)向任何方向转发现有(已打开)连接的所有通信量
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT这使局域网设备可以从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设备可以从局域网中获得(需要帮助!)
# 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接口上的接口计数器显示,pings被发送到VPN客户端并返回!因此,问题似乎是到达的VPN包被翻译和转发到局域网。
如果需要进一步的信息,请问:)谢谢您的时间!
发布于 2020-10-18 14:24:07
正如上面正确评论的那样,NAT在这种情况下是不必要的。整个任务只是一个正确的路由问题,而不是NAT。
为了使客户端能够连接到局域网(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由于此rotue的度量为0(低于以下默认路由的度量),因此路由将始终是首选的,因此无法连接到LAN。
在我的例子中,我只是在我的/etc/wireguard/wg0.conf中添加了以下一行:
PostUp = route del -net 10.20.0.0/24 dev wg0这删除了每次有线重新启动时将创建的路由。对于不是VPN子网且不应被覆盖的所有子网,都需要这样做。
编辑:您只需将Table=off添加到您的/etc/wireguard/wg0.conf中,WireGuard将不再扰乱您的路由表:)
总之,这是一次相当神经质的经历。我非常肯定会编写一个脚本来处理这些问题,使WireGuard更加“即插即用”:)
https://serverfault.com/questions/1039111
复制相似问题