29.5 桥接

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

29.5.1 简介

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

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

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

29.5.2 适合桥接的情况

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

29.5.2.1 网段上存在高流量

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

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

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

29.5.2.2 过滤/数据整形防火墙

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

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

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

29.5.3 配置网桥

29.5.3.1 选择网络接口卡

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

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

29.5.3.2 改变内核配置

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

options BRIDGE

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

29.5.3.3 防火墙支持

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

  如果需要允许非 IP 数据包 (例如 ARP) 穿过网桥, 有三种方法可供选择。 第一种是在内核配置中加入下列选项, 并重新联编:

  

option IPFIREWALL_DEFAULT_TO_ACCEPT


  第二种方法, 是在 rc.conf 文件中将防火墙类型设置为 “open”:

firewall_type="open"

  注意, 这些选项会让防火墙看起来像透明的一样; 默认情况下, 所有包或连接都会被允许。 如果选择这样做的话, 可能会需要对防火墙规则进行大幅调整。

  第三种方法是应用下述 ipfw(8) 规则:

# ipfw add allow mac-type arp layer2

  或将其加入在用的防火墙规则集。 这个规则实际上是允许 arp(8) 包通过, 因此最好把它放在规则集前面, 以便能够尽早地应用此规则, 而避免由此带来的性能影响。

29.5.3.4 数据传输支持

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

29.5.4 激活网桥

  增加下行:

net.link.ether.bridge.enable=1

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

net.link.ether.bridge.config=if1,if2

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

net.link.ether.bridge.ipfw=1

  这样一行。

  对于 FreeBSD 5.2-RELEASE 和更早的版本, 则应使用下面的配置:

net.link.ether.bridge=1
net.link.ether.bridge_cfg=if1,if2
net.link.ether.bridge_ipfw=1

29.5.5 其它信息

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

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

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

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.