1. 程式人生 > >樹莓派開發系列教程——樹莓派做wifi熱點

樹莓派開發系列教程——樹莓派做wifi熱點

原理:Pi使用有線連入網路,然後接USB無線網絡卡作為熱點,提供Wifi接入。


1、USB無線網絡卡驅動

如果接上USB無線網絡卡,使用ifconfig命令,能直接看到wlan0,那麼恭喜你,可以直接跳過這一步。

如果沒有請查詢一下樹莓派支援的USB無線網絡卡型號,可參考以下網址:

http://elinux.org/RPi_VerifiedPeripherals#USB_Wi-Fi_Adapters

2、修改wlan0為靜態IP

相當於設定路由器lan口IP,即我們訪問路由器通常使用的:192.168.1.1

sudo vim /etc/network/interfaces
把原來關於wlan0的註釋掉:
(可能跟這個不一樣,跟wlan0有關的註釋掉即可)
#auto wlan0
#iface wlan0 inet dhcp
#wpa-ssid "360WiFi-li"
#wpa-psk "xiaolizi"

新增下面的:
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0

gateway 192.168.0.1

完成之後需要重啟

3、安裝hostapd

官方的hostapd不支援8188CUS,後面需要重新解除安裝安裝新的

筆者測試貌似這裡必須先裝舊的,然後後面卸了裝新的,否則也不能用

sudo apt-get install hostapd

1)編輯hostapd 預設配置檔案:

sudo vim /etc/default/hostapd

找到#DAEMON_CONF= "",修改為:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

2)然後編輯:sudo vim /etc/hostapd/hostapd.conf

增加以下程式碼:

  1. # Basic configuration
  2. interface=wlan0  
  3. ssid=raspberrywifi  
  4. channel=1  
  5. #bridge=br0
  6. # WPA and WPA2 configuration
  7. macaddr_acl=0  
  8. auth_algs=1  
  9. ignore_broadcast_ssid=0  
  10. wpa=3  
  11. wpa_passphrase=12345678  
  12. wpa_key_mgmt=WPA-PSK  
  13. wpa_pairwise=TKIP  
  14. rsn_pairwise=CCMP  
  15. # Hardware configuration
  16. driver=rtl871xdrv  
  17. ieee80211n=1  
  18. hw_mode=g  
  19. device_name=RTL8192CU  
  20. manufacturer=Realtek  

修改wifi名和密碼

ssid=raspberrywifi

wpa_passphrase=12345678

3)儲存退出,然後重啟服務:
sudo service hostapd restart
或者執行以下命令生效
sudo hostapd -dd /etc/hostapd/hostapd.conf

4)如果你使用的網絡卡提示一下資訊

Configuration file: /etc/hostapd/hostapd.conf
nl80211: 'nl80211' generic netlink not found
Failed to initialize driver 'nl80211'
rmdir[ctrl_interface]: No such file or directory

那麼,還是要使用第三方的hostapd。

4、安裝新的hostapd

1)刪除原來的hostapd(筆者測試,不解除安裝貌似也行)
sudo apt-get autoremove hostapd
2)下載第三方驅動並安裝

wget https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz

tar -zxvf v1.1.tar.gz

3)編譯:

cd RTL8188-hostapd-1.1/hostapd

sudo make
sudo make install

4)然後再重啟服務,應該提示成功:

$ sudo service hostapd restart

[ ok ] Stopping advanced IEEE 802.11 management: hostapd.

[ ok ] Starting advanced IEEE 802.11 management: hostapd.

5)將hostapd加入開機自啟動

sudo service hostapd start

sudo update-rc.d hostapd enable


筆者這裡提示的還是失敗,但是重啟後網路確實建立成功,用手機可以搜到這個網路

5、安裝DHCP服務

以上步驟建立起了wifi熱點,但是無法自動獲取ip,需要以下步驟

sudo apt-get install udhcpd

1)編輯配置檔案:
sudo vim /etc/udhcpd.conf //修改以下資訊,start和end是重點,注意跟第一步的靜態ip在一個網段
start 192.168.0.20
end 192.168.0.200
interface wlan0

2)接下來編輯/etc/default/udhcpd並且將下面這行註釋掉,以使DHCP Server正常工作:

#DHCPD_ENABLED="no"

3)啟動dhcp伺服器

sudo service udhcpd start

sudo update-rc.d udhcpd enable

經過此步手機已經可以接入wifi網路,並且自動獲取ip

6、配置路由轉發

理論上是經過這一步,手機可以通過共享樹莓派的無線網路上網了,但是筆者一直沒有成功

1)設定路由對映規則
sudo iptables -F
sudo iptables -X

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 bash -c iptables-save > /etc/iptables.up.rules

2)編輯:sudo vim /etc/network/if-pre-up.d/iptables

新增下面兩行程式碼:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

儲存退出,然後修改iptables許可權:
sudo chmod 755 /etc/network/if-pre-up.d/iptables
4)開起核心轉發:
sudo vim /etc/sysctl.conf
  找到下面兩行:
#Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
把net.ipv4.ip_forward 前面的#去掉,儲存退出。

  然後:sudo sysctl -p

7、其它問題

最近經常發現無線網絡卡配置的DHCP不能發揮作用,經過排查發現給無線網絡卡指定的靜態IP失敗了,也就是說無線網絡卡沒有IP導致DHCP無法工作,將/etc/default/ifplugd的內容修改配置如下:

INTERFACES="eth0"

HOTPLUG_INTERFACES="eth0"

ARGS="-q -f -u0 -d10 -w -I"

SUSPEND_ACTION="stop"