我在主机上运行服务 A,并绑定到端口 127.0.0.1:7800。
我的 LXC 容器内运行着服务 B,它想要通过 127.0.0.1:7800 连接到服务 A,但目前无法连接。
如何设置容器或 iptables 来转发流量?
答案1
在容器端,您应该添加以下规则:
iptables -t nat -A OUTPUT \
-d 127.0.0.1 \
-p tcp --dport 7800 \
-j DNAT --to-address <HOST.EXT.IP>
iptables -t nat -A POSTROUTING \
-o <LXC.HOST.IFACE> \
-d <HOST.EXT.IP> -s 127.0.0.1 \
-p tcp --dport 7800 \
-j MASQUERADE
它还需要启用net.ipv4.conf.all.route_localnet
sysctl 选项。
因为主机应用程序只监听127.0.0.1
地址,这意味着它默认无法接受外部连接。但您可以使用DNAT/REDIRECT
目标作为解决方法。
iptables -t nat -A PREROUTING \
-i <HOST.LXC.IFACE> \
-d <HOST.LXC.IP> -s <LXC.IP> \
-p tcp --dport 7800 \
-j DNAT --to-address 127.0.0.1:7800
它还需要启用route_localnet
选项。
使用iptables-save -c
(检查规则计数器)和tcpdump
进行故障排除。