5. 准备网桥

本节介绍您需要什么以及如何准备您的网桥。

5.1. 获取文件

在这里您可以找到设置网桥所需的文件和下载列表。如果您在您的发行版中已经拥有提到的文件或软件包,当然没有必要增加网络负载。

我将只提及 2.2.14 内核的文件。如果您想尝试不同的内核(例如 2.2.15 或最新的开发内核),只需替换内核版本号并查看是否能找到它。

重要提示:您已经阅读了摘要,对吧?所以您知道,如果您使用的是 2.3.47 或更高版本的内核,则无需下载任何内核补丁。

文件和软件包列表

未打补丁的内核源代码

例如:linux-2.2.14.tar.bz2可从您本地的 kernel.org 镜像站点获取。请首先检查您的发行版中是否包含(获取未打补丁的内核源代码)。如果没有,请查看 Linux 内核镜像系统 寻找附近的镜像站点并从那里下载。

网桥补丁

注意:如果您的内核版本高于 2.3.47,则不需要此补丁。从该版本开始,网桥功能已成为主流内核的一部分。

http://www.math.leidenuniv.nl/~buytenh/bridge/ 获取适用于您内核版本的网桥内核补丁。通过内核编号识别文件。

注意:也有一些补丁允许与 IP chains 一起使用。我从未尝试过,因为我认为在我的局域网内部进行防火墙设置没有必要,绝对没有必要针对外部世界架设网桥。欢迎您对此问题做出贡献。

用于稳定 2.2 内核的内核补丁。

可用的内核补丁

bridge-0.0.9-against-2.2.18.diff,针对 2.2.18 的主内核补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-0.0.9-against-2.2.18.diff

bridge-ipchains-against-0.0.9-against-2.2.18.diff,用于针对 2.2.18 进行网桥防火墙的附加补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-0.0.9-against-2.2.18.diff

bridge-0.0.8-against-2.2.18pre19.diff,针对 2.2.18pre19 的主内核补丁。

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-0.0.8-against-2.2.18pre19.diff

bridge-0.0.8-against-2.2.17-0.5.diff,针对 2.2.17-0.5 的主内核补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-0.0.8-against-2.2.17-0.5.diff

bridge-ipchains-against-0.0.8-against-2.2.18pre19.diff,用于针对 2.2.18pre19 进行网桥防火墙的附加补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-0.0.8-against-2.2.18pre19.diff

bridge-ipchains-against-0.0.8-against-2.2.17-0.5.diff,用于针对 2.2.17-0.5 进行网桥防火墙的附加补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-0.0.8-against-2.2.17-0.5.diff

bridge-0.0.7-against-2.2.18pre15.diff,针对 2.2.18pre15 的主内核补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-0.0.7-against-2.2.18pre15.diff

bridge-ipchains-against-0.0.7-against-2.2.18pre15.diff,用于针对 2.2.18pre15 进行网桥防火墙的附加补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-0.0.7-against-2.2.18pre15.diff

bridge-0.0.7-against-2.2.17.diff,针对 2.2.17 的主内核补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-0.0.7-against-2.2.17.diff

bridge-ipchains-against-0.0.7-against-2.2.17.diff,用于针对 2.2.17 进行网桥防火墙的附加补丁

http://www.math.leidenuniv.nl/~buytenh/bridge/patches/bridge-ipchains-against-0.0.7-against-2.2.17.diff

网桥配置实用程序

您还需要网桥配置实用程序来设置网桥,请参阅第 6 节。您也可以从 http://www.math.leidenuniv.nl/~buytenh/bridge/ 下载它们。

5.2. 应用补丁

注意:如果您的内核版本高于 2.3.47,则不需要此补丁。从该版本开始,网桥功能已成为主流内核的一部分。

将网桥补丁应用于您的内核。如果您不知道如何操作,请阅读 Kernel-HOWTO,它可以在您的发行版中找到,或者在 http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html 找到。

示例 1. 应用内核补丁

root@mbb-1:~ # cd /usr/src/linux-2.2.14
root@mbb-1:/usr/src/linux-2.2.14 # patch -p1 < \
    bridge-0.0.5-against-2.2.14.diff
.
.
      

5.3. 配置内核

现在是时候配置我们新打补丁的内核,以创建网桥功能。

运行 make configmake menuconfig图形化界面 make xconfig。在 networking option 部分选择 bridging 以编译为模块。据我所知,将其编译为内核模块并没有什么强烈的理由,但我听说过将网桥代码直接编译到内核中会遇到问题的传闻。

root@mbb-1:~ # cd /usr/src/linux-2.2.14
root@mbb-1:/usr/src/linux-2.2.14 # make menuconfig
.
      

5.4. 编译内核

编译您的内核,请参阅示例 2。使新编译的内核镜像能够被加载。我不知道内核补丁是否仅适用于网桥模块,或者是否也修改了内部的一些接口vmlinuz。因此,在您更新内核镜像后重新启动可能不是一个错误。

示例 2. 编译内核的命令

root@mbb-1:/usr/src/linux-2.2.14 # make dep clean zImage modules modules_install zlilo
...
      

5.5. 编译网桥实用程序

以下是如何从头开始编译和安装。只需 解压 unzip 实用程序 tarball,cd 进入新创建的目录,然后执行 make

示例 3. 编译网桥实用程序的命令

root@mbb-1:/usr/src/linux-2.2.14 # cd /usr/local/src
root@mbb-1:/usr/local/src/ # tar xzvf bridge-utils-0.9.1.tar.gz
.....
....
root@mbb-1:/usr/local/src # cd bridge
root@mbb-1:/usr/local/src/bridge # make
.....
....
      

示例 3 中显示的编译工作正常完成后,您可以将可执行文件复制到例如/usr/local/sbin/(至少我是这样做的)。因此,您需要给出的命令应该很清楚,但为了完整起见,请参阅 示例 4

示例 4. 复制实用程序的二进制文件

root@mbb-1:/usr/local/src/bridge # cd brctl
root@mbb-1:/usr/local/src/bridge/brctl # cp brctl /usr/local/sbin
root@mbb-1:/usr/local/src/bridge/brctl # chmod 700 /usr/local/sbin/brctl
root@mbb-1:/usr/local/src/bridge/brctl # cp brctld /usr/local/sbin
root@mbb-1:/usr/local/src/bridge/brctl # chmod 700 /usr/local/sbin/brctld
      

现在您也可以将新的 man 手册页复制到一个合适的位置,如 示例 5 所示。

示例 5. 复制 brctl 的 Man 手册页

root@mbb-1:/usr/local/src/bridge # cd doc
root@mbb-1:/usr/local/src/bridge/doc #  gzip -c brctl.8 > /usr/local/man/man8/brctl.8.gz