容器访问外部世界
docker host 是可以访问外网的。
容器也能访问外网
为什么容器能够访问到外网呢?我们先来查看iptables的规则
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
其含义是:来自 172.17.0.0/16 网段的包,目标地址是外网(! -o docker0),就把它交给 MASQUERADE 处理。而 MASQUERADE 的处理方式是将包的源地址替换成 host 的地址发送出去,即做了一次网络地址转换(NAT)。
下面我们通过 tcpdump 查看地址是如何转换的。先查看 docker host 的路由表:
默认路由通过 enp0s3 发出去,所以我们要同时监控 enp0s3 和 docker0 上的 icmp(ping)数据包。
当 busybox ping