比如说我有node1和node2,通过互联网连接。node1上的应用服务器具有用于node2的IP的IP。
出于安全考虑,我在节点之间打开了一个Wireguard隧道。我想让应用程序的信任保持不变(因此在问题标题中是“透明的”),但是我遇到了以下问题:
Node2在与node1上的应用服务器通信时使用其vpn源地址,node1中没有该IP。
这是VPN设置中常见的问题,还是Wireguard的实现选择?有人知道一个优雅的解决方案吗?网络级别上的额外配置是可以的。在这种情况下,在应用程序级别上更改ACL不是一个选项。
到目前为止,我尝试的是通过引入策略源nat,将node1的公共地址用作vpn地址,但这在wireguard的情况下严重失败,因为它将远程隧道端点的静态路由添加到路由表中;结果如下:
发布于 2020-07-02 22:23:58
如果您想要使用您的“正常”主机IP来处理通过隧道的传出通信量,在我的示例中,只需执行以下操作即可:
[Interface]
Address = 10.102.0.1/24
PostUp = iptables -t nat -A POSTROUTING -s 10.102.0.1/32 -o wg-p2p -j SNAT --to-source 1.2.3.4
PostDown = iptables -t nat -D POSTROUTING -s 10.102.0.1/32 -o wg-p2p -j SNAT --to-source 1.2.3.4
...
[Peer]
AllowedIPs = 10.102.0.0/24, 1.2.3.4/32
...因此,基本上您设置了一个简单的有线隧道,并且只有使用iptables魔术,如果它是隧道源ip,您可以将源地址更改为最新时刻的“正常”IP地址(POSTROUTING)。
https://serverfault.com/questions/1023193
复制相似问题