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

时间:2017-02-26 06:37:31

标签: docker

我正在尝试使用r.then(data => { console.log('got it:' + data); this.attributes['account_id'] = data; this.emit('welcome'); }) 驱动程序配置Docker网络,但我的容器无法访问网关或WAN。

网络设置如下:

macvlan

主机操作系统是Ubuntu 16.04,它本身就是在ESXi上运行的VM(我知道很多层)。 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 接口连接到ESXi vSwitch(“LAN”)。网关(10.1.1.1)是同一台机器上的pfSense VM,并连接到相同的“LAN”vSwitch。 pfSense VM还连接到物理连接到上游网络的“WAN”vSwitch。 Ubuntu主机操作系统具有IP和完整的WAN连接,但Docker容器没有。

有关Ubuntu主机的一些细节:

ens160

切换到Docker容器,并详细说明:

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

如上所述,如果我在容器中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 (或任何其他外部IP),我得不到任何回复。如果我在同一主机上ping另一个Docker容器,我会收到响应。

我需要更改哪些容器才能到达WAN?

1 个答案:

答案 0 :(得分:3)

您需要打开混杂模式并允许LAN vSwitch进行伪造传输。这是因为macvlan模式要求guest虚拟机监听伪造的MAC地址,并且能够伪造MAC地址。

VMware Knowledge Base article on promiscuous mode

VMware documentation on forged transmits