Iptables

LXC:將容器的本地主機流量轉發到主機的本地主機

  • May 30, 2019

我在主機上執行服務 A 並綁定到埠 127.0.0.1:7800。

我有服務 B 在我的 LXC 容器中執行,它想通過 127.0.0.1:7800 連接到服務 A,但目前不能。

如何設置容器或 iptables 來轉發流量?

在容器方面,您應該添加以下規則:

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_localnetsysctl 選項。

因為在主機應用程序上只監聽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進行故障排除。

引用自:https://serverfault.com/questions/968705