Docker的NAT表输出链规则

我想了解iptables中的规则之一:

$ sudo iptables -t nat --list -v ... Chain OUTPUT (policy ACCEPT 618 packets, 31267 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER all -- any any anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL ... 

所以这条规则试图匹配目的地址types“本地”,而不是在127.0.0.0/8的范围内?

那么它会匹配什么地址? 这个规则的目的是什么?

谢谢!

这个规则将匹配源于本地计算机的所有数据包(因为它在OUTPUT链中),目的地是本地托pipeIP地址,该地址不以127.XXX开始。 这些数据包被交给DOCKER链进行进一步处理。

不以127.XXX开始的本地托pipeIP地址与机器接口上定义的每个IP地址相匹配。 这也包括dynamic定义的IP地址,例如通过DHCP分配的IP地址。

通过执行命令ip route show table local type local可以提取本机托pipe的IP地址。


为了检查这个规则实际匹配哪些IP地址,可以在DOCKER链的开头添加一条logging规则,如下所示:

 sudo iptables -t nat -I DOCKER -m limit --limit 2/min -j LOG --log-level 4 --log-prefix 'DOCKER CHAIN ' 

匹配的数据包将被logging在/var/log/syslog