我正在使用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):
但是,当我重复,但从客人本身telnet我看到:
我假定一个失踪的规则(可能是源的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
任何帮助不胜感激。