Bridge-mode and Router-mode

透過 OpenWRT 設定檔更改 WiFi AP 的運作模式

在一般的 WiFi 設定中,WiFi AP 扮演的角色同時是無線接取點 (WLAN) 與路由器 (Router),換句話說,WiFi AP 管理一個 LAN (通常同時和WLAN 相連),分配 LAN 中上網裝置的 IP (DHCP),並處理 LAN 和 WAN 之間的連線對應 (NAT)。

這樣的架構稱為 Router-mode 的配置,對於一般家庭來說沒有問題,但是如果對於一個需要多個 AP 偕同工作的環境來說,就容易造成限制。舉例來說,考慮到移動性的換手問題,假如每個裝置的 IP 都是由 WiFi AP 所給予,就算把子網域的設定相同,在轉換 WiFi AP 時仍需要進行重新的認證。

因此,對於這樣的應用環境,就出現了另一種的配置,稱為 Bridge-mode,在此配置下,WiFi AP 只是 LAN 的一個無線網路延伸,所有關於 LAN 網路的控管,都在 WiFi AP 之外的路由器進行處理。WiFi AP 只處理基本的無線網路加密以及接取控制。

在這篇文章中,主要說明該如何更改 OpenWRT 設定,將預設的 Router-mode 更改成 Bridge-mode。以下內容參考下列連結:

有線網路的設定

有線網路的設定主要在:/etc/config/network中。

在原始的 OpenWRT 設定中,LAN 和 WAN 分屬於不同的 VLAN (請參考 VLAN 的設定),以此確保兩邊網路的封包分離。因此對於 Bridge-mode 而言,首先就是要把 LAN 和 WAN 的封包串在一起,設定檔如下所示 (只列出相關部分):

config interface 'lan'
        option type 'bridge'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ifname 'eth0.1 eth0.2'
        option ipaddr '192.168.1.32'
        
config interface 'wan'
        option proto 'dhcp'
        option metric '10'
                
config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '2 3 0t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '1 0t'

在設定中,我們可以看到 LAN 同時接上兩張虛擬網卡 (eth0.1eth0.2),分別對應於兩個 VLAN。而原本 WAN 的設定介面則沒有對應的虛擬網卡設定。

之後,記得把 DHCP 的服務關閉,可以透過下列指令:

/etc/init.d/dnsmasq disable
/etc/init.d/dnsmasq stop

無線網路的設定

有線網路的設定主要在:/etc/config/wireless中。

接下來,確認一下無線網路所綁定的網路設定,確定其網路附屬於 LAN 的設定下:

config wifi-device 'radio1'
        option type 'mac80211'
        option hwmode '11g'
        option path 'platform/qca956x_wmac'
        option txpower '20'
        option noscan '1'
        option htmode 'HT40'
        option band '2G'
        option disabled '0'
        option channel '6'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option encryption 'psk-mixed'
        option wds '1'
        option ifname 'wlan1'
        option ssid 'SSID-here'
        option key 'password'

加入 WiFi AP 本身連線的功能

以上內容,大概是 OpenWRT 官方教程中的內容,主要參考:

不過,按照此設定,會發現 WiFi AP 本身無法對外連線 (連上的無線裝置沒問題),這樣一來,opkg 等許多方便的 OpenWRT 工具就無法使用。經過一系列的測試,發現這是因為 routing table 和 DNS 設定的問題,必須做以下的設定:

root@GL-AR750S:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
ping: sendto: Network unreachable
root@GL-AR750S:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 br-lan
root@GL-AR750S:~# route add default gw 192.168.1.1
root@GL-AR750S:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 br-lan
192.168.1.0     *               255.255.255.0   U     0      0        0 br-lan
root@GL-AR750S:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=51 time=4.103 ms
64 bytes from 8.8.8.8: seq=1 ttl=51 time=3.987 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 3.987/4.045/4.103 ms

此處的設定主要是在 Linux 的 routing table 下,加入一個預設的 Gateway 位址。考慮到我們在上述設定時,WiFi AP 的 IP 取得,是透過靜態 IP 設定,並沒有進一步設定 Gateway 的資訊,因此需要手動輸入。

在 Linux 系統下,當可以 ping 到同網域的 IP 位址,卻 ping 不到外部 IP 時,routing table 是第一個該檢查的地方。可以先看看 routing table 中有沒有 default 的敘述。

另一方面,DNS 伺服器的位址也需要設定,如下指令:

root@GL-AR750S:~# cat /etc/resolv.conf
search lan
nameserver 8.8.8.8

設定完後,WiFi AP 應該就可以擁有連網功能,並可以透過 opkg 等功能,進行套件更新與程式的開發。

Last updated