雖然市面上很容易買的到迷你型的無線基地台,畢竟那還得另外帶著一個設備,而且還要考慮它的電源問題,倒不如直接用 Raspberry Pi 來模擬成 Wi-Fi 熱點,而且同時還可以提供其他的多種功能。
最後更新日期 - 2017/01/26
想要在 內建 Wi-Fi 的 Raspberry Pi 3 上面實作嗎?
請參閱 [Raspberry Pi 3] 多了WiFi,價格不變,輕鬆打造隨身無線基地台。
事前準備
- Raspberry Pi Type B / B+,Type A / A+ 無法實作,除非一次安裝兩張網卡。
- Raspbian 作業系統。
- USB 無線網卡,這裡用的是 Edimax EW-7811Un。
- 內建的 Ethernet 為 eth0 負責對外連線,而外接的 Wireless 為 wlan0 負責對內連線。
開始安裝
先測試一下系統是否已經偵測到無線網卡。
lsusb
我們需要安裝 hostapd 套件,讓無線網卡模擬成 Soft-AP。
sudo apt-get -y install hostapd
但是 hostapd 不支援這張無線網卡,所以我們先移除主程式,但保留相關的設定值,只需重新編譯主程式就可以了。
sudo apt-get -y remove hostapd
Reltek 官網已經不提供 Driver 下載,請改到 Edimax 官網下載。
wget http://www.edimax.com.tw/edimax/mw/cufiles/files/download/Driver_Utility/transfer/Wireless/NIC/EW-7811Un/EW-7811Un_Linux_driver_v1.0.0.5.zip
將檔案解壓縮。
unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
進入 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
切換到 wireless 工具程式目錄,準備將它解壓縮。
cd ../../../wireless_tools
tar zxvf wireless_tools.30.rtl.tar.gz
同樣也需要重新編譯及安裝。
cd wireless_tools.30.rtl
make clean && make && sudo make install
編譯及安裝的動作需要一些時間,先來杯咖啡休息一下吧 ..... ^_^
依 WAN 的來源選擇的服務模式
實作成 Access Point 有兩種模式可以選擇,請依現場實際的需求判斷。
- 橋接模式
適用於現有環境中已經有 IP 分享器、無線基地台或路由器在處理上網的服務,而我們只是希望使用 Raspberry Pi 來延伸現有的 Wi-Fi 訊號範圍或是提供原本不存在的 Wi-Fi 連線上網功能。
這個模式的重點是,透過 Raspberry Pi 的無線網卡連接上來的 Clients,會與現有環境中所有的 Clients 位於相同的 LAN 網段,也就是它們之間可以直接連線。
如果現有環境中沒有 DHCP Server 的話,請千萬不要使用橋接模式。
- 路由模式
適用於所有狀況,簡單的說,這就是把 Raspberry Pi 變成一個無線基地台,所以 Raspberry Pi 的有線 WAN Port 一定是直連路由器,也就是俗稱的小烏龜。
相對的,如果現有環境中已經有其他的 Clients 時,透過 Raspberry Pi 的無線網卡連接上來的 Clients,會與現有環境中所有的 Clients 位於不同的 LAN 網段,也就是它們無法直接互連。
設定為橋接模式
安裝網路橋接功能套件。
sudo apt-get -y install bridge-utils
修改無線網卡的設定值,加入橋接功能。
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
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0
########## 我是分隔線 ##########
不論我們是否曾經依照 Raspberry Pi 的基礎 - 使用 Wi-Fi 無線網卡連上網路 的步驟,讓 Raspberry Pi 直接用無線網卡上網的話,都必須把原本的 wlan0 設定值註解掉。
設定為路由模式
路由模式需要 DHCP Server 讓 Wi-Fi Client 取得 IP 設定,請先依照 Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server 的步驟實作完成。
避免無線網卡 wlan0 被作業系統自動啟用。
sudo vi /etc/default/ifplugd
找到 INTERFACES 及 HOTPLUG_INTERFACES,從 auto 改成 eth0。
修改無線網路卡的設定值,設定一個指定的靜態 IP 位址。
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.0.1
netmask 255.255.255.0
########## 我是分隔線 ##########
不論我們是否曾經依照 Raspberry Pi 的基礎 - 使用 WIFI 無線網卡連上網路 的步驟,讓 Raspberry Pi 直接用無線網卡上網的話,都必須把原本的 wlan0 設定值註解掉。
啟用封包轉送 (IP Forward) 的功能。
sudo vi /etc/sysctl.conf
找到 net.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」。
啟動熱點功能
建立 hostapd 主設定檔。
sudo vi /etc/hostapd/hostapd.conf
Driver 是無線網卡的驅動程式,如果晶片不是 Realtek RTL8188CUS,別忘了要修改。
SSID 是基地台的自訂名稱。
Channel 是無線通訊的頻道,從 1 到 11,通常會設定為 1、6、11 的其中一個。
WPA 是加密協定,1 是 WPA,2 是 WPA2。
WPA_PassPhrase 是基地台的自訂密碼。
詳細的設定值,請參閱 hostapd: IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator - hostapd configuration file。
########## 我是分隔線 ##########
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 hostapd -dd /etc/hostapd/hostapd.conf
運作正常的話會停在這個畫面,等待 Client 端來連線。
要停止的話,直接按 Ctrl+C 停止。
若是沒有出現錯誤訊息,就可以編輯 hostapd 服務設定檔。
sudo vi /etc/default/hostapd
找到 #DAEMON_CONF=,改成 DAEMON_CONF="/etc/hostapd/hostapd.conf"
啟動 hostapd 服務。
sudo service hostapd restart
讓 hostapd 開機時自動啟動。
sudo update-rc.d hostapd defaults
以上的步驟正確的執行完成後,重新開機即可生效。
sudo reboot
Client 連線實測
這邊我們用 iPhone 做為 Client 來實際連線測試。
在 iOS 上打開「設定」-「Wi-Fi」,就會顯示附近所有的基地台,這邊就會看到「RPi-AP」。
輸入我們在 hostapd 主設定檔裡的自訂密碼「RPi-Pa$$w0rd」。
終於完成了基地台的建置,iPhone 取得了正確的 IP 位址及相關設定值。
系列文章
- Raspberry Pi 的基礎 - 使用 Wi-Fi 無線網卡連上網路
- Raspberry Pi 的應用 - Wi-Fi 無線基地台
- Raspberry Pi 的應用 - 可以隱藏上網足跡的 Tor 洋蔥路由器
- Raspberry Pi 的應用 - 加快上網速度的 Squid 快取伺服器
參考資料
- Enjoy my life:敗家學習之旅之樹莓派(Raspberry Pi) Realtek WIFI AP 架設成功心得分享
- 點部落 majaja5125:Raspberry Pi AP (Access Point) 架設無線基地台
- 王晔的流水账:将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)
更新紀錄
- 2014/05/16 撰文。
- 2015/01/16 將橋接模式及路由模式分開,加入橋接模式的安裝過程畫面。
- 2015/01/19 調整了實作步驟的順序,並將 DHCP Server 的建置獨立為 Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server。
- 2015/01/20 加入路由模式的安裝過程畫面,並加入了實測連線的結果。
- 2017/01/26 修改 Driver 的下載位址。
你好, 很精采的文章.
回覆刪除最近也在玩Raspberry Pi, 有個問題想請教大大:
我想要的功能剛好跟大大這篇文章相反: 我的RPi有無線網卡, 目前連接家中的無線AP也都OK, 可是我想要的應用是在外地時, 能夠讓我的RPi透過iPhone的熱點(在不越獄的情況下)上網, 但不是透過USB連接熱點, 而是單純透過Wifi分享, 這樣有辦法做到嗎? 之前試過用Raspbian的WPA_Config GUI, 看的到iPhone HotSpot, 可是連不上, 目前不知如何解決
聽起來你只是要讓 RPi 透過 WIFI 連到 iPhone 的 3G / LTE 上網 ?!
回覆刪除1. iPhone 的個人熱點支援的協定是 WPA2,密碼要8碼以上。
2. 檢查 RPi 的 wpa_supplicant.conf 設定,可以參考
http://www.freebsd.org/cgi/man.cgi?wpa_supplicant.conf%285%29
重點是 SSID, PSK, PROTO, KEY-MGMT, PAIRWISE, GROUP 這幾個參數。
請問您這篇用的是
回覆刪除pi幾呢?
pi1
pi2 ??
當年用的是 Raspberry Pi 1 B ....^^
刪除success on raspberry pi 3
回覆刪除thank a lots
如果要同时设route 给eth1跟wlan0 该怎么设定?
回覆刪除谢谢
發現
回覆刪除位置在「下載中心」-「Wireless LAN ICs」
已經沒有了
剛剛去看了一下,Realtek 應該把 WLAN 的 Driver 全部拿掉了,
刪除那就到 Edimax 下載好了...
http://www.edimax.com.tw/edimax/download/download/data/edimax/tw/download/