Networking 为什么docker容器在我关闭iptables时仍然可以与外部通信
我是docker新手,对docker容器的网络有一些基本问题。为了获得帮助,我阅读了关于docker网络配置的文章: 有一部分介绍了如何使用iptables使docker容器与外部通信,实际上我可以理解这一部分: 1从容器到外部,postrouting链上有一个伪装规则,与SNAT相同Networking 为什么docker容器在我关闭iptables时仍然可以与外部通信,networking,docker,Networking,Docker,我是docker新手,对docker容器的网络有一些基本问题。为了获得帮助,我阅读了关于docker网络配置的文章: 有一部分介绍了如何使用iptables使docker容器与外部通信,实际上我可以理解这一部分: 1从容器到外部,postrouting链上有一个伪装规则,与SNAT相同 Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUER
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
2从外部访问容器内部的服务,在预路由链中有一个DNAT规则,然后主机将其转发给docker0,容器将最终接收数据包
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49153 to:172.17.0.2:80
但实际上,当我停止iptables服务时,docker的网络仍然可以正常工作,我使用“iptables-L”和“iptables-t nat-L”进行检查,内核中没有规则,下面是我的设置(假设10.170.28.0/24是外部网络,172.17.0.0/16是docker容器的内部网络):
首先,iptables服务被关闭,fiter和nat表为空,如下所示:
iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
以下是主机中的路由表(主机ip为10.170.28.8):
上表中确实有规则将目的地为172.17.0.0/16的数据包转发到桥接docker0,但在此之前,谁做过DNAT将10.170.28.8转换为172.17.0.2(容器IP)?那么,从集装箱(172.17.0.0/16)到外部(10.170.28.0/24)的交通如何在没有障碍或伪装的情况下工作 首先,“停止”iptables是不可能的,它只是重置规则。正如您的帖子所示,*filterINPUT链的策略是ALLOW Docker默认运行TCP转发代理,捕获转发端口的所有流量(通过
ss-lnp | grep 49153验证)
在我的机器上进行的测试表明,无法进行出站连接:
启动容器
“停止”iptables
执行董事
平1.1。。。没有回应
省略2时,ping按预期工作
$ docker --version
Docker version 18.09.2-ce, build 62479626f2
进一步详情:
$ docker --version
Docker version 18.09.2-ce, build 62479626f2