Raspberry Pi 筆記(28):架設無線基地台 Wireless Access Point

家裡的無線存取設備使用 ISP 業者的,距離這個無線基地台 (Wireless Access Point, 簡稱 AP) 較遠的房間訊號就不好,想說要再買一個新的 AP,也不知效果好不好,就先使用  Raspberry Pi 架設一個無線基地台,當作是延伸點,看看效果好不好。

要架設無線基地台,需安裝 hostapd 這套軟體,並且安裝 DHCP 服務,配發 IP給來連線的裝置,這樣就可以成為一部 Wireless AP。下圖是我的筆記型電腦使用無線網路連至 Raspberry Pi的無線 AP後,開啟 Raspberry Pi網站的畫面:

[材料]

• Raspberry Pi 2 Model B x 1
• USB 無線網路卡 x 1

[安裝程序]

1.安裝所需要的軟體
$ sudo apt-get install hostapd udhcpd

2.修改 DHCP 設定檔
$ sudo nano /etc/udhcpd.conf

依照右側的說明調整修改:
start 192.168.2.2                         # 配發給申請裝置的IP範圍
end 192.168.2.20
interface wlan0                          
remaining yes
opt dns 168.95.1.1 168.95.192.1   # 終端設備使用的 DNS IP
opt subnet 255.255.255.0
opt router 192.168.2.1                 # 這是 Pi 的 wlan0 IP 位址
opt lease 864000                          # DCHP配發的租用期限

修改預設 udhcpd 設定檔:
$ sudo nano /etc/default/udhcpd

將以下這行加上註解不執行:
DHCPD_ENABLED="no"
改成
#DHCPD_ENABLED="no"

修改網路設定 interfaces 檔,將無線網卡 wlan0由 DHCP 改成靜態固定 IP:
$ sudo nano /etc/network/interfaces

再設定檔內加上以下幾行:
iface wlan0 inet static
  address 192.168.2.1
  netmask 255.255.255.0

將以下幾行最前面加上 #
# allow-hotplug wlan0
# wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
# iface default inet dhcp

3.修改 hostapd 的設定:
一般無線網路可以設定為開放的存取,不需輸入無線 AP 的存取密碼,但為了避免遭受有心人士利用作為非法用途,還是建議設定為 WPA的安全網路。如果要設定 WPA 安全網路,修改 hostapd.conf 設定檔:
$ sudo nano /etc/hostapd/hostapd.conf

增加以下幾行:(如果找不到檔案可以新建立一個名為 hostapd.conf 的檔案)
interface=wlan0
driver=nl80211
ssid=rpi-ap
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MyAPPassphrase
wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP # TKIP的加密機制較弱,建議不要使用
rsn_pairwise=CCMP

修改 SSID,這是無線 AP的名稱
修改 Channel,這是使用哪種頻率進行連線,可設定 1、6或11,不可使用 12-13
修改 wpa_passphrase,這是連到無線 AP 時,需要輸入的密碼。

如果要安裝成開放網路,不需輸入無線 AP 密碼,可以修改 hostapd.conf :
$ sudo nano /etc/hostapd/hostapd.conf

增加以下幾行:
interface=wlan0
ssid=My_AP
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

接著修改預設 hostapd 設定:
$ sudo nano /etc/default/hostapd

找到這一行:
#DAEMON_CONF=""
將其變更為:
DAEMON_CONF="/etc/hostapd/hostapd.conf"

4. 設定 NAT (Network Address Translation):
NAT 的技術是允許多部裝置使用同一個連線到 internet,Linux 使用 Netfilter (也就是一般所知的 iptables)。首先,我們允許 IP 在 kernel 中允許轉發(forwarding):
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

如果要設定開機時自動啟動,可以修改 sysctl.conf :
$ nano /etc/sysctl.conf

將以下這行加在檔案最後面:
net.ipv4.ip_forward=1

其次,要讓 NAT 在  kernel 中正常運作,執行以下指令:
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

如果要在開機後,不想輸入上述幾行指令,可以執行下列,將設定存檔:
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

修改網路設定檔 /etc/network/interfaces :
$ sudo nano /etc/network/interfaces

將以下這行加到檔案最後面:
up iptables-restore < /etc/iptables.ipv4.nat

執行以下指令來啟動無線 AP:
$ sudo service hostapd start
$ sudo service udhcpd start

如果要在 Raspberry Pi 開機時,就啟動 hostapd 服務,可以執行以下兩行指令:
$ sudo update-rc.d hostapd enable
$ sudo update-rc.d udhcpd enable

如果不想以服務方式執行程式,可以執行以下指令:
$ sudo hostapd /etc/hostapd/hostapd.conf 


------------------ 分 ---------- 隔 --------- 線------------------------------------

到這裡,理論上應該可以正常啟動無線 AP,可是我在搜尋網路時,卻無法看到無線 AP 的名稱,手動執行 hostapd 卻發生無法啟動 nl80211 的錯誤:

Configuration file: /etc/hostapd/hostapd.conf
nl80211: 'nl80211' generic netlink not found
Failed to initialize driver 'nl80211'

心想應該是無線網卡無法載入 nl80211 的關係,我的無線網卡型號是 TP-LINK  wn725n,啟動時,需用到 8188eu.ko,如果改用 8188eu 或許可行,但結果還是不行。

Google 一下有沒有人遇到相同的問題,結果 Jens Segers 的一篇貼文 Realtek RTL8188 based access point on Raspberry Pi,解決我的問題,主要還是驅動程式的關係,要改用 RTL8188 版本的 hostapd 才行。以下說明如何進行安裝:

首先,將原先安裝的 hostapd 移除:
$ sudo apt-get autoremove hostapd

再到以下網站下載 RTL8188 版本的 hostapd 並解壓縮:
$ wget https://github.com/jenssegers/RTL8188-hostapd/archive/v2.0.tar.gz
$ tar -zxvf v2.0.tar.gz

接著開始編譯程式,並進行安裝:
$ cd RTL8188-hostapd-2.0/hostapd
$ sudo make
$ sudo make install

重新啟動 hostapd 服務:
$ sudo service hostapd restart

發現 /etc/hostapd/hostapd.conf 檔案內容最後多了以下幾行:

# Hardware configuration
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek

這時,從我 Windows 的無線網路或手機,就可看到無線 AP 的名稱 rpi-ap :

多試幾次連線,常會發生以下連線失敗的情況,可能是因為Raspberry Pi 處理能力的關係。

除了效能不佳外,在重新啟動 Raspberry pi後,常發生無法自動啟動無線網卡的情況,wlan0沒有取得配置的IP:

必須手動執行以下幾個指令,Raspberry Pi 就可正常當作無線 AP 使用。
$ sudo ifdown wlan0
$ sudo ifup wlan0
$ sudo hostapd /etc/hostapd/hostapd.conf 

總之,要用 Raspberry Pi 2 B來作為無線 AP 仍有點困擾,不如去買個小型的無線 AP方便,但也瞭解到 Raspberry Pi 只要硬體能力提升後,應該可以作為許多不同用途應用。

[參考資料]

• elinux.org:RPI-Wireless-Hotspot
• Jens Segers:https://jenssegers.com/43/realtek-rtl8188-based-access-point-on-raspberry-pi

Post a Comment

較新的 較舊