使用网桥模式(bridge networking mode)配置KVM-QUME虚拟机网络
(1)linux要工作在网桥模式,所以必须安装两个RPM包,即:bridge-utils和tunctl,它们提供所需的brctl、tunctl命令行工具。可以使用yum在线安装:
[root@server3 ~]# yum install bridge-utils
(2)查看tun模块是否加载,如下:
[root@server3 ~]# lsmod | grep tun tun 16577 2 vhost_net
如果tun模块没有加载,则运行“modprobe tun”命令来加载即可;当然,如果已经将tun编译到内核(可查看内核config文件中是否有“CONFIG_TUN=y”选项),则不需要加载了;而如果内核完全没有配置TUN模块,则需要重新编译内核才行了。
(3)检查/dev/net/tun的权限,需要让当前用户拥有可读可写的权限。
[root@server3 ~]# ll /dev/net/tun crw-rw-rw- . 1 root root 10, 200 4月 23 10:35 /dev/net/tun
(4)建立一个bridge,并将其绑定到一个可以正常工作的网络接口上,并让bridge成为连接本机与外部网络的接口。
创建一个bridge可以直接在命令行中操作,也可以通过写配置文件来实现,这里是通过写配置文件来实现的。在/etc/sysconfig/network-scripts目录下,创建一个ifcfg-br0 文件,其类型设为Bridge:
[root@Server3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=bridge
BOOTRPOTO=none
IPADDR=192.168.1.66
NETMASK=255.255.255.0
ONBOOT=yes
然后将物理接口桥接到桥接器
修改ifcfg-eth0,只需在最后加上“BRIDGE=br0”,将其桥接到br0
[root@Server3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.30
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:15:17:9D:09:FE
BRIDGE=br0
重启物理机网络服务
[root@Server3 ~]# service network restart
查看当前桥接情况
[root@Server3 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0015179d0e90 no eth0 virbr0 8000.525400ee6f70 yes virbr0-nic
(5)开始配置虚拟机网络参数
在qemu-kvm的命令行中,关于bridge模式的网络参数如下:
-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
该配置表示连接宿主机的TAP网络接口到n号VLAN中,并使用file和dfile两个脚本在启动客户机时配置网络和在关闭客户机时取消网络配置。tap参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备(ISO七层网络结构的第二层),它像以太网的数据帧一样处理第二层数据报。而TUN 与TAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP被用于创建一个网络桥,而TUN与路由相关。
vlan=n 设置该设备VLAN编号,默认值为0。
name=name 设置名称,在QEMU monior中可能用到,一般由系统自动分配即可。
fd=h 连接到现在已经打开着的TAP接口的文件描述符,一般来说不要设置该选项,而是让QEMU会自动创建一个TAP接口。当使用了fd=h的选项后,ifname、script、downscript、helper、vnet_hdr等选项都不可使用了(不能与fd选项同时出现在命令行中)。
ifname=name 设置在宿主机中添加的TAP虚拟设备的名称(如tap1、tap5等等),不设置这个参数时,QEMU会根据系统中目前的情况,产生一个TAP接口的名称。
script=file 设置宿主机在启动客户机时自动执行的网络配置脚本。如果不指定,其默认值为“/etc/qemu-ifup”这个脚本,可指定自己的脚本路径以取代默认值;如果不需要执行脚本,则设置为“script=no”。downscript=dfile 设置宿主机在客户机关闭时自动执行的网络配置脚本。如果不设置,其默认值为“/etc/qemu-ifdown”;若客户机关闭时宿主机不需要执行脚本,则设置为“downscript=no”。
helper=helper 设置启动客户机时在宿主机中运行的辅助程序,包括去建立一个TAP虚拟设备,它的默认值为/usr/local/libexec/qemu-bridge-helper,一般不用自定义,采用默认值即可。sndbuf=nbytes 限制TAP设备的发送缓冲区大小为n字节,当需要流量进行流量控制时可以设置该选项。其默认值为“sndbuf=0”,即不限制发送缓冲区的大小。
其余几个选项都是与virtio相关的,这里暂不做过多的介绍。
准备qemu-ifup和qemu-ifdown脚本。
在客户机启动网络前,会执行的脚本是“script”选项是由配置的(默认为/etc/qemuif-up),一般在该脚本中去创建一个TAP设备并将其与bridge绑定起来。如下是qemu-ifup脚本的示例,其中“$1”是qemu-kvm命令工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap0、tap1等,也或者是前面提及的ifname选项的值)。另外,其中的“tunctl”命令这一行是不需要的,因为qemu-bridge-helper程序已经会创建好TAP设备,这里列出来只是为了可能在一些版本较旧的qemu-kvm中没有自动创建TAP设备。
#!/bin/bash #This is a qemu-ifup script for bridging. #You can use it when starting a KVM guest with bridge mode network. #set your bridge name switch=br0 if [ -n "$1" ]; then #create a TAP interface; qemu will handle it automatically. #tunctl -u $(whoami) -t $1 #start up the TAP interface ip link set $1 up sleep 1 #add TAP interface to the bridge brctl addif ${switch} $1 exit 0 else echo “Error: no interface specified” exit 1 fi
注意:这个脚本要改为可执行文件,才能使用:
[root@Server3 ~]# chmod +x /etc/qemu-ifup由于qemu-kvm工具在客户机关闭时会去解除TAP设备的bridge绑定,也会自动去删除已不再使用的TAP设备,所以qemu-ifdown这个脚本不是必需的,最好设置为“downscript=no”。如下列出一个qemu-ifdown脚本的示例,是为了说明清理bridge模式网络的环境的步骤,在qemu-kvm没有自动处理时可以使用。
#!/bin/bash #This is a qemu-ifdown script for bridging. #You can use it when starting a KVM guest with bridge mode network. #Don’t use this script in most cases; QEMU will handle it automatically. #set your bridge name switch=br0 if [ -n "$1" ]; then # Delete the specified interfacename tunctl -d $1 #release TAP interface from bridge brctl delif ${switch} $1 #shutdown the TAP interface ip link set $1 down exit 0 else echo “Error: no interface specified” exit 1 fi
现在开始运行虚拟机,命令如下所示:
[root@Server3 ~]# /usr/local/qemu-post-june-04-2012/bin/qemu-system-x86_64 -smp 2 -m 1024 /images/test.img -net nic -net tap,ifname=tap1,script=/etc/qemuif-up,downscript=no -vnc :6 -machine accel=kvm查看网桥情况:
[root@Server3 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0015179d09fe yes eth0 tap1 virbr0 8000.52540092d0d1 yes virbr0-nic
可以看到br0下有两个网卡,通过配置这两个网卡的IP,就可以实现虚拟机与主机之间的网络通信了。
使用网桥模式(bridge networking mode)配置KVM-QUME虚拟机网络,古老的榕树,5-wow.com
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。