我有一个10.0.3.2
在主机上运行的LXC容器()。服务正在端口port上的容器内部运行7000
。
从主机(10.0.3.1
,lxcbr0
),我能达到的服务:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
我很想让外部容器可以访问在容器内运行的服务。因此,我想7002
将主机上的端口转发到7000
容器上的端口:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
结果为(iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
尽管如此,我仍无法使用转发的端口从主机访问服务:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
我觉得我在这里想念一些愚蠢的东西。我应该检查什么?调试这些情况的好策略是什么?
为了完整起见,这是iptables
在主机上设置的方式:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
ACCEPT
FORWARD
连锁店。还要检查是否启用了IP转发:cat /proc/sys/net/ipv4/ip_forward
。
ip_forward
设置为1
FORWARD
政策也是ACCEPT
INPUT
链条了吗?也许有政策REJECT
。