iptables:如何使用动态(DHCP)地址进行 DNAT/SNAT

iptables:如何使用动态(DHCP)地址进行 DNAT/SNAT

我正在考虑构建类似“VPN 卫星设备”的东西。基本上Linux 盒,可用于任何典型的家庭网络。它应该获得 DHCP 租约,连接到 VPN 服务器,然后将某些端口转发/DNAT/SNAT 到 VPN 内的地址。所以,基本上,它提供在 VPN 内托管的某些服务,就像托管在卫星设备上一样

第一个问题:这项技术已经有名字了吗?这是一个我可以在某处读到的众所周知的模式(或反模式)吗?

详细来说,有一个具体的问题,看起来,我需要在设置 DNAT/SNAT 时指定本地 IP。至少,我认为这是最干净的。

我举一些接口和 IP 地址作为示例,该设备具有:

  • eth0 具有通过 DHCP 获得的地址。假设其为 192.168.1.13。但我需要与该地址无关的代码/规则
  • wg0(vpn 接口),IP 为 10.0.0.17。我确信这是一个地址。我可以在代码/规则中使用它。在该网络上,有一个 IP 为 10.0.0.1 的服务器。

假设 10.0.0.1 上的服务器在端口 80 上运行 http 服务。我想要设置我的卫星盒以在端口 80 上向其所插入的任何家庭网络提供此服务。

为此,我可以制定如下规则:

iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.1.13 --dport 80 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A POSTROUTING -o wg0 -d 10.0.0.1 -p tcp --dport 80 -j SNAT --to 10.0.0.17

但显然,这使用 DHCP 获得的地址 192.168.1.13 ,我事先并不知道这个地址。这基本上就是我的问题的核心。

如何以最干净的方式解决这个问题?最后,我想用这种方式转发大约 3 个端口。我基本上看到 2 个选项:

A)创建一个重新设置 iptable 规则的脚本,该脚本在 dhcp 客户端获取地址后执行

b)定义这样的规则,使得它们不需要本地获取的 IP 地址。

a 是可行的,但对我来说看起来有点奇怪。对于 b,我不确定它是否真的可行,并且不会产生副作用,例如对许多数据包进行 DNAT/SNAT。

相关内容