[Linux] How to bridge the two Network Interfaces ? ( Ethernet Bridging )

在建置一個類似 router 的裝置時,需要透過橋接兩個 network interface 的方式,使得 WAN port 與 LAN port 可以彼此連接,就像家用 router 一樣。在 Linux Kernel 內已經支援了這樣的功能,藉由開啟這個功能,可以很方便地建立兩個 network interface 的橋接。

這邊利用的是 Linux Kernel 內的 802.1d Ethernet Bridging 功能,因此需要確定有將此功能編譯進去 Kernel,這裡以 Linux Kernel 2.6 來作為範例。

– 基本的設置步驟

Step 1: change the working directory to Linux Kernel

Step 2: enter to the kernel configuration menu

#> make menuconfig

Step 3: the option steps are,

  • Networking support

    • Networking options

      • 802.1d Ethernet Bridging

完成 Linux Kernel 功能配置後,並重新編譯 Linux Kernel,完成編譯後的 Kernel Image 將會包含 Bridge。

此時我們還要準備在 user-space 的 tool,這邊使用的是 bridge-utils,可以用來完成 bridging 功能的開啟與設置。如果是要放置於 embedded system platform 上,可以在 cross-compile 之後,把 tool 配置到將要放到 embedded system 上的 root filesystem 裡。

– 如何使用

在 root 權限下,我們要先創建一個 virtual bridge interface,

root@user #> brctl addbr br0

如果不需要 spanning tree protocol,可以採用以下的命令,

root@user #> brctl stp br0 off

然後將兩個 network interface 橋接,

root@user #> brctl addif br0 eth0

root@user #> brctl addif br0 eth1

此時,eth0 和 eth1 便建立起了 bridge。

這裡看似簡單的設定,實際上,在 Linux Kernel 的實作中,Bridge 位在 TCP/IP Protocol Stack 架構中,其背後有一連串的流程,架構圖上雖不算太複雜,但要對整體的 code 有所理解,也需要花點時間去 trace 過才會清楚,對整個 protocol stack 有興趣的朋友,很適合從這邊切入去看看 Linux kernel 的 source code。

發佈留言