本文适用对象:拥有一定的网络基础、Linux基础、略懂英文、热爱钻研的linux爱好者
本文适用软件版本:Redhat系的Linux发行版,包括RedHat,FeraCore,Mandrake
等,包中的脚本只在RedHat9和Mandrake10.1下测试通过,欢迎你来测试别的版本
本文作者及版权:Copyleft under Free Documentation License (FDL) by elcoud e.cloud@163.com
本文及相关软件包下载:http://www.linuxforum.net/forum/fil...5-bridge.tar.gz
第一部分:概念原理
[网桥]是用于连接ISO第二层网络的设备,它只提供以太网层次的连接,对于之上的TCP/IP等协议来说是完全透明的,你可以把它理解为交换机,实际上交换机也是一种网桥的实现。在Linux上配置网桥可以说就是把机器当作交换机来用。
比如我现在的情况,在公司里使用两台电脑,但是我的位子上之有一条网线,于是我在台式机上装了双网卡,配置了网桥,一块网卡连接公司网络,一块通过双机直连线连接我的笔记本电脑。两台机器都有公司内部的固定IP地址,通过公司网关连入Internet。台式机对于笔记本电脑来说就是一个交换机
Linux从2.4内核开始就非常好的支持了网桥,并且还支持生成树协议等高级应用。
加入网桥的物理端口将不分配IP地址,只有网桥虚拟端口可以分配IP地址。虚拟端口可以完全当作一个普通端口来使用,并且支持iptables的各种应用和路由
配合ebtables,还可以支持二层网络包过滤、转发等高级应用。可以说Linux配合相应的工具完全可以提供高端交换机和路由器的各种功能、甚至他们没有的功能,当然了,受到PCI总线的限制,效率上一定是不如的
第二部分:安装配置
1,安装rpm包
装好以后,bridge-utils工具包就可以使用了
输入brctl(回车)可以看到使用帮助,比较简单,由于我们主要使用系统脚本来设置网桥,所以基本不会使用这个命令,最多使用brctl show来查看网桥的状态
详细信息可以去看/usr/share/doc/bridge-utils-1.0.4中的文档
2,给文件/sbin/ifup打补丁
patch -p0 /sbin/ifup < ifup.patch
3,在/etc/modprobe.conf文件中加入:
alias bri0 bridge
bri0是你给bridge端口起的名字,也可以叫别的,也可以有多个
4,修改/etc/sysconfig/network-scripts/目录中的物理网卡配置文件ifcfg-eth0等
在第2行开始加入如下两行:
TYPE=Bridge
BRIDGE=bri0
这是表明该物理网卡所属的bridge的名字,根据自己的实际情况填写
5,将文件ifcfg-bri0复制到/etc/sysconfig/network-scripts
chown root:root ifcfg-bri0
chmod 755 ifcfg-bri0
根据自己的需要进行相应修改
注意这个文件实际是bridge虚拟端口的配置文件,可以把bri0虚拟成一块普通的网卡,此文件中千万不能出现TYPE和BRIDGE这两个变量的定义,不然bri0无法获得ip地址,如果你有多个bridge端口可以复制多份此文件并且改成相应的名字。
BVI这个TYPE是我自己定义的,并对应ifup脚本中修改的部分,用于初始化bridge虚拟端口,不要擅自更改
6,重启网络服务
/etc/init.d/network restart
类似如下显示,表明你的网桥已经顺利运行了,你可以随时使用ifup/ifdown等工具来开关虚拟端口和任何一个物理端口
正在关闭接口 eth0: [完成]
正在关闭接口 eth1: [完成]
正在关闭接口 bri0: [完成]
正在关闭回环接口: [完成]
正在设置网络参数: [完成]
加载回环接口: [完成]
正在打开接口 bri0: [完成]
正在打开接口 eth0: [完成]
正在打开接口 eth1: [完成]
7,其他
如果你的ifup版本实在太老打了补丁仍无法顺利运行,那么就直接使用包里带的这个ifup脚本,把他复制到/sbin/目录
chown root:root /sbin/ifup
chmod 755 /sbin/ifup
8,后记
其实安装好bridge-utils工具包以后,网桥功能已经可以正常使用,在启动脚本(如/etc/profile)中添加若干brctl命令行和ifconfig命令行就可以完成网桥接口的配置和IP设置工作
之所以要采取本文所列的一系列方法其主要目的是为了让网桥功能跟系统网络服
务紧密结合,使bridge虚拟端口能够像一个标准的网络接口一样通过network服务启动,通过ifuo/ipdown等工具来控制,并且比命令行配置方式具有更大的灵活性
在尝试配置的过程中,遇到最大的问题主要来自ifup脚本对端口的启动顺序因为b在e前面,bri0最先进入配置流程,这个时候eth等端口还没有开启,桥bri0还没有定义,因此ifup无法给他配置IP。因此我自己定义了BVI(Bridge Virtual Interface)这种类型,并且在ifup脚本中增加了一个判断,使得bri0一进入配置流程就会先被定义。如果我们起的端口名字不叫bri0而叫z什么什么的话,恐怕就不会有这个问题了^o^
之所以会作这个东西是因为我自己正好有这样一个需求,并且因为网络的原因公司机器安装的是Mandrake10.1,不像debian那样对bridge支持的好,看了一下自带的文档只有vlan和bond的,因此才会自己动手添加对bridge的支持。
bridge-utils工具包的源码来自http://bridge.sourceforge.net ,在RH9.0下打包成rpm