虚拟客户机使用主机 IP 时不进行 NAT

虚拟客户机使用主机 IP 时不进行 NAT

我正在使用 lxc 托管一些服务。我希望将其中一个服务公开给外界。

我已经使用 iptables 在主机上设置了三个 NAT 规则,一个用于 eth0,一个用于 br0(容器/客户的桥梁),还有一个 OUTPUT 规则用于来自主机本身的流量。

使用这些规则,我可以使用主机 IP (10.234.13.185) 和我选择的端口 (4050) 访问客户机/容器 (192.168.3.54:61616)。这适用于外部世界、主机和其他客户机。

但是,我无法让它从具有该服务(192.168.3.54)的访客端运行。

我注意到流量从端口 4050 进入主机,在正常情况下最终到达客户机的端口 61616。但是,如果流量来自客户机,它仍然会到达主机端口 4050,但不会被路由到 61616,而是坚持到 4050。

我已经完成了 ngrep 并且从其他客户端我看到(使用 telnet):

  • $主机:ngrep -p 4050:10.234.13.185:4050->$客户端ip [AR]
  • $主机:ngrep -p 61616:$客户端ip->192.168.3.54 [S] * 2,192.168.3.54:61616->$客户端ip [AR]
  • $guest: ngrep -p 61616: 192.168.3.54:61616 -> $client_ip [AR]
  • $guest: ngrep -p 4050: 无

然而,当我从客户机本身重复 telnet 时,我看到:

  • $host: ngrep -p 4050: 192.168.3.54:**** -> 10.234.13.185:4050 [S](重复)
  • $host: ngrep -p 61616: 192.168.3.54:**** -> 192.168.3.54:61616 [S](仅一次)
  • $guest: ngrep -p 61616: 无
  • $guest: ngrep -p 4050: 192.168.3.54:**** -> 10.234.13.185:4050 [S] (重复)

我假设缺少一条规则(可能是源的 POSTROUTING 规则?)。

这是我的 iptables-save 的副本

*nat
:PREROUTING ACCEPT [36:2286]
:INPUT ACCEPT [5:426]
:OUTPUT ACCEPT [25:1610]
:POSTROUTING ACCEPT [8:504]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A PREROUTING -i br0  -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A OUTPUT -p tcp -m tcp --dport 4050 -j DNAT --to-destination 192.168.3.54:61616
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

非常感谢您的帮助。

相关内容