VirtualBox、VLAN、CentOS 7:客户机和主机无法通信

VirtualBox、VLAN、CentOS 7:客户机和主机无法通信

我在所有机器上都使用 CentOS 7(除了下面提到的 Mac)。主机有 VirtualBox 5.1.8。网络是 192.168.10.0/24。任何地方都没有防火墙。

在这种情况下,一切都按预期进行:

没有任何标记,主机和客户机可以通过任何端口、任何 IP 进行通信。每个客户机上的网络接口都是桥接的。这里的生活很美好。

此方案失败:

我在主机和每个客户机上创建了 VLAN 接口。我们将其称为 eth0.10。每个客户机继续使用 eth0(因为使用 eth0.10 会有效地将其从网络中移除)。每个客户机上的网络接口都是桥接的。

注意:当我在这里提到 ping 时,我意识到那只是 ICMP,但我的测试还包括 TCP 测试。为简洁起见,使用 ping。

我现在可以 ping 客户机 (192.168.10.5) 到客户机 (192.168.10.10),但无法 ping 客户机 (.10.5) 到主机 (.10.50)。主机 (.10.50) 到客户机 (.10.5 或 .10.10) 也行不通。

当我将客户机 (.10.5 或 .10.10) ping 到其他物理系统(Mac/OS X,也在 VLAN10 (.10.200) 中)时,我得到了响应。当我将主机 (.10.5) ping 到 Mac (.10.200) 时,我得到了响应。反之亦然。

我还在 Mac (.10.200) 上运行了 Wireshark(数据包嗅探器)。我使用了过滤器“vlan host 192.168.10.5”,我可以在数据包中看到 vlan id 10!vlan 10 中的每个主机都是如此。

因此,除了主人之外,所有人都可以看到客人。客人都可以看到彼此,也可以看到其他人,但看不到主人。很疯狂吧?

我读过一些关于打开 Vswitch但我不知道这是否是我需要的。似乎我忽略了一些基本的东西,但我现在已从很多角度检查了这项工作。

任何建议将不胜感激!

答案1

我能够复制您的确切场景。
这是我的测试环境

 +---------------------------------------------------------+                                +-----------------------------------------+
 |                                                         |                                |                                         |
 |                    Mac OS X El Capitan                  |                                |          Mikrotik router board          |
 |      Host is also setup with vlan0 VLAN ID 20           |                                |                                         |
 |      192.168.10.3                                       |                                |                                         |
 |                                                         |                                |                                         |
 |             Both VMs are bridged to en0                 |en0         Trunk               |  VLAN 20 192.168.10.250                 |
 |            +-----------------------------------------------------------------------------+  VLAN 30 192.168.30.250                 |
 |            |                            |               |            VLANs 20 and 30     |                                         |
 |   +------------------+         +-------------------+    |                                |                                         |
 |   |                  |         |                   |    |                                |                                         |
 |   |    Cent OS 7     |         |    Cent OS 7      |    |                                |                                         |
 |   |    Node 1        |         |    Node 2         |    |                                |                                         |
 |   |                  |         |                   |    |                                |                                         |
 |   |  192.168.10.2    |         |    192.168.10.4   |    |                                +-----------------------------------------+
 |   +------------------+         +-------------------+    |
 |      VLAN 20                          VLAN 20           |
 +---------------------------------------------------------+

完全相同的事情发生了。
当两个虚拟机都桥接到 en0 时:

  1. 它们可以互相 ping 通。192.168.10.2 < -- > 192.168.10.4
  2. 他们可以 ping 离开 Mikrotik 的 VLAN 20 Int 192.168.10.250,因此他们具有外部世界连接。
  3. Mac 主机也设置了 vlan0 VLAN ID 20 192.168.10.3 可以 ping Mikrotik
  4. 虚拟机无法 ping 通主机,主机也无法 ping 通虚拟机。

当将虚拟机桥接到 vlan0 而不是 en0 时 - 它们会失去与外界的连接(无法 ping mikrotik)

因此,这种情况确实与使用 macvtap 在 KVM 中完成桥接的方式非常相似。使用 macvtap 时,虚拟机无法与主机通信,因此这里解释了这个问题https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/App_Macvtap.html

这种情况实际上并不是错误 — 这是 macvtap 的定义行为。由于主机的物理以太网连接到 macvtap 网桥的方式,从客户机转发到物理接口的进入该网桥的流量无法反弹回主机的 IP 堆栈。此外,从主机的 IP 堆栈发送到物理接口的流量无法反弹回 macvtap 网桥以转发给客户机。

看来桥接 VLAN 也采用了同样的机制。我不确定,只是猜测。

编辑:我从 rackspace 找到了这个博客,它准确地解释了这个问题http://blog.rackspace.com/vms-vlans-and-bridges-oh-my-part-2

相关内容