原文地址 http://zhumeng8337797.blog.163.com/blog/static/1007689142011716105153722/
注:原文有一处错误,/etc/xen/scripts/ChinaCache-network-multi-bridge 应该是 /etc/xen/scripts/php-oa-network-multi-bridge,本文已经改正错误。
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:
$ 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
#!/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的方法,有待进一步研究。知道的朋友可以留言谢谢