Docker容器无法使用macvlannetworking驱动程序访问或ping WAN

我正在尝试使用macvlan驱动程序configurationDockernetworking,但是我的容器无法到达网关或WAN。

networking设置如下:

 docker network create -d macvlan --subnet=10.1.1.0/24 --ip-range=10.1.1.160/28 --gateway=10.1.1.1 -o parent=ens160 pub_net 

主机操作系统是Ubuntu 16.04,它本身就是在ESXi上运行的虚拟机(我知道很多层)。 ens160接口连接到ESXi vSwitch(“LAN”)。 网关(10.1.1.1)是同一台机器上的pfSense VM,并连接到同一个“LAN”vSwitch。 pfSense VM也连接到物理连接到上游networking的“WAN”vSwitch。 Ubuntu主机操作系统具有IP和完整的WAN连接,但是Docker容器没有。

关于Ubuntu主机的一些细节:

 host$ ifconfig docker0 Link encap:Ethernet HWaddr aa:bb:cc:00:e2:77 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ens160 Link encap:Ethernet HWaddr aa:bb:cc:9b:be:f2 inet addr:10.1.1.22 Bcast:10.1.1.255 Mask:255.255.255.0 inet6 addr: fe80::c7b7:d64c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64642 errors:0 dropped:0 overruns:0 frame:0 TX packets:1881 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:19190911 (19.1 MB) TX bytes:169266 (169.2 KB) ens192 Link encap:Ethernet HWaddr aa:bb:cc:9b:be:fc inet addr:10.2.2.22 Bcast:10.2.2.255 Mask:255.255.255.0 inet6 addr: fe80::bb15:267d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:294 errors:0 dropped:10 overruns:0 frame:0 TX packets:515 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:57996 (57.9 KB) TX bytes:63258 (63.2 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2637 errors:0 dropped:0 overruns:0 frame:0 TX packets:2637 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:204727 (204.7 KB) TX bytes:204727 (204.7 KB) host$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.2.2.1 0.0.0.0 UG 100 0 0 ens192 0.0.0.0 10.1.1.1 0.0.0.0 UG 101 0 0 ens160 10.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160 10.2.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens192 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 

切换到Docker容器,并在这里的细节:

 host$ sudo docker run --net=pub_net -it alpine /bin/sh container$ ifconfig eth0 Link encap:Ethernet HWaddr AA:BB:CC:01:01:A0 inet addr:10.1.1.160 Bcast:0.0.0.0 Mask:255.255.255.0 inet6 addr: fe80::42:1a0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1789 (1.7 KiB) TX bytes:634 (634.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:224 (224.0 B) TX bytes:224 (224.0 B) container$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0 10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 

如上所述,如果我从容器内ping 10.1.1.1 (或任何其他外部IP),我没有得到任何回应。 如果我在另一个主机上ping另一个Docker容器,我得到一个响应。

我需要更改哪些容器以便容器可以到达WAN?

您需要打开混杂模式,并允许您的LAN vSwitch伪造的传输。 这是因为macvlan模式要求来宾侦听伪造的MAC地址以及能够伪造MAC地址。

VMware知识库文章混杂模式

有关伪造传输的VMware文档