移除已安裝過的 hostapd
執行底下的指令來移除
sudo apt-get autoremove hostapd
下載 RTL8192CU 的 source
EW-7811Un 用的是「RTL8192CU」, Realtek 的網站中有提供 Linux 的 source,它是一個 .zip 檔案,我們先將它下載到 Raspberry Pi 中,下載頁面的網址如下:
找「RTL8192CU」中「Unix (Linux)」的,將下載的檔案放到 Raspberry Pi 中。
解壓縮
下載回來的 .zip 檔案裡面包山包海,我們的目標是找到「hostapd」。我下載回來的檔案檔名為「RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip」,所以先利用 unzip (工具自行安裝)來解壓縮,執行底下指令:
unzip RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip解壓縮完,會多一個目錄名稱為「RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105」,裡面有個叫「wpa_supplicant_hostapd」目錄,我們要的 hostapd 放在該目錄中的壓縮檔案,哈!好像在拆禮物一樣。先切換進目錄中找檔案,執行:
cd RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105/wpa_supplicant_hostapd
裡面有個檔案檔名為「wpa_supplicant_hostapd-0.8_rtw_20120803.zip」,將它解壓縮,執行:
unzip wpa_supplicant_hostapd-0.8_rtw_20120803.zip
解壓縮完,多了一個名稱為「wpa_supplicant_hostapd-0.8」的目錄,裡面有個名稱為「hostapd」的目錄,這就是我們的主角,二話不說,當然要切換進該目錄囉!執行:
cd wpa_supplicant_hostapd-0.8/hostapd
這樣就可以準備開始編譯程式了。
編譯與安裝 hostapd
在 hostapd 目錄中,我們執行底下的指令來編譯:
make
如果順利編譯完,用面的指令來安裝
make install
程式會被安裝到 /usr/local/bin 目錄中,接下來就可以按照一般如何設置 wireless AP 的程序來進行設定了。
讓 Raspberry Pi 變 Wireless AP
前面解決 EW-7811Un 「水土不服」的問題,接下來要處理:
- 無線網路改用固定 IP。
- 提供 DHCP 服務,讓 clients 在無線網路連線後可以自動取得 IP。
- 設定 hostapd ,讓 Raspberry Pi 接受其它 clients 的連線。
- 設定 NAT,讓 clients 可以連到外面的網路。
無線網路使用固定 IP
有關網卡的設定,我們只要修改「/etc/network/interfaces」即可,所以我們執行底下的指令來修改:
sudo nano /etc/network/interfaces
找到無線網路的設定,把類似底下的設定
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
先註解掉(加上井字號),將這兩行改為:
#iface wlan0 inet manual然後加上固定 IP 的設定:
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet static
address 192.168.3.100
netmask 255.255.255.0
上面把無線網卡設為:
- 固定的 IP (static)。
- 使用「192.168.3.100」的 IP 。
- 遮罩用「255.255.255.0」。
改好設定後,如果想讓它馬上生效,可以執行底下的指令:
sudo ifdown wlan0
sudo ifup wlan0
設置 DHCP server
可以當 DHCP server 的程式有很多,這裡選用 udhcpd。先執行底下的指令來安裝:
sudo apt-get install udhcpd
安裝完,依個人需求修改設定檔「/etc/udhcpd.conf」,我改了範例中的幾個選項:
- 可配發的第一個 IP:start 192.168.3.101
- 可配發的最後一個 IP:end 192.168.3.200
- 提供服務給哪一張網卡:interface wlan0
- clients 的 DNS 設定:opt dns 8.8.8.8 4.2.2.2
- clients 的 netmask 設定:option subnet 255.255.255.0
- clients 的 default gateway 設定,設為 Raspberry Pi 無線網卡的 IP:opt router 192.168.3.100
如果要馬上啟動 DHCP server,我們得先修改「/etc/default/udhcpd」,執行:
sudo nano /etc/default/udhcpd
然後將「DHCPD_ENABLED」設為「yes」:
DHCPD_ENABLED="yes"
修改好儲存,執行底下的指令來啟動服務:
sudo service udhcpd start
設置 hostapd
一般會把 hostapd 的設定檔路徑是「/etc/hostapd/hostapd.conf」,所以我們執行底下指令來新增或修改:
sudo nano /etc/hostapd/hostapd.conf
貼一下設定的內容供參考:
# Basic configuration
interface=wlan0
ssid=pi
channel=1
#bridge=br0
# WPA and WPA2 configuration
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=YourPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# Hardware configuration
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek
「ssid」那行是我們想讓 clients 看到的名稱,而「wpa_passphrase」那行是 clients 連線時所需要的密碼,依個人需要設定。其它的設定再自行參考網路上有關 hostapd.conf 的說明。
馬上來測試 hostapd 是否能正常運作,能不能當 Wireless AP 就看它了。先執行底下的指令來修改「sudo nano /etc/default/hostapd」:
sudo nano /etc/default/hostapd
修改「DAEMON_CONF」那行,指定要使用的設定檔路徑為「/etc/hostapd/hostapd.conf」,改為:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
儲存好後,我們就可以啟動 hostapd 的服務了,執行:
sudo service hostapd start
[註] 如果像我因為設定檔沒設好,導致 hostapd 啟動失敗,而執行上述指令又看不到錯誤訊息,則建議暫時執行底下的指令來測試:
sudo hostapd /etc/hostapd/hostapd.conf
設置 NAT 服務
有了 udhcpd 及 hostapd 所提供的服務,應該可以讓手持裝置或是電腦透過無線網路來連上 Raspberry Pi ,並取得 IP 了。最後還是設定 NAT 的部份,讓 clients 能夠用 NAT 來偽裝成 Raspberry Pi 另一個網路介面的 IP 來對外連線。當然,還有另外一個方式是用 bridge 的方式,這裡就先不討論。
我們可以利用 iptable 來提供 NAT 的服務,執行底下的指令:
sudo iptables -A INPUT -i wlan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
- 第一行先將 wlan0 設為接受所有的封包。
- 第二行則是將所有來自無線網路的 IP「192.168.3.0/24」(必須依 wlan0 的設定自行修改),通通以 eth0 的身份進行 NAT 偽裝。
- 第三行是讓 Raspberry Pi 能夠扮演 gateway 的角色,幫忙轉封包。
最方便的當然是將它們寫成 script ,這樣就不用每次都做重覆同樣的事。
下面來看看用 iPad 連線的結果:
相關文章
太厲害了
回覆刪除依設定動作OK, 請問我eth0 -> 192.168.1.110, wlan0->192.168.2.1, wlan0 分享範圍為 192.168.2.200 ~ 210,
回覆刪除我想從 192.168.1.110 連至 192.168.2.200或201 要如何設定 ?
在設置 hostapd
回覆刪除一般會把 hostapd 的設定檔路徑是「/etc/hostapd/hostapd.conf」,所以我們執行底下指令來新增或修改:
為什麼我的PI /etc資料夾裡面沒有hostapd這一個資料