Networking 为什么docker容器在我关闭iptables时仍然可以与外部通信

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

我是docker新手,对docker容器的网络有一些基本问题。为了获得帮助,我阅读了关于docker网络配置的文章:

有一部分介绍了如何使用iptables使docker容器与外部通信,实际上我可以理解这一部分:

1从容器到外部,postrouting链上有一个伪装规则,与SNAT相同

    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