如何在KVM下实现类似Virtualbox的桥接?

我需要将一些虚拟机从Virtualboxtesting系统迁移到KVM生产主机。 主机是两个完全相同的硬件和软件系统的副本(64位Ubuntu Server v16.04,重要的是什么)。

这一切都不是太复杂,而是networking的一部分。

对于virtualbox的guest虚拟机,我有一个虚拟以太网适配器接到其中一个主机绑定设备。 访客可以从主机所连接的networking和主机本身轻松访问。 这样,客人就像“只是networking上的另一台服务器”。 在行动期间,除了virbr0桥,我什么都看不到。

AFAIU,这个简单的设置不能在KVM下复制。 如果我使用桥接,那么我不能从客户到主机进行通信。 build议的解决scheme是为客户添加第二个接口用于此类用途。

这是我唯一的select吗?

那么,如果有任何技术细节可用,我想知道Virtualbox如何做KVM不能做的事情。

你所描述的是一个绝对标准的KVM桥接configuration,logging在你所关心的任何地方。 这个想法是在一个网桥下的主机上绑定(网桥可以保存主机的IPconfiguration,而不是绑定),虚拟机将能够像使用vbox一样使用网桥。

一旦你在主机上有一个网桥,virt-manager将允许你select一个共享的networking设备来连接(例如新的网桥),或者你可以简单的更新客户端的domxml使用网桥,而不是默认的NATnetworking

这并不像预期那么容易。 @dyasny的一般暗示是真的:确实是可行的。 这里的主要目标是:

  1. 不要使用第三方工具(如virshvirtinstlibvirt )来学习和理解。

  2. 以普通pipe理员非特权用户身份运行虚拟机。

这是我做的。

  1. 通过注释掉以太网主线,禁用/etc/network/interfaces的主要主机接口。

  2. 在同一个文件中创build一个包含该接口的网桥。 原来的界面将失去将去桥梁的IP。 configuration文件如下所示:

 auto eth0 # no iface and IP stuff auto br0 iface br0 inet static bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0 address 192.168.255.253/24 gateway 192.168.255.254 
  1. 为QEMU创build一个ACL,以允许到/etc/quemu/bridge.conf的网桥/etc/quemu/bridge.conf ,所有权为root:kvm end permissions 0640 。 目录/etc/quemu/需要为root:kvm0770
 sudo mkdir -v /etc/qemu # 'br0' is the same name as used in the previous step echo allow br0 | sudo tee -a /etc/quemu/bridge.conf > /dev/null sudo chown -R -vc root:kvm /etc/qemu sudo chmod -vc 0770 /etc/qemu sudo chmod -vc 0640 /etc/qemu/* 
  1. 修复桥助手脚本。 如果仅在root下有效,那么这是默认安装。
 sudo chmod -vc u+s /usr/lib/qemu/qemu-bridge-helper 
  1. 将您的非特权用户添加到组kvm 。 您将需要注销并login(或打开一个新的会话)才能生效。
 sudo usermod -a -G kvm `id -un` 
  1. 重新启动networking。
 sudo service networking restart 
  1. 现在,当你通过命令行启动虚拟机时,你可以使用这样的参数列表:
 ... \ -netdev bridge,id=net0,br=br0 

其中net0是枚举的networking设备(本例中是第一个), br0是前面定义的网桥接口的名称。 所以,举个例子,一个完整的命令行可以是这样的:

 kvm -cpu host -machine q35 -boot order=dc -vga virtio -vnc 127.255.255.1:0 -name qemutest,process=qemutest -uuid 901f83ce-b999-459b-b1b6-a9ba94cac382 -smp cpus=4 -m size=8192 -cdrom /home/user/image.iso -drive file=/home/user/Desktop/QEMU/qemutest/qemutest-D0.qcow2,if=virtio -device virtio-net-pci,mac=02:19:3e:39:a5:de,netdev=net0 -netdev bridge,id=net0,br=br0 

你可以使用iptables来使用你的公共IP访问内部客户IP,然后使用内部IP从KVM主机连接到客户