Chinaunix首页 | 论坛 | 博客

  • 博客访问: 897041
  • 博文数量: 226
  • 博客积分: 10077
  • 博客等级: 上将
  • 技术积分: 2708
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-25 14:36
文章分类

全部博文(226)

文章存档

2010年(15)

2009年(82)

2008年(129)

我的朋友

分类: LINUX

2009-12-28 18:12:08

KVM在LINUX中的重要作用,速度等,我不再评价,我只能说,快!
但是,如果你要在一个服务器中使用多个虚拟机,并且想让这些虚拟机提供服 务,那么,桥接网络是必不可少的,可是,网上流传的三四个版本中,关于桥接网络的,你试一下,会发现,很难成功,这是何道理?看起来他们似乎都配置成功 了,也有可能是软件版本的问题,总之,你亲自尝试的时候,会发现,这其实很难实现。

当然,如果无法实现的话,也就没有此文了!

先说一下我的软件配置:

Linux  2.6.28-11-server #42-Ubuntu SMP  X86_64位Ubuntu服务器版9.04
KVM内核是自带的。
真实网络接口名称:eth0

KVM的安装方法我就不写了,网上有一大堆,注意,KVM有两个部分,一个部分是内核部分,这在9.04中是自带的,您要安装的KVM是管理部分(我也不知道这样理解是否正确,总之,你要安装KVM及QEMU)
不安装QEMU也可以用,因为KVM带一个修改版本的QEMU

成功的关键是配置网络及路由(这个在网上流传的版本中没有提到)

请生成一个文件(qemu-ifup),将这个文件加上可执行属性,文件内容如下:

#!/bin/sh
set -x

switch=br0

if [ -n "$1" ];then
        /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 0
else
        echo "Error: no interface specified"
        exit 1
fi

将这个文件保存在你的HOME目录下,或者其它的目录也行。
修改你的/etc/network/interfaces文件如下:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto br0
iface br0 inet static
    bridge_ports eth0 //注意这个eth0,这是你的计算机的实际网卡,请根据你的网络修改,也可能跟我的这个一样。
    address 192.168.1.242 //根据你的需要设置从这里到下面的参数,这个网络跟你的实现网络在一个子网内,不然无法桥接
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-nameserver 192.168.1.1 219.141.136.10
    dns-search Office


此时,重新启动计算机即可。
你可能注意到, 这个文件里可能有关于eth0的配置,请删除它即可,也就是说,不能对eth0进行任何配置,这个接口在重新启动后,应该是没有配置IP的,否则不能工作。
重新启动完成后,请比照一下你的接口配置是否跟我的一样:
#ifconfig
br0       Link encap:以太网  硬件地址 00:21:5e:4e:33:e2  
          inet 地址:192.168.1.242  广播:192.168.1.255  掩码:255.255.255.0
          inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:48324758 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:25261650 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0
          接收字节:63199826111 (63.1 GB)  发送字节:5380518900 (5.3 GB)

eth0      Link encap:以太网  硬件地址 00:21:5e:4e:33:e2  
          inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:48903854 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:28125512 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:64152739997 (64.1 GB)  发送字节:6185466883 (6.1 GB)
          中断:16

请注意,只有br0有地址,而eth0是没有地址的,再比照一下你的路由表:
#route
内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
localnet        *               255.255.255.0   U     0      0        0 br0
default         bogon           0.0.0.0         UG    100    0        0 br0

请注意,如果你的路由表与我的不一样,例如出现四行,即又加上了
localnet * ...................    eth0
default bogon ..................eth0
那么,你八成是不能成功桥接的,出现这样的问题应该是由于你的ETH0网络被配置了IP,处理的办法就是想办法去掉eth0的IP,可以使用这个方法:
#ifconfig eth0 0.0.0.0

比较一下,你的桥接网络接口:
#brctl show
bridge name    bridge id        STP enabled    interfaces
br0        8000.00215e4e33e2    no        eth0
                            tap0
                            tap1
                            tap2
应该有这行存在(了可能还会出现其它的行,例如pan0),后面的tapX是不同的虚拟机的接口,这里可以看出,我桥接了三个虚拟接口到一个直接的接口。

如果你的IP地址配置与路由表跟我的一样,那么,应该是可以桥接成功的。

接下来就是启动你的虚拟机,启动前需要创建虚拟机的磁盘(即下面的u_ubuntu.img,可以参照网上的方法,这里就不重复了),启动虚拟机的方法:

#sudo kvm -hda u_ubuntu.img -boot c -net nic,model=virtio,macaddr=DE:AD:AF:22:33:22 -net tap,script=qemu-ifup -m 1024 -smp 2 -clock rtc -localtime

当然,有很的参数可用,我就不介绍了(其实我也不是很懂,嘿嘿),关键的问题就是macaddr和script两项,如果你有多个虚拟机,那么一样要配置不同的macaddr,script一定要指向你刚才保存的那个文件,可以使用绝对路径指明。

启动后,你应该可以正常安装操作系统了,安装完成后,如果虚拟机操作系统网络配置成DHCP,那么应该可以获取一个192.168.1.0网络内的地址,如果你不能获取地址,那么说明配置不成功。

在虚拟机工作的情况下,在宿主计算机上运行ifconfig,应该可以看到一个自动增加的接口tapX(其中X从0开始)。

小结一下:
1)eth0(宿主计算机连接到网络的真实网络接口)不能有IP地址!
2)路由表一定要正确,可以去找一找关于路由方面的介绍,了解一下这个路由信息的意思。
阅读(1866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~