24.5. 桥接

作者:Steve Peterson. 中文翻译:张 雪平 and 袁 苏义.

24.5.1. 简介

有时候需要将一个物理网络分成两个独立的网段, 而无需创建新的 IP 子网和连接两个网段的路由器。 以这种方式连接两个网络的设备称为“网桥 (bridge)”。 有两个网络接口的 FreeBSD 系统可以作为网桥。

网桥通过学习每个网络接口上的 MAC 层地址 (以太网地址) 工作。 只当数据包的源地址和目标地址处于不同网络时网桥才进行转发。

在很多方面,网桥就像一个带有很少端口的以太网交换机。

24.5.2. 适合桥接的情况

目前,有两种常见的情况下使用网桥。

24.5.2.1. 网段上存在高流量

一种情况是您的物理网段流量过载, 但是您不希望划分子网以路由器连接两个子网。

让我们考虑一个关于报社的例子, 它的编辑部和产品部处于同一子网中。 所有的编辑用户都使用服务器 A 的文件服务,而产品部使用服务器 B。 一个以太网将所有的用户连接在一起, 高的流量负载使得网络速度变慢。

如果编辑部的用户能被分隔到一个网段中, 产品部用户被分隔到另一个网段中那么这两个网段可以通过网桥连接起来。 只当数据包目标为网桥“其它”端接口时, 它才会被传到其它的网络上——这样就减少了各个网络的拥塞。

24.5.2.2. 过滤/数据传输防火墙

第二种常见的情况是需要防火墙的地方没有进行网络地址转换(NAT)。

一个例子是一个小公司,它通过 DSL 或 ISDN 连接到 ISP。 它拥有 13 个 ISP 分配的全局 IP 地址和 10 台 PC。 在这种情况下,由于划分子网的问题, 使用基于路由的防火墙存在一定难度。

一个基于网桥的防火墙可以成接在 DSL/ISDN 路由器的后面而免去了所有的 IP 号问题。

24.5.3. 配置网桥

24.5.3.1. 选择网络接口卡

一个网桥至少需要两块网卡才能运行。 不幸的是,并不是所有的网卡都能被 FreeBSD 4.0 支持用于桥接。阅读 bridge(4) 了解所支持网卡的细节。

在继续之前要先安装并测试这两块网卡。

24.5.3.2. 改变内核配置

为了激活内核对桥接的支持,增加以下语句:

options BRIDGE

到您的内核配置文件里,然后重建内核。

24.5.3.3. 防火墙支持

如果您打算把网桥作为防火墙来使用, 则还需要加入 IPFIREWALL 的设置。 请参考 Section 14.9 以了解关于将网桥配置为防火墙的其它信息。

如果允许非IP(non-IP)数据包 (比如 ARP) 穿过网桥, 必须设置一个防火墙 (firewall) 选项。这个选项是 IPFIREWALL_DEFAULT_TO_ACCEPT。 注意:这个选项改变了默认的规则使得防火墙接受任何的数据包。 在您设置这些规则前,请确认这些规则可能会产生什么后果。

24.5.3.4. 数据传输支持

如果您希望将网桥作为一个数据传输器, 您需要向内核文件中加入 DUMMYNET 选项。阅读 dummynet(4) 以做进一步了解。

24.5.4. 激活网桥

增加下行:

net.link.ether.bridge=1

/etc/sysctl.conf 里, 以便在运行时激活网桥,然后加下行:

net.link.ether.bridge_cfg=if1,if2

以便在指定的接口上激活网桥 (使用您的两个网络接口的名字替换 if1if2 )。如果您希望用 ipfw(8) 来过滤桥接的数据包,您还应该加入:

net.link.ether.bridge_ipfw=1

这样一行。

对于FreeBSD 5.2-RELEASE 及以后的版本,使用下面几行来代替:

net.link.ether.bridge.enable=1
net.link.ether.bridge.config=if1,if2
net.link.ether.bridge.ipfw=1

24.5.5. 其它信息

如果您希望可以从网络上 ssh(1) 进入网桥, 给一个网卡分配 IP 地址就可以了。 原则上给两张卡分配一个地址是很不好的。

如果网络中有多个网桥, 任何两个工作站之间的路径不能多于一条。 技术上说,它的意思是不支持生成连接树管理。

网桥会增加 ping(8) 的延迟时间, 尤其是不同网段之间的传输。