LXC、端口转发和 iptables

Rob*_*loi 9 iptables port-forwarding lxc

我有一个 LXC 容器 ( 10.0.3.2) 在主机上运行。服务正在容器内的端口上运行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 '^]'.
Run Code Online (Sandbox Code Playgroud)

我想让外部世界可以访问在容器内运行的服务。因此,我想7002将主机上的端口转发到7000容器上的端口:

iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)

结果是 ( iptables -t nat -L):

DNAT   tcp  --  anywhere     anywhere     tcp dpt:afs3-prserver to:10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)

尽管如此,我仍无法使用转发端口从主机访问该服务:

$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)

我觉得我在这里错过了一些愚蠢的东西。我应该检查哪些事项?调试这些情况的好策略是什么?

为了完整起见,这里是如何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
Run Code Online (Sandbox Code Playgroud)

小智 3

似乎您已阻止 10.0.3.1 上的 7002 端口,因为您的默认策略是 DROP

尝试将其添加到 INPUT 规则中:

iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)