2015年3月5日 星期四

[ARM] Install SoftAP on RPi - part I

[ 功能介紹 ]
使用一 Wi-Fi USB讓 Raspberry Pi 具備無線基地台功能,並且與現有網路 (eth0) 進行串接




[ 事前準備 ]
Raspberry Pi Type B / B+    (Raspbian)
USB 無線網卡, Edimax EW-7811Un。
內建的 Ethernet 為 eth0 負責對外連線,而 Wifi 為 wlan0 負責對內連線。


[ 操作步驟 ] (#1)
1. 下載 RTL8188CUS 的 Linux 驅動程式及工具
打開瀏覽器,打開 Realtek 官網 下載 RTL8188CUS 的 Linux 驅動程式及工具,位置在「下載中心」-「Wireless LAN ICs」-「WLAN NIC」-「 IEEE 802.11b/g/n Single-Chip 」-「Software」。

2. 將檔案解壓縮。
unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip

3. 編譯 hostapd
進入 RTL8188C 裡面的 hostapd 目錄,再將 hostapd 主程式解壓縮。
cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/ 
tar zxvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz

開始編譯並安裝 hostapd 主程式。
cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd
make clean && make && sudo make install

將 hostapd 相關檔案複製到它對應的目錄。
sudo cp /usr/local/bin/hostapd* /usr/sbin

4. 編譯 iw tools
切換到 wireless 工具程式目錄,準備將它解壓縮。
cd ../../../wireless_tools
tar zxvf wireless_tools.30.rtl.tar.gz

同樣也需要重新編譯及安裝。
cd wireless_tools.30.rtl
make clean && make && sudo make install

5. 安裝 dnsmasq (#2)
DNSMASQ 是一個小型的複合功能套件,提供了 DNS、DHCP、BOOTP 及 PXE 等功能,同時支援 IPv4 及 IPv6。
安裝主程式。
sudo apt-get -y install dnsmasq

6. 編輯 dnsmasq 設定檔。
sudo vi /etc/dnsmasq.conf
########## 我是分隔線 ##########
# 全域設定
resolv-file=/etc/resolv.dnsmasq
min-port=49152
server=8.8.8.8
server=168.95.192.1
cache-size=10000
interface=wlan0

# DHCP 設定
dhcp-range=192.168.1.101,192.168.1.150,255.255.255.0,8h
dhcp-option=1,255.255.255.0 
dhcp-option=3,192.168.1.1
dhcp-option=6,192.168.1.1,8.8.8.8,168.95.192.1
dhcp-authoritative
########## 我是分隔線 ##########

複製 resolv.conf 的內容,建立 resolv.dnsmasq 新檔案。
sudo cp /etc/resolv.conf /etc/resolv.dnsmasq

編輯 resolv.dnsmasq,第一行改成本機的 IP。
sudo vi /etc/resolv.dnsmasq
nameservice 127.0.0.1

7. 設定為路由模式
路由模式需要 DHCP Server 讓 WIFI Client 取得 IP 設定,請先依照 Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server 的步驟實作完成。

避免無線網卡 wlan0 被作業系統自動啟用。
sudo vi /etc/default/ifplugd
找到 INTERFACES 及 HOTPLUG_INTERFACES,從 auto 改成 eth0。

修改無線網路卡的設定值,設定一個指定的靜態 IP 位址。(※1)
sudo vi /etc/network/interfaces
########## 我是分隔線 ##########
auto lo

iface lo inet loopback
iface eth0 inet dhcp

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0
########## 我是分隔線 ##########

不論我們是否曾經依照 Raspberry Pi 的基礎 - 使用 WIFI 無線網卡連上網路 的步驟,讓 Raspberry Pi 直接用無線網卡上網的話,都必須把原本的 wlan0 設定值註解掉。

啟用封包轉送 (IP Forward) 的功能。
sudo vi /etc/sysctl.conf
找到 et.ipv4.ip_forward=1,刪除開頭的「#」註解符號。

啟用 NAT 的功能。
sudo iptables -F
sudo iptables -F -t nat
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

儲存目前的 iptables 設定值。
sudo bash -c 'iptables-save > /etc/network/iptables'
sudo iptables-restore < /etc/network/iptables

設定開機時的自動啟動巨集,讓 iptables 的規則自動被載入。
sudo vi /etc/rc.local
在最後一行 "exit 0" 的上一行,加入 "sudo iptables-restore < /etc/network/iptables"


8. 啟動熱點功能
建立 hostapd 主設定檔。
sudo vi /etc/hostapd/hostapd.conf

Driver 是無線網卡的驅動程式,如果晶片不是 Realtek RTL8188CUS,別忘了要修改。 
SSID 是基地台的自訂名稱。
Channel 是無線通訊的頻道,從 1 到 11,通常會設定為 1、6、11 的其中一個。
WPA 是加密協定,1 是 WPA,2 是 WPA2。
WPA_PassPhrase 是基地台的自訂密碼。
########## 我是分隔線 ##########
interface=wlan0
driver=rtl871xdrv
bridge=br0
ssid=RPi-AP
channel=6
hw_mode=g
ieee80211n=1
wmm_enabled=1
wpa=2
wpa_passphrase=RPi-Pa$$w0rd
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0 
########## 我是分隔線 ##########

編輯 hostapd 服務設定檔。
sudo vi /etc/default/hostapd
找到 #DAEMON_CONF=,改成 DAEMON_CONF="/etc/hostapd/hostapd.conf"

9. 啟動服務。 (※2)
sudo service dnsmasq restart
sudo service hostapd restart

10. 開機時自動啟動服務。
sudo update-rc.d dnsmasq defaults
sudo update-rc.d hostapd defaults

11. 重新啟動
sudo reboot

12. 無線網路會多出一個 RPi-AP,連線成功表示 hostapd、dnsmasq 功能正常

13. 測試連線
測試內部連線 ping 192.168.1.1
測試外部連線 ping 8.8.8.8 


[ Note ]
※1:內網區段需要分開
假設 eth0 走 192.168.0.x,則 wlan0 則要設定成其他網段 (Ex: 192.168.1.1)

※2:啟動服務時,若無錯誤則該功能正常運作


[ Ref ]
#1> Raspberry Pi 的應用 - Wifi 無線基地台
#2> Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server

沒有留言: