首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iptables,wireguard: VPN和LAN之间的双向路由

iptables,wireguard: VPN和LAN之间的双向路由
EN

Server Fault用户
提问于 2020-10-17 16:50:41
回答 1查看 4.2K关注 0票数 1

我正在使用WireGuard建立虚拟专用网,并在各自的VPN服务器上配置防火墙。我希望有以下功能:

  • VPN设备(10.6.0.0/24)可从局域网(10.20.0.0/24)获得(问题!)
  • 局域网设备(10.20.0.0/24)可从虚拟专用网(10.6.0.0/24) (工作!)

当前iptables配置:

向任何方向转发现有(已打开)连接的所有通信量

代码语言:javascript
复制
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

这使局域网设备可以从VPN中获得(工作正常)

代码语言:javascript
复制
# 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设备可以从局域网中获得(需要帮助!)

代码语言:javascript
复制
# 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包被翻译和转发到局域网。

如果需要进一步的信息,请问:)谢谢您的时间!

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-10-18 14:24:07

Probmel解析

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

问题的起源

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

然而,这将自动为各自的子网设置一个新路由,覆盖原始路由。其结果是:您的服务器无法再访问LAN子网中的主机,这使得所有连接尝试都失败:

代码语言:javascript
复制
      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中添加了以下一行:

代码语言:javascript
复制
PostUp = route del -net 10.20.0.0/24 dev wg0

这删除了每次有线重新启动时将创建的路由。对于不是VPN子网且不应被覆盖的所有子网,都需要这样做。

编辑:您只需将Table=off添加到您的/etc/wireguard/wg0.conf中,WireGuard将不再扰乱您的路由表:)

总之,这是一次相当神经质的经历。我非常肯定会编写一个脚本来处理这些问题,使WireGuard更加“即插即用”:)

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1039111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档