【笔记】如何配置kvm桥接网络

 

如何配置桥接网络:

 

首先要安装桥接工具:

yum install bridge-utils-1.2-10.el6.x86_64

//创建 br0 桥接设备

brctl addbr br0 

//这句命令是否创建出来一个虚拟网卡呢?还是先创建一个虚拟网卡,

//再用这个虚拟网卡创建一个桥接口?

//答案是,直接用这句命令就可以,但还有另一种修改网络配置文件的方式

 

然后要添加网卡到这个桥接接口,只需要:

brctl addif br0 eth0 # 将eth0网卡添加到br0中,作为br0的一个接口

 

具体来说是执行以下的步骤,要注意的是这是一个临时配置的方法,系统重启后失效

[root@jay-linux ~]# brctl addbr br0    #添加br0这个bridge

[root@jay-linux ~]# brctl addif br0 eth0    #将br0与eth0绑定起来

[root@jay-linux ~]# brctl stp br0 on    #将br0加入到STP协议中

[root@jay-linux ~]# dhclient br0    #将br0的网络配置好

 

桥接网络结构:(转自IBM: http://www.ibm.com/developerworks/cn/linux/l-cn-kvm/index.html

 

//以下是摘自笑遍世界博客KVM虚拟化连载中关于网桥配置的一部分说明

    博文地址:http://smilejay.com/kvm_theory_practice/

 

建立bridge后的状态是让网络接口eth0进入混杂模式(promiscuous mode,接收网络中所有数据包),网桥br0进入转发状态(forwarding state),而且br0和eth0有相同的MAC地址,一般也会得到和eth0相同的IP。“brctl stp br0 on”是打开br0的STP协议,STP是生成树协议(Spanning Tree Protocol),它主要是为了避免在建有bridge的以太网LAN中出现桥回路(bridge loop)。如果不打开STP,则可能出现回路从而导致建有bridge的主机网络不畅通。

这里默认是通过DHCP方式动态获得IP;在绑定了bridge之后,也可以使用“ifconfig”和“route”等命令进行设置br0的IP、网关、默认路由等,需要将bridge设置为与其绑定的物理网络接口一样的IP和MAC地址,并让默认路由使用bridge(而不是ethX)来连通。这个步骤可能导致宿主机的网络断掉,之后重新通过bridge建立网络连接,所以建立bridge这个步骤最好不要通过SSH连接远程配置。另外,在RHEL系列系统中最好将NetworkManager这个程序结束掉,因为它并不能管理bridge的网络配置,反而它在后台运行则可能对网络设置有些干扰。

 

eth0, br0 的网络设置:

br0是一块虚拟网卡,用来做linux下的桥接设备,将其他物理网卡、虚拟网卡绑定到br0上作为它的一个接口,br0如同交换机, 绑定到br0上的网卡如同交换机的一个接口。网卡在这里转换为桥接设备的一个接口之后,就可以注释掉它原有的网络配置信息(避免未知某种冲突,这里我没有明白为什么一定要注释掉原来的配置信息)。虚拟的客户机中的网卡连接到br0其中一个接口,这样虚拟机和宿主机就连接在同一个网段中(网络号相同)。这个连接是通过qemu-kvm 命令行工具来实现。下面会介绍到如何用qemu-kvm命令行工具实现这个连接。

 

示例1:Redhat系统KVM

创建磁盘

qemu-img create -f qcow2 CentOS6u4.img 20G

查看磁盘信息

qemu-img info CentOS6u4.img

 

使用配置文件的方式来做网桥配置,这种配置方式,重启后仍然有效

配置桥接

配置 /etc/sysconfig/network-scripts 下面的网络脚本

//这里是新建一个名为br0的虚拟网卡,TYPE类型为Bridge。

# cat/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0

ONBOOT=yes

BOOTPROTO=dhcp

#IPADDR=192.168.60.17

#NETMASK=255.255.255.0

#GATEWAY=192.168.60.1

TYPE=Bridge

 

//这里是将原有的物理网卡配置信息注释了,并且设置它为网桥的一个接口

//主要是这一句:BRIDGE=br0

# cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

#BOOTPROTO=dhcp

#HWADDR=00:01:02:8C:50:09 

#为什么要注释掉网卡物理地址呢。。?

ONBOOT=yes

BRIDGE=br0

 

在笑遍世界的kvm虚拟化连载中提到,在RHEL系列系统中最好将NetworkManager这个程序结束掉,因为它并不能管理bridge的网络配置,反而它在后台运行则可能对网络设置有些干扰。

 

//如果不关掉NetworkManager,在关闭、启动network服务报了如下错误:

[root@guli network-scripts]# service network reload

Shutting down interface eth0:  Error: Device 'eth0' 
(/org/freedesktop/NetworkManager/Devices/0) disconnecting failed: This 
device is not active

                                                              [FAILED]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface eth0:  Error: Connection activation failed: Failed to determine connection's virtual interface name

                                                           [FAILED]

Bringing up interface br0:  Error: Connection activation failed: Failed to determine connection's virtual interface name

                                                           [FAILED]

[root@guli network-scripts]# service network stop

Shutting down interface eth0:  Error: Device 'eth0' 
(/org/freedesktop/NetworkManager/Devices/0) disconnecting failed: This device is not active

                                                           [FAILED]

Shutting down loopback interface:                          [  OK  ]

 

//关掉NerworkManager服务

service NetworkManager stop

//再来启动网络服务就OK了

service network stop

service network start

//我发现这样配置也可以 NM_CONTROLLED=no, 没有关NetworkManager。

 

使用一个下面的脚本:

//启动一个网卡,并将之添加到br0

//其中,$1 是qemu-kvm命令行工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap1, tap2等),qemu-bridge-helper会创建好TAP设备,不过可能在一些版本较旧的qemu-kvm工具中没有自己创建TAP设备。(这段话转自笑遍世界的kvm连载专题)

cat /etc/init.d/qemu-ifup

#!/bin/bash

#set your bridge name

switch=br0

if [ -n $1 ]; then

# 创建一个TAP接口,这个接口是拿来接到客户机上的网卡的

# create a TAP interface, qemu-kvm may handle it automatically

# tunctl -u $(whoami) -t $1

# start up the TAP interface

if [ -n $1 ]; then

/sbin/ip link set $1 up

Sleep 0.5s

# add TAP interface to the bridge

/usr/sbin/brctl addif $switch $1

exit 0

else 

echo Error: no interface specified

exit 1

fi

 

使用ios安装,对于多张iso发行版的linux需要在qemu的控制台换盘( 我有两个ios, 但是木有换盘哦。。。,如果遇到提示需要换盘,可以尝试下面的方法,我没有遇到过,没有试验这个对不对,当做一个备忘放这里吧 ):

[root@jay-linux kvm_demo]# qemu-system-x86_64 -hda CentOS6u4.img -cdrom 你的iso路径 -m 1024 -net nic -net 
tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no -vnc :0 -daemonize

进入qemu的控制台,在鼠标聚焦到qemu界面时候,按住 Ctrl+Alt+2 进入控制台:

(qemu) change cdrom 你的另外一张iso

上面命令如果提示:"device not found"。可能是设备映射出错,可以这样:

(qemu) info block

...

(qemu) change ide1-cd0 iso文件

 

安装好以后,这样启动:

[root@jay-linux kvm_demo]# qemu-system-x86_64 -hda CentOS6u4.img -m 1024 -net nic -net 
tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no -vnc :0 -daemonize

-usb -usbdevice tablet

 

图形界面可能会有鼠标偏移的问题,加参数-usb -usbdevice tablet 可以改善的。

 

QEMU常见使用

使用vnc

qemu-kvm -m 512 -hda xp.img -net nic,macaddr=00:00:11:33:02:02 \

-net tap,ifname=tap2,script=/etc/init.d/qemu-ifup \

-localtime -vnc 192.168.60.17:2 --daemonize -usb -usbdevice tablet

上面让kvm虚拟机在后台运行,并启动vnc服务器,这样我们可以用vnc客户端

连接192.168.60.17:5902这个地址。

...

本文大部分修改自:

KVM虚拟机和QEMU

by Jian Lee

http://jianlee.ylinux.org/Computer/Software/kvm-qemu.html

你可能感兴趣的:(kvm,网络桥接)