虚拟客户端在使用主机IP时不会NAT

我正在使用lxc来承载一些服务。 我希望把这些服务之一暴露给外部世界。

我已经在我的主机上使用iptables设置了三个NAT规则,一个是eth0,一个是br0(容器/客户端的网桥),另一个是来自主机本身stream量的OUTPUT规则。

有了这些规则,我可以使用主机IP(10.234.13.185)与我select的端口(4050)到达客人/容器(192.168.3.54:61616)。 这从外界,主机和其他客人的作品。

但是,我不能从服务的客人(192.168.3.54)得到它的工作。

我注意到,stream量进入端口4050的主机,正常情况下在端口61616客人结束。但是,如果来自客人stream量仍然命中主机端口4050,但不会路由到61616,但坚持4050代替。

我做了一个ngrep和我看到的其他客户端(使用telnet):

  • $ host:ngrep -p 4050:10.234.13.185:4050 – > $ client_ip [AR]
  • $ host:ngrep -p 61616:$ client_ip – > 192.168.3.54 [S] * 2,192.168.3.54:61616 – > $ client_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保存的副本

*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 

任何帮助不胜感激。