兩個host上的qemu VM使用bridge互通

兩個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中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章