Docker网络container模式是指,创建新容器的时候,通过--net container参数,指定其和已经存在的某个容器共享一个 Network Namespace。如下图所示,右方黄色新创建的container,其网卡共享左边容器。因此就不会拥有自己独立的 IP,而是共享左边容器的 IP 172.17.0.2,端口范围等网络资源,两个容器的进程通过 lo 网卡设备通信。
➜ traceroute docker images REPOSITORY TAG IMAGE ID CREATED SIZE tcpdump latest d5d8942d4836 3 minutes ago 109MB traceroute latest bbf499e59136 35 minutes ago 77.4MB ubuntu latest 9873176a8ff5 11 days ago 72.7MB
启动traceroute容器:
1 2
➜ docker run -it --name traceroute traceroute root@fbe3eb98ae63:/#
启动tcpdump容器,进行抓包:
1 2
➜ ~ docker run -it --net=container:traceroute tcpdump tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
在traceroute容器发起traceroute:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
root@fbe3eb98ae63:/# traceroute -A -q 1 -N 1 -z 500 -e 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 localhost (172.17.0.1) [*] 0.129 ms 2 localhost (10.39.101.1) [*] 3.716 ms 3 localhost (192.168.1.1) [*] 3.926 ms 4 222.129.32.1 (222.129.32.1) [AS4808] 6.837 ms 5 61.148.163.181 (61.148.163.181) [AS4808] 9.247 ms 6 219.232.11.65 (219.232.11.65) [AS17431] 7.049 ms 7 61.149.203.205 (61.149.203.205) [AS4808] 7.650 ms 8 219.158.7.22 (219.158.7.22) [AS4837] 40.815 ms 9 219.158.103.218 (219.158.103.218) [AS4837] 64.771 ms 10 219.158.103.30 (219.158.103.30) [AS4837] 50.402 ms 11 219.158.10.30 (219.158.10.30) [AS4837] 53.261 ms 12 219.158.33.174 (219.158.33.174) [AS4837] 55.503 ms 13 108.170.241.65 (108.170.241.65) [AS15169] 54.876 ms 14 142.251.64.173 (142.251.64.173) [AS15169] 45.966 ms 15 dns.google (8.8.8.8) [AS15169] 52.492 ms
traceroute -A -q 1 -N 1 -z 500 -e 8.8.8.8 参数解释如下:
-A: 向radb.net查找对应节点IP所在的AS Path信息,并将查询信息输出
-q 1: 将缺省发送3个探测包改为1个
-N 1: 将并发16个探测改为一次一个,以便于逐个分析
-z 500: 表示每次等待500毫秒再发出下一个探测
-e: 显示ICMP的扩展消息,如果有的话
按下CTRL+C,停止tcpdump容器的抓包:
1 2 3 4 5
➜ ~ docker run -it --net=container:traceroute tcpdump tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C237 packets captured 237 packets received by filter 0 packets dropped by kernel