Docker为每个有公开端口的容器创建了一个伪装iptables规则(在本例中,我有5个容器具有暴露端口3500):
sudo iptables -t nat -L -v -n
<snip>
Chain POSTROUTING (policy ACCEPT 42 packets, 2650 bytes)
pkts bytes target prot opt in out source destination
<snip>
0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:3500
0 0 MASQUERADE tcp -- * * 172.17.0.3 172.17.0.3 tcp dpt:3500
0 0 MASQUERADE tcp -- * * 172.17.0.4 172.17.0.4 tcp dpt:3500
0 0 MASQUERADE tcp -- * * 172.17.0.5 172.17.0.5 tcp dpt:3500
0 0 MASQUERADE tcp -- * * 172.17.0.7 172.17.0.7 tcp dpt:3500
<snip>如果我正确地理解了一些事情,这意味着当我们有一个源和目的地相等的包并且目的地是码头容器时,应该应用伪装目标。但这会在什么时候发生呢?
发布于 2021-01-29 23:53:26
虽然这条线比较旧,但这个问题现在已经在这里得到了回答:
https://stackoverflow.com/questions/46802089/cant-understand-docker-iptables-rule
简而言之,这应该适用于边缘情况,在大多数情况下,您感兴趣的是以下规则:
-A POSTROUTING -s <Docker subnet> ! -o <Docker interface> -j MASQUERADE例如:
-A POSTROUTING -s 172.17.0.0/24 ! -o br-a9173b54dfbd -j MASQUERADEhttps://serverfault.com/questions/797423
复制相似问题