• 使用网桥模式(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设置成和网桥在一个网段内,就能够实现虚拟机与物理机之间的通信。


    注意:在进行配置时,要关掉NetworkManager。否则操作会出错:

    [root@Server3 ~]# service NetworkManager stop





  • 相关阅读:
    App集成支付宝
    关于Objective-c和Java下DES加密保持一致的方式
    Android开发规范
    android 屏幕适配问题
    Android AES加密算法及其实现
    linux文件系统调用(1)---mount
    Java(Android)解析KML文件
    【Akka】在并发程序中使用Future
    函数指针问题,求解答
    android旋转动画的两种实现方式
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6795616.html
Copyright © 2020-2023  润新知