两个host上的qemu VM使用bridge互通

来源:互联网 发布:王健林 鲁豫 知乎 编辑:程序博客网 时间:2024/06/01 10:16

两个host上的qemu VM使用bridge互通

要使两个VM互通,必须使两个VM暴露在外部网络上,而不能仅仅在host内部。因此需要使用网桥。网桥是一个二层设备,和二层交换机是一个意思。
然而,在使用中,网桥总是和linux里面的端口并列,刚开始造成了不小的困惑。首当其冲的困惑是,作为一个二层交换机,是不需要IP地址的,然而网桥在使用时总是配置一个IP地址,更像一个普通的linux网卡。本文试图对这些问题做一个回答,让自己,也让和我同样困惑的人释怀。

配置网桥和qemu

  1. 在host上,增加一个网桥设备,假定host本来有一个物理网卡端口p2p2。
 # brctl addbr br0        #增加一个网桥 # brctl addif br0 p2p2   #将主机的p2p2物理端口连到网桥上 # ifconfig br0 up
  1. 启动qemu,并将网口连接到网桥上
#qemu-system-x86_64 -enable-kvm -smp 1 -drive if=virtio,file=/vmdisk/ubuntu14.04.img.qcow2,cache=none  -m 4G  -vnc :2  -net nic,macaddr=52:54:00:12:34:23 -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no

这里要注意的是,/etc/qemu-ifup脚本可能需要修改,参考https://tthtlc.wordpress.com/2015/10/21/qemu-how-to-setup-tuntap-bridge-networking/ , 增加switch=br0这一行

此时的网络结构如下:
这里写图片描述

此时在host能看到3个虚拟网络端口,

# ls /sys/devices/virtual/net/br0  lo  tap1

其中,tap1是给客户机提供网络的TAP设备,也就是在guest系统中看到eth0。
作为bridge模式,此时的guest系统和host系统,在网络上是平等的,而不是像上图那样guest包含在host内部。guest和host之间通过br0这个交换机互连。既然guest和host都连在br0这个交换机上,那么guest和host系统都需要有一个网口。在guest,就是eth0,即tap1。在host,这个口是谁呢,是p2p2吗?答案是否。p2p2虽然被加到了br0上,然而并不是用来将host连接到br0上,p2p2可以看成是br0的uplink端口,用于和外界进行互连。
这里br0其实有两个身份,一方面br0代表着一个虚拟交换机,另一方面,br0代表着host上的一个虚拟端口。也就是port-br0连接到了switch-br0上。如下图,
这里写图片描述

这是一个主机的情况。如果我们有另外一个主机,两个主机之间由物理的交换机连接,两个物理主机的p2p2口都连在同一个物理交换机上。
这里写图片描述

到这里VM1和VM2就可以互通了。互通前当然要配置各自的IP地址。

  1. 分别进入两个guest系统(此时需要用vnc登陆)
#service network-manager stop#ifconfig eth0 192.168.0.23 #或者在VM2中是24

现在来回答前面提出的问题,为什么要给br0配置IP地址。
目前为止,VM1和VM2配置了IP地址后,就可以互通了。然而,从各自的host系统是无法访问到VM guest系统的。因为此时大家只是在同一个二层网络里面,host想要访问guest,host的端口,即port-br0也需要有一个和guest相同网段的IP地址。配置方法就是给br0配置IP.

# ifconfig br0 192.168.0.231 #或者是241在host2中
0 0
原创粉丝点击