我正在尝试理解 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 的范围内?
那么它会匹配什么地址? 这条规则的目的是什么?
谢谢!
最佳答案
此规则将匹配源自本地计算机的所有数据包(因为它在 OUTPUT
链中),目的地为本地托管的 IP 地址,该地址不以 127.X.X.X
。此类数据包将移交给 DOCKER
链进行进一步处理。
不以 127.X.X.X
开头的本地托管 IP 地址与为机器接口(interface)定义的每个 IP 地址匹配。这也包括动态定义的 IP 地址,例如通过 DHCP 分配的 IP 地址。
可以通过执行命令ip route show table local type local
提取机器本地托管的IP地址。
为了检查该规则实际匹配了哪些 IP 地址,可以在 DOCKER
链的开头添加一条日志记录规则,如下所示:
sudo iptables -t nat -I DOCKER -m limit --limit 2/min -j LOG --log-level 4 --log-prefix 'DOCKER CHAIN '
匹配的数据包将记录在文件/var/log/syslog
中。
关于Docker的NAT表输出链式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963362/