原文地址 http://zhumeng8337797.blog.163.com/blog/static/1007689142011716105153722/

注:原文有一处错误,/etc/xen/scripts/ChinaCache-network-multi-bridge 应该是 /etc/xen/scripts/php-oa-network-multi-bridge,本文已经改正错误。

[虚拟化]设置 XEN 的多网卡(3网卡4网卡..)桥接  

2011-08-16 22:51:53|  分类: 虚拟化+云计|字号 订阅

 
 

我有种机器,有 4 个网卡,想在上面整 4 个虚拟机。所以让不同的虚拟机,使用不同的网卡。这样来做桥接设备。方便使用。记录一下方法,如下。

1.安装 xen 虚拟化

最开始当然得使用软件源来安装虚拟化。用 163 的吧,速度不错。 

perl -i -pe 's/mirror.centos.org/mirrors.163.com/g;s/^#baseurl/baseurl/g;s/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Base.repo  yum -y groupinstall Virtualization

我们计划的设置如下
eth0 – xenbr0 – Dom0, DomN
eth1 – xenbr1 – DomX+1
eth2 – xenbr2 – DomX+2 
eth3 – xenbr3 – DomX+3

4个网卡,分别桥接,然后让三个虚拟机分别接到三个机器上

 

2. 修改 xend 的配置文件,让它支持多个网卡,不使用默认的脚本

在 /etc/xen/xend-config.sxp 文件中的 (network-script network-bridge) 修改成 (network-script php-oa-network-multi-bridge).这样启用我们自己的脚本来生成桥接的设备

perl -i -pe 's/\(network-script network-bridge\)/#\(network-script network-bridge\)\n\(network-script php-oa-network-multi-bridge\)/g' /etc/xen/xend-config.sxp

 

3. 写自己自定的脚本 ,来生成自己所需要的网卡数量和绑定的位置,如上面的计划中 
 

perl -le 'for $num (0 .. 3){print "/etc/xen/scripts/network-bridge \"\$@\" vifnum=$num netdev=eth$num bridge=xenbr$num" }' > /etc/xen/scripts/php-oa-network-multi-bridge  chmod u+x /etc/xen/scripts/php-oa-network-multi-bridge

这样会生成一个 /etc/xen/scripts/php-oa-network-multi-bridge 内包含如下的内容。$@ 是用来接收 shell 命令中的 start,stop,status 的命令的。记的要加执行的权限,可一定不能忘记.

/etc/xen/scripts/network-bridge "$@" vifnum=0 netdev=eth0 bridge=xenbr0  /etc/xen/scripts/network-bridge "$@" vifnum=1 netdev=eth1 bridge=xenbr1  /etc/xen/scripts/network-bridge "$@" vifnum=2 netdev=eth2 bridge=xenbr2  /etc/xen/scripts/network-bridge "$@" vifnum=3 netdev=eth3 bridge=xenbr3

 

4.配置物理网卡,让开机就能启动

好了,在使用上面的脚本成前面,我们需要保证这几个网卡配置是能正常启动的。
所以我们要修改二个地方 ,ONBOOT=yes 和 BOOTPROTO=static 这二个,网卡才能正常的启动. 

perl -i -pe "s/ONBOOT=no/ONBOOT=yes/g;s/BOOTPROTO=dhcp/BOOTPROTO=static/g" /etc/sysconfig/network-scripts/ifcfg-eth{1,2,3}

 

5. 测试桥接 

下面的命令就不用解释了,还可以用 ifconfig 检查 

/etc/xen/scripts/php-oa-network-multi-bridge start  /etc/xen/scripts/php-oa-network-multi-bridge status  /etc/xen/scripts/php-oa-network-multi-bridge stop

 

6. 安装第一个虚拟机

下面的命令是用来安装第一个虚拟机的,其它的虚拟机直接 copy 出来就行。然后只要修改其它机器的配置文件就行了。

/usr/sbin/virt-install -p --paravirt --name=node1 -s 5 --ram=8192 --vcpus=2 --file=/xen/node1 --location=nfs:123.125.162.7:/mnt --extra-args="ip=123.125.162.45 netmask=255.255.255.192 gateway=123.125.162.1 dns=202.106.0.20" --network bridge=xenbr0 noipv6

 

