有时候需要将一个物理网络分成两个独立的网段,而无需创建新的IP子网和连接两个网段的路由器。以这种方式连接两个网络的设备称为``网桥(bridge)''。有两个网络接口的FreeBSD系统可以作为网桥。
网桥通过学习每个网络接口上的MAC层地址(以太网地址)工作。 只当数据包的源地址和目标地址处于不同网络时网桥才进行转发。
在很多方面,网桥就像一个带有很少端口的以太网交换机。
目前,有两种常见的情况下使用网桥。
一种情况是你的物理网段流量过载,但是你不希望划分子网以路由器连接两个子网。
让我们考虑一个关于报社的例子,它的编辑部和产品部处于同一子网中。所有的编辑用户都使用服务器A的文件服务,而产品部使用服务器B。一个以太网将所有的用户连接在一起,高的流量负载使得网络速度变慢。
如果编辑部的用户能被分隔到一个网段中,产品部用户被分隔到另一个网段中那么这两个网段可以通过网桥连接起来。只当数据包目标为网桥``其它''端接口时,它才会被传到其它的网络上——这样就减少了各个网络的拥塞。
第二种常见的情况是需要防火墙的地方没有进行网络地址转换(NAT)。
一个例子是一个小公司,它通过DSL或ISDN连接到ISP。它拥有13个ISP分配的全局IP地址和10台PC。 在这种情况下,由于划分子网的问题,使用基于路由的防火墙存在一定难度。
一个基于网桥的防火墙可以成接在DSL/ISDN路由器的后面而免去了所有的IP号问题。
一个网桥至少需要两块网卡才能运行。 不幸的是,并不是所有的网卡都能被FreeBSD 4.0支持用于桥接。阅读bridge(4)了解所支持网卡的细节。
在继续之前要先安装并测试这两块网卡。
如果你计划将网桥作为防火墙,你还需要额外加入IPFIREWALL选项。阅读µÚ 14.8 节了解关于配置网桥作为防火墙的大致信息。
如果允许非IP(non-IP)数据包 (比如 ARP) 穿过网桥,必须设置一个防火墙(firewall)选项。这个选项是IPFIREWALL_DEFAULT_TO_ACCEPT。注意:这个选项改变了默认的规则使得防火墙接受任何的数据包。 在你设置这些规则前,请确认这些规则可能会产生什么后果。
如果你希望将网桥作为一个数据传输器,你需要向内核文件中加入 DUMMYNET 选项。阅读dummynet(4)以做进一步了解。
增加下行:
net.link.ether.bridge=1
到 /etc/sysctl.conf 里,以便在运行时激活网桥,然后加下行:
net.link.ether.bridge_cfg=if1,if2
以便在指定的接口上激活网桥(使用你的两个网络接口的名字替换 if1 和 if2 )。如果你希望用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
如果你希望可以从网络上ssh(1)进入网桥,给一个网卡分配IP地址就可以了。原则上给两个张卡分配一个地址是很不好的。
如果网络中有多个网桥,任何两个工作站之间的路径不能多于一条。技术上说,它的意思是不支持生成连接树管理。
网桥会增加ping(8)的延迟时间,尤其是不同网段之间的传输。