我有两个 debian9.1-VM 运行在一台 KVM 主机上。
如果它们都在 VLAN1 上,我可以从一台 VM ssh 到另一台 VM。
如果它们都在另一个 VLAN 上,它们可以 ping 通但不能互相 ssh。
如果另一台 KVM 主机上的该 VLAN 中有第三台 VM,则该 VM 可以 ssh 到其他两台 VM,并且它们可以 ssh 到该 VM。
如果虚拟机在同一个虚拟机管理程序上运行,那么 ssh 无法正常工作的原因是什么?
我需要在 KVM 主机上进行哪些更改才能让其上的虚拟机相互连接 - 而无需将 KVM 主机也放在该 VLAN 中?
为了测试,我全新安装了 debian9.1。然后:
apt-get install vlan
modprobe 8021q
echo "8021q" >>/etc/modules
之后,我/etc/network/interfaces
在虚拟机上做了如下修改:
allow-hotplug ens3
#iface ens3 inet dhcp
auto ens3.23
iface ens3.23 inet static
address 192.168.23.11 # .12 / .21 on the other ones
netmask 255.255.255.0
vlan-raw-device ens3
现在虚拟机正在为 VLAN23 标记所有数据包。如果不同 KVM 主机上的虚拟机之间存在通信,我可以在我的交换机上看到这些标记。
结果是:(虚拟机 .11 和 .12 在 KVM1 上,虚拟机 .21 在 KVM2 上)
.11 <-> .12 ==> no connect
.11 <-> .21 ==> connect
.12 <-> .21 ==> connect
编辑:这不再重要了。我找到了一个解决方法。NIC
已打开virtio
。
将它们设置为后,rtl8139
一切正常...现在可以从一台虚拟机 ssh 到另一台虚拟机 - 即使它们在同一个虚拟机管理程序上运行。
答案1
切换到旧的模拟 NIC 并不能解决问题。
实际上,如果您的虚拟机位于不同的 VLAN 上,它们根本就无法通信,而它们确实可以通信是一个明显的错误。
话虽如此,标记虚拟机的正确方法不在虚拟机本身内部,而是通过在主机上创建标记接口、在这些标记接口之上创建网桥(因此您拥有类似标记的 v-switch 的东西)并将虚拟机插入这些标记的网桥中。