[原创]Bridge-Howto

发表于:2007-07-04来源:作者:点击数: 标签:
本文适用对象:拥有一定的 网络 基

本文适用对象:拥有一定的网络基础、Linux基础、略懂英文、热爱钻研的linux
爱好者
本文适用软件版本:Redhat系的Linux发行版,包括RedHat,FeraCore,Mandrake
等,包中的脚本只在RedHat9和Mandrake10.1下测试通过,欢迎你来测试别的
版本
本文作者及版权:Copyleft under Free Documentation License (FDL) by elcoud e.cloud@163.com 
本文及相关软件包下载:(暂时还没找到地方,见附件)

第一部分:概念原理
[网桥]是用于连接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
本文于Mandrake10.1下Emacs编写,转载请注明出处

javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

右键另存为下载,把gif后缀去掉


 ecloud 回复于:2004-10-28 15:48:29
这个地址也可以:http://www.linuxforum.net/forum/files/521935-bridge.tar.gz

 ecloud 回复于:2004-10-28 17:18:17
自己up

 coolzsb 回复于:2004-10-28 17:29:06
没有对kernel打ebtables-brnf补丁吗?好像不打这个补丁的话,iptables无法对2层数据进行操作,那样的话,bridge就没有什么好玩的了

 ecloud 回复于:2004-10-28 20:32:06
"First step is to decide what kernel version to use. If you want to use a 2.5.x (or above) kernel, then just use the latest and greatest kernel version. You won't have to patch the kernel."
(From http://ebtables.sourceforge.net/ebtables-faq.html)

Because that I use Mandrake10.1 with the 2.6 kernel, so I can run ebtables without any patch. If you use 2.4 kernel (like RH9.0), you need patch the kernel

And even in bridge-nf mode, iptables never contral the ISO 2rd level data directory. It is that the ebtables send the packages to the nf-interface of iptables(so you also need the new version of iptables). So iptables can see the data, and then send back to ebtables through the nf-interface.

In most case, just use this is ok:
iptables -m physdev --physdev-in <bridge-port>
and
iptables -m physdev --physdev-out <bridge-port>

 coolzsb 回复于:2004-10-29 00:38:55
偶没有用过2.6.x的,一直以来都是用trustix,升级到2.6麻烦的很,也就懒得去体会了,不过ebtables真是个好东西的说

签名
------------
也许真的应该试试看新东西了

 judi 回复于:2004-10-29 11:38:19
真是好贴!谢谢!

 judi 回复于:2004-10-29 11:39:05
:P

 judi 回复于:2004-10-29 11:40:28
:em02:






 join2 回复于:2004-10-29 13:13:39
请教一下:patch -p1 和 patch   -po 有什么区别。
谢谢!!

 ecloud 回复于:2004-10-29 14:31:19
[quote:148f2bf6e7="join2"]请教一下:patch -p1 和 patch   -po 有什么区别。
谢谢!![/quote:148f2bf6e7]
man patch
里面讲得很清楚了

 ecloud 回复于:2004-10-31 10:27:41
增加一个下载地址:
http://www.dyc.cn/download/bridge.tar.gz

 linuxren 回复于:2005-01-10 00:19:15
用nat的方法更好些吧?

原文转自:http://www.ltesting.net