来自主机但不是来自命名空间的基于 Macvlan 的接口 ping

yad*_*taf 10 networking linux namespaces iproute2

[编辑]

生产系统目前是一个混合物理和基于 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
Run Code Online (Sandbox Code Playgroud)

mac命名空间上,在 VM 内部:

ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0
Run Code Online (Sandbox Code Playgroud)

所以我们基本上最终得到:(比如 Inception ?)

+------------------------+
| Host: 10.0.7.1         |
|                        |
| +--------------------+ |
| | VM: 10.0.7.101     | |
| |                    | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | |                | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

什么工作:

  • 平之间HostVM
  • 平之间NSNS
  • dhclient 来自 NS

什么不起作用:

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

我开始发疯的地方:

  • tcpdump on host(the real machine) 实际上显示了 ARP 请求和回复
  • tcpdump onNS显示发送到主机的 ARP 请求
  • tcpdump onVM使整个混乱工作(!)--> 在 VM 上启动 tcpdump 时,ping 开始得到答案?!?

所以,我敢打赌你很渴望它,我的问题是:如何让它发挥作用?我怀疑 NS 内 macvlan 上的 ARP 有问题,但无法弄清楚究竟是什么......

顺便说一句,我mac0直接在 VM(没有命名空间)上对接口进行了相同的实验,并且它完美地工作。

yad*_*taf 13

好的,所以,对于后代来说,tcpdump 使所有突然工作的事实应该让我走上正轨。它在内部所做的是切换eth0到混杂模式。也就是说,eth0会产生所有的网络流量,而不仅仅是与服务器主MAC

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

所以简单的解决方法是手动: ifconfig eth0 promisc

我希望它有帮助!