2015-12-15 QEMU Network Setup

来源:互联网 发布:ubuntu kernel 地址 编辑:程序博客网 时间:2024/05/20 21:21

QEMU Network Setup

QEMU Network Setting

上周配置QEMU的网络设置用了很大功夫,终于彻底弄明白了。

需求:首先要清楚,因为我要修改QEMU代码,所以不能用virsh来自动配置,因为它采用的是qemu-kvm,进行了特殊的订制,可能会有不必要的麻烦。我需要自己make install之后,用qemu-system-x86_64来手动启动虚拟机。

结构:在Host中,创建桥接网络virbr0,并且将eth0连入此桥接网络。然后在Guest中,修改network-scripts,正确识别并设置QEMU的网卡e1000。最后,编写Host中的QEMU启动脚本,将Guest连入virbr0。

  1. Host Setting
    1. REMEMBER TO CHECK NETWORK CABLE CONNECTION FIRST!!!我浪费了好多时间在配置脚本上,总是无法正确设置网络,结果发现网线松动了。
    2. Enter /etc/sysconfig/network-scripts/
    3. Add ifcfg-virbr0
    4. Edit ifcfg-eth0(maybe enp3s0,enp2s0),add it to virbr0
    5. service network restart
    6. brctl show //To ensure correctness
  2. QEMU scripts
    1. Edit runkvm for correct img path
    2. Edit qemu-ifup for correct bridge name
  3. Guest Setting
    1. Run runkvm to start guest and enter it with root
    2. cd /etc/udev/rules.d/
    3. cat 70-persistent-net.rules
    4. PCI device e1000 is QEMU network adapter,remember its NAME(eth0/1/2) and ATTR
    5. Add eth0/1/2 scripts under network-scripts:
      1. cd /etc/sysconfig/network-scripts/
      2. cp ifcfg-eth0 ifcfg-eth1(If qemu network adapter is eth0,normal setting should work,and we don't need to edit,just ifconfig to check network connection.)
      3. vim ifcfg-eth1
      4. Change HWADDR to ATTR in 70-persistent-net.rules
      5. service network restart
    6. Explanation: 因为之前都是在做Xen的虚拟化,所以这个镜像中配置的network-scripts是指定的Xen的网卡作为eth0,现在采用QEMU了,缺少对应的网络配置脚本,那么直接在network-scripts中加入新的脚本配置QEMU网卡就可以了。

Setting files

ifcfg-virbr0

TYPE=BridgeSTP=yesBOOTPROTO=noneNAME=virbr0UUID=cc49c39a-8713-4c88-b877-557a462ab738DEVICE=virbr0ONBOOT=yesDNS1=162.105.129.26DEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=noDELAY=0BRIDGINS_OPTS=priority=32768IPADDR=172.17.2.131PREFIX=16GATEWAY=172.17.1.1NM_CONTROLLED=no

ifcfg-enp3s0

BRIDGE=virbr0BOOTPROTO=noneNAME=enp3s0UUID=cc49c39a-8713-4c88-b877-557a462ab738DEVICE=enp3s0ONBOOT=yesNM_CONTROLLED=no

runkvm

#!/bin/bashqemu-system-x86_64 -enable-kvm -nographic -m 8192 -smp 3,sockets=3,cores=1,threads=1 -device e1000,netdev=net0 -netdev tap,id=net0,script=./qemu-ifup -device virtio-balloon-pci,id=balloon0,bus=pci.0 /root/richard/test/centos6.img

qemu-ifup

#!/bin/shset -xswitch=virbr0if [ -n "$1" ];then        echo "qemu-ifup argument: interface "$1        #/usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1        /usr/bin/sudo /sbin/ip link set $1 up        sleep 0.5s        /usr/bin/sudo /usr/sbin/brctl addif $switch $1        exit 0else        echo "Error: no interface specified"        exit 1fi

0 0