在docker中,这些POSTROUTING iptables规则有什么用?

在docker中,这些POSTROUTING iptables规则有什么用?

Docker 为每个具有暴露端口的容器创建一个 MASQUERADE 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>

如果我理解正确的话,这意味着当我们有一个源和目标相等且发往 docker 容器的数据包时,MASQUERADE 目标应该适用。但这什么时候会发生?

答案1

尽管这个帖子比较老了,但是这个问题现在已经得到解答:
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 MASQUERADE

相关内容