qemu-kvm安装或者启动虚拟系统的时候如果需要和外界通信,那么就要设置网络桥接
/usr/libexec/qemu-kvm -m 1024 \
-drive file=/data/images/CentOS6_4.qcow2,if=virtio \
-net nic,model=virtio -net tap,script=no -nographic -vnc :0
使用-net tap,script=no
方式启动之后,系统会生成tapX的虚拟网卡,默认是DOWN状态的
# ip link show dev tap0
37: tap0: mtu 1500 qdisc noop state DOWN qlen 500
link/ether d2:b0:af:7b:23:0f brd ff:ff:ff:ff:ff:ff
如果想和外界通信,可以手动执行生效,如下所示当前与br0桥接的设备,并没有tap相关的网卡
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.b8975a626020 no eth0
vnet0
vnet1
我们需要把tap0也桥接到br0下以便和外界通信,方法如下
# ip link set tap0 up //使tap0状态变为up
# brctl addif br0 tap0 //桥接tap0到br0
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.b8975a626020 no eth0
tap0
vnet0
vnet1
brctl delif br0 tap0
删除桥接网络,qemu-kvm工具在客户机关闭时会自动解除TAP设备的bridge绑定,所以这一步无需操作
/usr/libexec/qemu-kvm -m 1024 \
-drive file=/data/images/CentOS6_4.qcow2,if=virtio \
-net nic,model=virtio -net tap,script=/tmp/qemu-ifup.sh -nographic -vnc :0
如上tap,script=/tmp/qemu-ifup.sh
指定script网络配置启动前启动脚本,脚本内容如下
# cat /tmp/qemu-ifup.sh
#!/bin/bash
# 桥接网络设备
switch=br0
if [ -n $1 ]; then //$1为qemu-kvm传递值,这里是tap
ip link set $1 up
brctl addif ${switch} $1
exit 0
else
echo "no interface!"
exit 1
fi
如此,便不需要每次手动添加了
这部分内容的理解主要是 KVM使用网桥模式 这篇文章,顺便推荐此博主的《KVM虚拟化技术:实战与原理解析》一书,对系统的学习KVM很有帮助。
--EOF--