OPS Notes By 枯木

Qemu-kvm桥接网络

| Comments

手动桥接

qemu-kvm安装或者启动虚拟系统的时候如果需要和外界通信,那么就要设置网络桥接

1
2
3
/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状态的

1
2
3
# ip link show dev tap0
37: tap0: <BROADCAST,MULTICAST> 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相关的网卡

1
2
3
4
5
# brctl show br0
bridge name   bridge id       STP enabled interfaces
br0       8000.b8975a626020   no      eth0
                          vnet0
                          vnet1

我们需要把tap0也桥接到br0下以便和外界通信,方法如下

1
2
3
4
5
6
7
8
# 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绑定,所以这一步无需操作

脚本实现

1
2
3
/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网络配置启动前启动脚本,脚本内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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很有帮助

Comments