基于 Macvlan 的接口可从主机 ping,但不能从命名空间 ping

基于 Macvlan 的接口可从主机 ping,但不能从命名空间 ping

[编辑]

生产系统目前是混合物理和基于 ESXi 的系统。我们显然永远不会使用 VirtualBox,即使是在预生产环境中!它在这里只是为了直接在我的桌面上快速缩小问题范围。

感谢您对元上的“暂停”的解释!

[/编辑]

我的设置:

  1. 私有网络vboxnet110.0.7.0/24
  2. 1 台主机,Ubuntu 桌面
  3. 1 个虚拟机,Ubuntu 服务器 (VirtualBox)

寻址布局:

  1. 主机:10.0.7.1
  2. 虚拟机:10.0.7.101
  3. 虚拟机MAC 命名空间:10.0.7.102

在 上VM,我运行了以下命令:

ip netns add mac                        # create a new nmespace
ip link add link eth0 mac0 type macvlan # create a new macvlan interface
ip link set mac0 netns mac

mac命名空间中,在虚拟机内部:

ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0

所以我们最终得到的结果是:(像《盗梦空间》一样?)

+------------------------+
| Host: 10.0.7.1         |
|                        |
| +--------------------+ |
| | VM: 10.0.7.101     | |
| |                    | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | |                | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+

有效的方法:

  • Host和之间的 PingVM
  • NS和之间的 PingNS
  • dhclient 来自NS

无效的方法:

  • NS和之间的 pingVM
  • NS和之间的 pingHost

我开始发疯的地方:

  • tcpdump 在host(真实机器)上实际上显示 ARP 请求和回复
  • tcpdump onNS显示发送到主机的 ARP 请求
  • tcpdump onVM使整个混乱局面得以解决 (!) --> 当 tcpdump 在 VM 上启动时 ping 开始得到答案?!?

所以,我敢打赌你一定很渴望它,我的问题是:我该如何让它工作?我怀疑 NS 内部 macvlan 上的 ARP 有问题,但无法弄清楚到底是什么...

mac0顺便说一句,我直接在 VM(无命名空间)上对界面进行了相同的实验,并且它运行完美。

答案1

好的,所以,为了后人着想,tcpdump 突然让一切正常工作这一事实应该让我走上了正轨。它在内部所做的是切换eth0到混杂模式。也就是说,eth0将产生所有网络流量,而不仅仅是服务器主MAC

然而,这正是它的macvlan工作原理:它添加了一个“物理”(即 VM)网络适配器不知道的新的辅助虚拟 MAC 地址。

因此,简单的解决方法是手动:ifconfig eth0 promisc

我希望它有帮助!

相关内容