家裡的無線存取設備使用 ISP 業者的,距離這個無線基地台 (Wireless Access Point, 簡稱 AP) 較遠的房間訊號就不好,想說要再買一個新的 AP,也不知效果好不好,就先使用 Raspberry Pi 架設一個無線基地台,當作是延伸點,看看效果好不好。
要架設無線基地台,需安裝 hostapd 這套軟體,並且安裝 DHCP 服務,配發 IP給來連線的裝置,這樣就可以成為一部 Wireless AP。下圖是我的筆記型電腦使用無線網路連至 Raspberry Pi的無線 AP後,開啟 Raspberry Pi網站的畫面:
• USB 無線網路卡 x 1
2.修改 DHCP 設定檔
依照右側的說明調整修改:
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 設定檔:
將以下這行加上註解不執行:
DHCPD_ENABLED="no"
改成
#DHCPD_ENABLED="no"
修改網路設定 interfaces 檔,將無線網卡 wlan0由 DHCP 改成靜態固定 IP:
再設定檔內加上以下幾行:
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 設定檔:
增加以下幾行:(如果找不到檔案可以新建立一個名為 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 :
增加以下幾行:
interface=wlan0
ssid=My_AP
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0
接著修改預設 hostapd 設定:
找到這一行:
#DAEMON_CONF=""
將其變更為:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
4. 設定 NAT (Network Address Translation):
NAT 的技術是允許多部裝置使用同一個連線到 internet,Linux 使用 Netfilter (也就是一般所知的 iptables)。首先,我們允許 IP 在 kernel 中允許轉發(forwarding):
如果要設定開機時自動啟動,可以修改 sysctl.conf :
將以下這行加在檔案最後面:
net.ipv4.ip_forward=1
其次,要讓 NAT 在 kernel 中正常運作,執行以下指令:
如果要在開機後,不想輸入上述幾行指令,可以執行下列,將設定存檔:
修改網路設定檔 /etc/network/interfaces :
將以下這行加到檔案最後面:
up iptables-restore < /etc/iptables.ipv4.nat
執行以下指令來啟動無線 AP:
如果要在 Raspberry Pi 開機時,就啟動 hostapd 服務,可以執行以下兩行指令:
如果不想以服務方式執行程式,可以執行以下指令:
------------------ 分 ---------- 隔 --------- 線------------------------------------
到這裡,理論上應該可以正常啟動無線 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 移除:
再到以下網站下載 RTL8188 版本的 hostapd 並解壓縮:
接著開始編譯程式,並進行安裝:
重新啟動 hostapd 服務:
發現 /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 使用。
總之,要用 Raspberry Pi 2 B來作為無線 AP 仍有點困擾,不如去買個小型的無線 AP方便,但也瞭解到 Raspberry Pi 只要硬體能力提升後,應該可以作為許多不同用途應用。
• Jens Segers:https://jenssegers.com/43/realtek-rtl8188-based-access-point-on-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
張貼留言