QEMU網絡模式(一)——bridge


網絡配置

QEMU支持的網絡模式

qemu-kvm主要向客戶機提供了4種不同模式的網絡。
  1)基於網橋(bridge)的虛擬網卡;
  2)基於NAT的虛擬網絡
  3)QEMU內置的用戶模式網絡(user mode networking)
  4)直接分配網絡設備的網絡(包括VT-d和SR-IOV)

一、使用網橋模式
在qemu-kvm命令行中,關於bridge模式的網絡參數如下:
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]

1) 安裝bridge-utils和tunctl軟件包

# yum -y install bridge-utils tunctl

2) 查看tun模塊是否被加載

# lsmod | grep tun

如果沒有加載,則運行modprobe tun進行加載。如果已經將tun編譯到內核(可查看內核config文件中是否有"CONFIG=y"選項),則不需要加載了。如果內核完全沒有配置TUN模塊,則需要重新編譯內核才行。

# grep 'CONFIG_TUN' /boot/config-`uname -r`

3) 檢查/dev/net/tun的權限,需要讓當前用戶擁有讀寫的權限。

# ls -lh /dev/net/tun

4) 建立一個bridge,將其綁定到一個可正常工作的網絡接口上,同時讓bridge成為連接本機與外部網絡的接口。

# brctl addr br0
# brctl addif br0 eth0
# brctl stp br0 on
# route
# ping 192.168.1.254

或者編輯配置文件建立網橋

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
[root@kvm ~]# 
# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.100.10"
NETMASK="255.255.255.0"
STP="on"
DELAY="0"

# service network restart
# dmesg
…………
device virbr0-nic entered promiscuous mode
br0: port 1(eth0) entering forwarding state 
…………

建立bridge后的狀態是讓網絡接口eth0進入混雜模式(promiscuous mode,接收網絡中所有數據包),網橋br0進入轉發狀態(forwarding state),並且與eth0具有相同的MAC地址,

5)准備qemu-ifup和qemu-ifdown腳本

客戶機啟動網絡前會執行的腳本由"script"選項配置的(默認為/etc/qemu-ifup)。一般在該腳本上創建一個TAP設備並將其中與bridge綁定起來。

#!/bin/bash
#filename: /etc/qemu-ifup
switch=br0

if [ -n "$1" ];then
#tunctl -u $(whoami) -t $1 #一些較舊版本中不會自動創建TAP設備
ifconfig $1 up
sleep 0.5s
brctl addif $switch $1
exit 0
else
echo 'Error: no specifed interface.'
exit 1
fi

由於qemu-kvm工具在客戶機關閉時會解除TAP設備的bridge綁定,也會自動刪除已不再使用的TAP設備,所有qemu-ifdown這個腳本不是必需的,最好設置為downscript=no(qemu-kvm的script參數是虛擬機啟動時執行的腳本,downscript參數是虛擬機關閉時執行的參數)

# cat /etc/qemu-ifdown 
#!/bin/bash

switch=br0

if [ -n $1 ];then
tunctl -d $1
brctl delif ${switch} $1
ip link set $1 down
exit 0
else
echo "Error: no interface specified"
exit 1
fi

6)創建一個虛擬機

創建一個稀梳格式的磁盤

# dd if=/dev/zero of=/root/centos6.img bs=1M oflag=direct seek=4095 count=1

使用鏡像安裝一個centos6的minimal系統

# qemu-kvm -m 768 \
-smp 2 \
--boot order=cd \
--hda /root/centos6.img \
--cdrom /root/CentOS-6.9-x86_64-minimal.iso

 

7)用qemu-kvm命令啟動bridge模式的網絡
在宿主機中,用命令行啟動客戶機並檢查bridge的狀態,如下:

# qemu-kvm /root/centos6.img \
-smp 2 \
-m 1024 \
-net nic \
-net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no \
-vnc :0 \
-daemonize

虛擬機啟動后,使用下面命令可以看到TAP0被創建了

# brctl show
# ls /sys/devices/virtual/net/
# vcnview :0

關閉虛擬機后,使用下面可以看到TAP0被刪除了

# brctl show
# ls /sys/devices/virtual/net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM