Docker的NAT表输出链规则

时间:2014-11-16 23:31:22

标签: docker iptables 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

...

所以这条规则试图匹配目标地址类型“LOCAL”而不是127.0.0.0/8范围内?

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

谢谢!

1 个答案:

答案 0 :(得分:9)

此规则将匹配源自本地计算机的所有数据包(因为它位于OUTPUT链中),发往本地托管的IP地址,该地址不以{{1}开头}。这些数据包将被移交给127.X.X.X链进行进一步处理。

不以DOCKER开头的本地托管IP地址与定义到机器接口的每个IP地址相匹配。这包括动态定义的IP地址,例如通过DHCP分配的IP地址。

可以通过执行命令127.X.X.X来提取计算机的本地托管IP地址。


为了检查此规则实际匹配的IP地址,可以将日志记录规则添加到ip route show table local type local链的开头,如下所示:

DOCKER

匹配的数据包将记录在文件sudo iptables -t nat -I DOCKER -m limit --limit 2/min -j LOG --log-level 4 --log-prefix 'DOCKER CHAIN ' 中。