如何使用 Iptables 配置全锥形 NAT

如何使用 Iptables 配置全锥形 NAT

我想找到正确的 iptables 命令组合来满足以下需求:

  • NE 通过 Linux 机器(使用 iptables)进行 NAT,到达 NTP 服务器所在的 WAN 云。
  • 为了实现冗余,NTP 服务器位于具有一个虚拟 IP 地址 (172.30.4.245) 的负载平衡集群中
  • 问题是,当 NE 使用 172.30.4.245 请求 NTP 更新时,会从实际 IP 地址之一(.200、.230、.240)收到 NTP 响应。

例子:

iptables 不允许此流程,这是正常的,因为请求的地址和响应的地址不一样(172.30.4.245 与 172.30.4.230):

请求:UDP 10.68.2.11:23445 ---> 172.30.4.245:123(这是NAT之前,当然NAT之后源是10.23.14.72)响应:UDP 172.30.4.230:123 ---> 10.23.14.72:23445(对WAN地址的响应)

我想知道是否有任何方法可以让 iptables 仅基于(s-port/d-port)建立 UDP 流,而不管 IP 地址如何,并基于此执行 NAT 返回 LAN。

UDP/NTP 只是一个示例,几乎所有需要的服务都是以相同的方式设置的(集群中的负载平衡)。

答案1

netfilter 不支持全锥形 NAT/端点独立映射开箱即用。你需要一个第三方内核模块为了那个原因。

如果客户端软件支持UPnP 互联网地址转换或者五氯苯酚对于端口映射请求,您还可以在路由器上安装 upnp/pcp 守护程序。

答案2

也许你应该看看你的负载均衡器。用更复杂的技术(如 IPVS)替换愚蠢的 NAT 应该可以解决问题。

相关内容