以上参数中
–extra-args 这个是传送给启动时的内核用的。
–network 是设置网络的连接方法,还有桥接到那个设备
-s 生成的文件大小 G 为单位
–ram 内存设置
–file 系统文件存放的位置

 

7. 设置自动启动

当主系统启动时,虚拟机启动,自己有几个 虚拟机设置几个

virsh autostart node1

 

8. 其它虚拟机的安装

其它的虚拟机安装比较容易,直接 copy 上面的 /xen/node1 这个操作系统的文件叫别的名字,另外新建几个其它机器的配置文件

cp /etc/xen/node1 /etc/xen/node{1,2,3}

并修改其中几个参数

name = "node1"  disk = [ "tap:aio:/xen/node1,xvda,w" ]  vif = [ "mac=00:16:36:7b:c9:e3,bridge=xenbr0,script=vif-bridge" ]

如上几个参数 ,disk 指向其它的参数。vif 是指本机的 MAC 地址,xenbr0 – xenbr3 是可以桥接的设备
如果要新加硬盘,可以使用下面的语法,来加入物理硬盘

disk = [ "tap:aio:/xen/node1,xvda,w",  "phy:/dev/sdb,ioemu:sdb,w",  "phy:/dev/sdc,ioemu:sdc,w",  ]

 

以下经验参考: http://www.cnblogs.com/yangyh/archive/2010/07/16/1778516.html

xenbr0 是会连接vif0.0,vifN.0 (N 表示 xm list 中的 id 号,表示第几个 id 的虚拟主机)
peth0 可以将peth0看作etho的别名
vif0.0表示dom0接口,vif1.0表示dom ID=1的接口(重启或新建几个domain,ID更改后你会发现vif1.0变成vif2.0..3.0了)

如果在xenbr0中删除vif0.0,则在domain中无法ping通本机,但能ping通通过eth0连接的机器,比如本机连接的路由器
如果在xenbr0中删除vif1.0,则在domain中就没有网卡了(相应的vif1.1表示ID为1的DOMAIN的第二块网卡)
如果在xenbr0中删除peth0,则能ping能本机,而无法ping通路由器或局域网其它机器

 

 

来源地址: http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Virtual...

Process to setup multiple Red Hat Virtualization bridges:

  1. Configure another network interface using either the system-config-network application. Alternatively, create a new configuration file named ifcfg-ethX in the /etc/sysconfig/network-scripts/ directory where X is any number not already in use. Below is an example configuration file for a second network interface called eth1
          $ cat /etc/sysconfig/network-scripts/ifcfg-eth1
          DEVICE=eth1
          BOOTPROTO=static
          ONBOOT=yes
          USERCTL=no
          IPV6INIT=no
          PEERDNS=yes
          TYPE=Ethernet
          NETMASK=255.255.255.0
          IPADDR=10.1.1.1
          GATEWAY=10.1.1.254
          ARP=yes
  2. Copy the file, /etc/xen/scripts/network-bridge, to /etc/xen/scripts/network-bridge.xen.
  3. Comment out any existing network scripts in /etc/xen/xend-config.sxp and add the line network-xen-multi-bridge.
  4. Create a custom script to create multiple Red Hat Virtualization network bridges. A sample scripts is below, this example script will create two Red Hat Virtualization bridges (xenbr0 and xenbr1) one will be attached to eth1 and the other one to eth0. If you want to create additional bridges just follow the example in the script and copy/paste the lines accordingly:
          #!/bin/sh
          # network-xen-multi-bridge
          # Exit if anything goes wrong.
          set -e
          # First arg is the operation.
          OP=$1
          shift
          script=/etc/xen/scripts/network-bridge.xen
          case ${OP} in
          start)
          $script start vifnum=1 bridge=xenbr1 netdev=eth1
          $script start vifnum=0 bridge=xenbr0 netdev=eth0
          ;;
          stop)
          $script stop vifnum=1 bridge=xenbr1 netdev=eth1
          $script stop vifnum=0 bridge=xenbr0 netdev=eth0
          ;;
          status)
          $script status vifnum=1 bridge=xenbr1 netdev=eth1
          $script status vifnum=0 bridge=xenbr0 netdev=eth0
          ;;
          *)
          echo 'Unknown command: ' ${OP}
          echo 'Valid commands are: start, stop, status'
          exit 1
          esac

