Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136914
  • 博文数量: 38
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 460
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-24 15:48
文章分类

全部博文(38)

文章存档

2011年(1)

2009年(11)

2008年(26)

我的朋友

分类: 服务器与存储

2008-11-27 15:29:09

在kvm里面的客户(虚拟机)网络跟在qemu里面的一样,所以可以参考关于qemu的网络连接的其他文档。此文章将尝试解释如何配置必需的常见的网络类型。
目录
1、用户网络
2、私有虚拟网桥
3、公共网桥
4、iptables
5、vde
-------------------------------------------------------------------------------
1、用户网络(User Networking)
用例:
*你想要一种让虚拟机访问主机、互联网或本地网络上的资源的简单方法。
*你不需要从网络或其他的客户机访问你的客户机
*你准备好做一个大的性能调整
*警告:用户网络不支持许多的网络网络功能,例如ICMP,某些应用程序可能也不能正常运行(例如ping)

预备条件:
*需要启动kvm并正常运行
*如果你不想以root用户运行,则你想要使用的用户必须对/dev/kvm具有读写权限
*如果你想要能够访问互联网或本地网络,主机系统必须能够访问互联网或本地网络

解决方案:
*简单地用“-net nic -net user”选项运行客户机,例如:
  qemu-system-x86_64 -hda /path/to/hda.img -net nic -net user

注意:
*IP地址能够自动分配到客户机中,这个归功于整合在QEMU中的DHCP服务
*如果你在主机上运行多个客户机,你不需要为每个客户机指定不同的MAC地址
*还可以使用“-redir”选项来访问客户机上的一个特定端口

2、私有虚拟网桥(private virtual bridge)
用例:
*你想要在两个或多个虚拟机之间建立一个私有网络,这个网络不会被其他虚拟机或真实网络的机器看到

预备需求:
*需要启动kvm并正常运行
*如果你不想以root用户运行,则你想要使用的用户必须对/dev/kvm具有读写权限
*下面的命令必须安装在系统中,如果你不想以root用户运行,你想要使用的用户必须能够用sudo来执行下面的命令:
  /sbin/ip
  /usr/sbin/brctl
  /usr/sbin/tunctl
 
解决方案:
*创建一个网桥,例如:
  sudo /usr/sbin/brctl addbr br0
  需要一个包含下面内容的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
#----------------------------------------------------
生成一个MAC地址,手工或用下面的脚本:
-----------------------------------------------------
#!/bin/sh
# generate a random mac address for the qemu nic
# shell script borrowed from user pheldens @ qemu forum
echo $(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ;
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
-----------------------------------------------------
在每台客户机中运行下面的命令,其中$macaddress用上一个步骤的值替换
qemu-system-x86_64 -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap

注意:
*如果不想以root用户来执行,qemu-ifup必须对想要使用的用户可执行
*可以创建一个全系统的qemu-ifup到/etc/qemu-ifup或使用其他的,如选择后者,则执行
qemu-system-x86_64 -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap,script=/path/to/qemu-ifup

私有虚拟网络里面的每个客户机必须有不同的MAC地址

3、公共网桥
警告:此处展示的方法,可能在大多数(可能全部)无线设备(wireless drivers)下不能 工作,可能因为他们不支持桥接

用例:
*你想要分配一个IP地址给你的虚拟机并让他们能够被本地网络的机器访问
*同事想要在虚拟机外部进行操作(You also want performance out of your virtual machine. )

预备需求:
*需要启动kvm并正常运行
*如果你不想以root用户运行,则你想要使用的用户必须对/dev/kvm具有读写权限
*下面的命令必须安装在系统中,如果你不想以root用户运行,你想要使用的用户必须能够用sudo来执行下面的命令:
  /sbin/ip
  /usr/sbin/brctl
  /usr/sbin/tunctl

解决方案1:使用distro系统配置脚本(using distro sysconfig script)
编辑/etc/sysconfig/network-scripts/ifcfg-eth0
注释BOOTPROTO
增加BRIDGE=switch

创建/etc/sysconfig/network-scripts/ifcfg-br0
内容如下
DEVICE=switch
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Bridge

/etc/init.d/network restart

网桥br0应该获得IP地址(静态或DHCP),同时物理的eth0必须不配置IP地址

解决方案2:手工
*创建一个网桥,例如:
sudo /usr/sbin/brctl addbr br0

将物理接口中的一个加入网桥中,以eth0为例:
sudo /usr/sbin/brctl  addif br0 eth0

需要一个包含如下内容的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
------------------------------------------------------------------------
生成一个MAC地址,x手工或用下面的脚本:
-----------------------------------------------------
#!/bin/sh
# generate a random mac address for the qemu nic
# shell script borrowed from user pheldens @ qemu forum
echo $(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ;
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
-----------------------------------------------------
在每台客户机中运行下面的命令,其中$macaddress用上一个步骤的值替换
qemu-system-x86_64 -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap

注意:
*如果不想以root用户来执行,qemu-ifup必须对想要使用的用户可执行
*可以创建一个全系统的qemu-ifup到/etc/qemu-ifup或使用其他的,如选择后者,则执行
qemu-system-x86_64 -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap,script=/path/to/qemu-ifup

网络里面的每个客户机必须有不同的MAC地址

4、iptables
你也可以将你的虚拟机连接到主机的一个tap上,然后将主机上iptables的规则配置成为虚拟机的路由器和防火墙。

5、vde
其他选项就是使用vde (virtual distributed ethernet).

阅读(1919) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~