[编辑]
生产系统目前是混合物理和基于 ESXi 的系统。我们显然永远不会使用 VirtualBox,即使是在预生产环境中!它在这里只是为了直接在我的桌面上快速缩小问题范围。
感谢您对元上的“暂停”的解释!
[/编辑]
我的设置:
- 私有网络
vboxnet1
10.0.7.0/24 - 1 台主机,Ubuntu 桌面
- 1 个虚拟机,Ubuntu 服务器 (VirtualBox)
寻址布局:
- 主机:10.0.7.1
- 虚拟机:10.0.7.101
- 虚拟机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 on
NS
显示发送到主机的 ARP 请求 - tcpdump on
VM
使整个混乱局面得以解决 (!) --> 当 tcpdump 在 VM 上启动时 ping 开始得到答案?!?
所以,我敢打赌你一定很渴望它,我的问题是:我该如何让它工作?我怀疑 NS 内部 macvlan 上的 ARP 有问题,但无法弄清楚到底是什么...
mac0
顺便说一句,我直接在 VM(无命名空间)上对界面进行了相同的实验,并且它运行完美。
答案1
好的,所以,为了后人着想,tcpdump 突然让一切正常工作这一事实应该让我走上了正轨。它在内部所做的是切换eth0
到混杂模式。也就是说,eth0
将产生所有网络流量,而不仅仅是服务器主MAC
然而,这正是它的macvlan
工作原理:它添加了一个“物理”(即 VM)网络适配器不知道的新的辅助虚拟 MAC 地址。
因此,简单的解决方法是手动:ifconfig eth0 promisc
我希望它有帮助!