我理解其中第3步就是将xend-config.sxp配置文件中的(network-script network-bridge)替换为(network-script network-xen-multi-bridge),假定将第4步创建的脚本命名为network-xen-multi-bridge。
我在修改配置时,没有写前面的network-script,在重新启动后一个虚拟网桥都没有找到,因为服务器正在使用中,不能频繁重新启动,所以尝试手工执行/etc/xen/scripts/network-xen-multi-bridge start,然后二个虚拟网桥都可以正常工作了。

 

 

 

根据网上的资料总是存在这样或者那样的问题,自己摸索后,贴出自己的经验和大家分享。

        安装好kvm后,连不上网,折腾了好久,客户机能上网了,主机又上不了。重新配置后,主机在没有启动kvm前能上网,在启动kvm后,客户机能上网,主机又上不了网。郁闷啊。不过现在,主宿机器都能同时联网。但是还存在一点问题。

环境:系统ubuntu10.10  虚拟机kvm + qemu 。主机ip为192.168.1.46,虚拟机中系统(我这用xp)的ip为192.168.1.66

具体步骤不说了,网上太多。贴下我 文件配置,还有一些心得。

首先机器能上网,即已经配置过/etc/network/interfaces文件,ip为192.168.1.46 netmask 255.255.255.0 gateway 192.168.1.254

为了使kvm桥接 网络,将该文件改为

auto lo
iface lo inet loopback
#auto eth0
#iface eth0 inet manual

auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.46
netmask 255.255.255.0
gateway 192.168.1.254
bridge_stp off
bridge_maxwait 0
bridge_fd 0

auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down

启动kvm:

lxz@lxz-pc:~$ sudo qemu-system-x86_64 ./kvm/winxp.img -m 512 -net nic,macaddr=00:11:22:33:44:55 -net tap,ifname=tap0,script=no

启动后,将启动的虚拟机中的xp配置下ip,子网掩码,网关(xp里的ip要和192.168.1.46在一个网段,我配置的为192.168.1.66),这样,主宿机都能上网了。

利用ifconfig命令可以看到:

多了一个br0,和tap0 。而且eth0的ip没有了。在没有启动kvm之前eth0是有ip 的,ip为192.168.1.46。但是现在br0的ip成为了192.168.1.46

至此,主宿机器都能上网,看来kvm桥接的问题貌似得到解决。这个问题解决,新的问题又出现了。

如果在你关掉虚拟机和主机后,重启主机再上网的时候,发现主机已经不能上网,用ipconfig命令查看,eth0和br0的ip都为192.168.1.46。 

查看路由表:

目标                   网关              子网掩码        标志    跃点     引用   使用 接口
192.168.1.0      *                255.255.255.0      U       0             0        0 br0
192.168.1.0      *                255.255.255.0      U       1             0        0 eth0
link-local           *                255.255.0.0         U       1000        0        0 br0
default         192.168.1.254   0.0.0.0             UG      0             0        0 eth0

default         192.168.1.254   0.0.0.0            UG      100         0        0 br0

发现对于同一个目标网络,有两个下一跳,显然不行,于是用如下命令清除eth0的ip,问题得到解决,主宿机又能同时上网了。

lxz@lxz-pc:~$ sudo ifconfig eth0 0.0.0.0    

 

清除eth0的ip信息后,路由表变为:

目标                 网关            子网掩码        标志  跃点    引用   使用 接口

192.168.1.0     *               255.255.255.0   U        0         0        0 br0
link-local          *               255.255.0.0       U     1000      0        0 br0

default     192.168.1.254      0.0.0.0         UG    100       0        0 br0

再用ifconfig命令查看,eth0的ip没有了,而br0的ip还为192.168.1.46。

 

看来,要想主宿机同时上网,eth0是不能有ip的。

到这里,问题得到解决,不过还没找到在没有启动kvm虚拟机的时候不启动br0的方法,有待进一步研究。知道的朋友可以留言谢谢