我需要将一些虚拟机从 Virtualbox 测试系统移动到 KVM 生产主机。主机是相同硬件和软件系统的两个副本(重要的是 64 位 Ubuntu Server v16.04)。
这一切都不是太复杂,但网络部分。
对于 virtualbox 的来宾,我有一个 virtio 以太网适配器桥接到其中一个主机绑定设备。从主机连接到的网络和主机本身都可以轻松访问来宾。这样,来宾就像“网络上的另一台服务器”。在操作过程中,除了 virbr0 桥,我什么都看不到。
AFAIU,这个简单的设置无法在 KVM 下复制。如果我使用桥接,那么我无法从客人与主人交流。建议的解决方案是为来宾添加第二个接口以用于此类用途。
这是我唯一的选择吗?
然后,如果有任何技术细节可用,我想知道Virtualbox如何做KVM不能做的事情。
您所描述的是一个绝对标准的 KVM 桥接配置,几乎记录在您想要查看的任何地方。这个想法是在网桥下的主机上建立绑定(网桥保存主机的 IP 配置,而不是绑定),VM 将能够像您在 vbox 中使用的一样使用网桥。
一旦主机上有可用的网桥,virt-manager 将允许您选择要连接的共享网络设备(例如新网桥),或者您可以简单地更新 domxml 让访客使用网桥而不是默认的NAT网络
这并不像预期的那么容易。@dyasny 的一般提示是正确的:确实是可行的。这里的主要目标是:
请勿使用 3rd 方工具(如
virsh
、virtinst
或libvirt
)来学习和理解。以普通管理非特权用户的身份运行虚拟机而不是 root。
这就是我的做法。
/etc/network/interfaces
通过注释掉主以太网的行来禁用主主机接口。在同一文件中创建一个包含该接口的网桥。原始接口将丢失将去桥接的 IP。配置文件如下所示:
/etc/quemu/bridge.conf
,所有权root:kvm
结束权限0640
。目录/etc/quemu/
必须是root:kvm
and0770
:root
.kvm
。您需要注销并登录(或打开一个新会话)才能使其生效。其中
net0
是枚举的网络设备(在这种情况下是第一个),并且br0
是前面定义的网桥接口的名称。因此,例如,一个完整的命令行示例可以是这个:我也花了几天的时间来回答,仍然没有完全理解所以无法解释技术细节,但似乎virtualbox(主机桥)的方式与macvtap相比没有良好的性能。
一个证据:
http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
您可以使用 iptables 将内部访客 IP 与您的公共 IP 连接,然后使用内部 IP 从 KVM 主机连接到访客