在 Linux 上設置無線橋接器

在外租房子時,寬頻網路可說是基本的設施,許多房東也提供了 IP 分享器。然而並非所有的房東都提供無線網路基地台(AP),對於手機或平版電腦來說相當不便。

若這時候有一台同時俱備線網路與無線網路的電腦,就可以籍由橋接器的方式,架設一個連接有線網路的 AP。這篇文章將介紹如何在 Linux 下設定這樣的 wireless 橋接器。

橋接器

無線橋接架構

所謂橋接器是在連結層(Link Layer)上連接兩個網路的裝置。有別於路由器(Router),橋接器只是直接轉送兩邊的封包,亦即把兩個網路的集合視為一個更大的區域網路,因此一些主要用在區域網路的服務--比如說網路芳鄰,不需修改設定就可以分享到另一個網路上。當然橋接器能連結的網路大小是有上限的,不過對於家用網路來說已是綽綽有餘。

這樣的橋接方式不可行

需要注意的是,如果你想要用橋接器把有線網路上的裝置連上無線 AP,通常會遇到一些麻煩,因為大部份的無線 AP 會過濾 MAC address 以拒絕未認證的裝置,而有線網路上的裝置並未直接連上 AP,因此它們的封包會被 AP 無視。若想透過這種方式橋接,請參考 Debian Wiki 上的 Bridging Network Connections 中,關於 etables 的設定。

前置工作

Kernel

首先,你的 kernel 要打開橋接功能,這個功能位於 Networking → 802.1d Ethernet Bridging。大部份 Linux distribution 所附的 kernel 應該都有打開這項功能。

軟體

接著我們要安裝橋接器設定工具 bridge-utils,在 Debian 上可以透過 apt 安裝:

1
root:~# apt-get install bridge-utils

我們的目的是把無線網路橋接上有線網路,並利用有線網路與外部連接。這種情況下橋接器同時身兼無線 AP,因此也要安裝 AP server。

1
root:~# apt-get install hostapd

設定

設定橋接介面

首先我們要建立一個橋接器介面,這是虛擬出來的網路卡介面:

1
root:~# brctl addbr br0

連結有線網路與無線網路的方法很簡單:把要連結的網路卡介面加進橋接器介面即可。

1
root:~# brctl addif br0 eth0 wlan0

通常呢,這時候你會看到「Operation not supported」的錯誤訊息,因為 Linux kernel 不允許無線網路以 managed mode 進行橋接。但我們等下就會設定 hostapd 讓無線網路進入 master mode,因此這個錯誤暫時無視即可。

設定 hostapd

Hostapd 的設定檔通常是 /etc/hostapd/hostapd.conf,安裝時會附上一個相當完整的設定檔,用那個來稍作修改即可。

需要修改的是下列幾個選項:

  • interface:作為 AP 的無線網路的介面。
  • bridge:要加入的橋接器介面。
  • driver:無線網路的驅動程式種類。並非所有的無線網路卡在 Linux 下都能當 AP 使用,這還需要驅動程式支援才行。至於這個欄位要填什麼值就得去看無線網路卡種類,反正能填的選項不多,每個都試試就行了。
  • ssid:AP 的名稱
  • hw_mode:無線網路的模式,可選 a/b/g
  • channel:無線網路的頻道,儘量不要和附近的衝突。
  • wpa:啟用 WPA 加密傳輸,設為 3 即可支援 WPA 與 WPA2。
  • wpa_passphrase:連接 AP 的密碼,至少要八位英文或數字。你也可以用 wpa_psk 設定編碼後的密碼,但要注意若更改 ssid,編碼後的密碼也會跟著改變。

其它選項就讓它保持預設值,就可以啟動 hostapd 了。

1
root:~# service hostapd start

Hostapd 會自動把無線網路介面加到你所指定的橋接介面中,你可以用 brctl 來確認:

1
2
3
4
root:~# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.00012e3314b2 no eth0
wlan0

開機自動設定

若每次重開機都要重新執行上面的指令,肯定會得關節炎。我們可以把橋接介面的設定寫在網路設定檔中,在 Debian 上位於 /etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
11
12
auto eth0
iface eth0 inet manual
auto wlan0
iface wlan0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0 wlan0
address 192.168.1.250
gateway 192.168.1.1
...

這幾行的意思是開機時要自動啟用 eth0 與 wlan0,但不設定其 IP,而是把它們加入 br0 這個橋接介面,然後針對橋接介面設定 IP。

另外也得修改 /etc/default/hostapd 並消去註解,這樣開機時才會自動啟動 hostapd。

分享到 評論