热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XEN虚拟机设置多个网卡桥接

我有种机器,有4个网卡,想在上面整4个虚拟机。所以让不同的虚拟机,使用不同的网卡。这样来做桥接设备。方便使用。记录一下方法,如下。1.安装xen虚拟化最开始当然得使用软件源来安装虚拟化。用163的吧,速度不错。perl-i-pes/mirror.centos.org

我有种机器,有 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/ChinaCache-network-multi-bridge start  /etc/xen/scripts/ChinaCache-network-multi-bridge status  /etc/xen/scripts/ChinaCache-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. 设置自动启动

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

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:

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

Copy the file, /etc/xen/scripts/network-bridge, to /etc/xen/scripts/network-bridge.xen.

Comment out any existing network scripts in /etc/xen/xend-config.sxp and add the line network-xen-multi-bridge.

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的方法,有待进一步研究。知道的朋友可以留言谢谢


推荐阅读
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
    本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ... [详细]
  • 本文详细介绍了在Ubuntu 7.10操作系统上安装多种常用软件的方法,包括RAR压缩工具、即时通讯软件Pidgin、办公软件永中Office 2007试用版、多线程下载软件MultiGet及d4x、FTP客户端gFTP与FireFTP插件,以及P2P下载工具aMule。每部分都提供了具体的安装步骤和配置方法。 ... [详细]
  • 深入了解PHP人人商城系统
    本文详细介绍了PHP人人商城系统的概念、开发流程、常见问题解决方法及其开源版本的优势特点。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 深入理解动态链接库及其应用
    本文将探讨动态链接库的基本概念,包括Windows下的动态链接库(DLL)和Linux下的共享库(Shared Library),并详细介绍如何在Linux环境中创建和使用这些库。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • 本文探讨了Unix和Linux操作系统的起源和发展历程。从20世纪60年代计算机技术的初期阶段,到Unix的诞生及后续Linux的崛起,文章详细介绍了这些操作系统如何逐步成为现代计算不可或缺的一部分。 ... [详细]
  • 在CentOS上构建Ntopng实时网络流量监控平台
    本文详细介绍了如何在CentOS操作系统上安装和配置Ntopng,一个强大的网络流量监控工具。Ntopng能够提供实时的网络流量分析,并通过Web界面展示详细的流量报告。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 本文旨在回顾并总结近期学习的.NET Core基础知识,通过具体的操作指南加深理解,并为初学者提供实用建议,避免常见的错误和陷阱。内容涵盖CentOS的安装配置、.NET Core环境搭建及网站部署等。 ... [详细]
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • 解决腾讯社区开放平台.NET SDK在Linux下的兼容性问题
    本文探讨了腾讯社区开放平台.NET SDK在Linux系统(如CentOS)中遇到的QzoneException异常,并提供了通过安装根证书等方法解决该问题的具体步骤。 ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
author-avatar
流浪汉中的小男人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有