原理:Pi 使用有線連入網絡,然後接 USB 無線網卡作爲熱點,提供 Wifi 接入。
USB 無線網卡驅動
如果接上 USB 無線網卡,使用 ifconfig 命令,能直接看到 wlan0,那麼恭喜你,可以直接跳過這一步。 如果沒有請查詢一下樹莓派支持的 USB 無線網卡型號,可參考以下網址: http://elinux.org/RPi_VerifiedPeripherals#USB_Wi-Fi_Adapters
修改 wlan0 爲靜態 IP
相當於設置路由器 wlan 口 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
完成之後需要重啓
安裝 hostapd
官方的 hostapd 不支持 8188CUS,後面需要重新卸載安裝新的, 測試時這裏必須先裝舊的,然後後面卸了裝新的,否則也不能用。
sudo apt-get install hostapd
編輯 hostapd 默認配置文件
sudo vim /etc/default/hostapd
找到 #DAEMON_CONF= "",修改爲:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
然後編輯sudo vim /etc/hostapd/hostapd.conf
增加以下代碼:
[ruby] view plaincopy
# Basic configuration
interface=wlan0
ssid=raspberrywifi
channel=1
#bridge=br0
# WPA and WPA2 configuration
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=12345678
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
修改WiFi 名和密碼
ssid=raspberrywifi
wpa_passphrase=12345678
保存退出,然後重啓服務
sudo service hostapd restart
或者執行以下命令生效
sudo hostapd -dd /etc/hostapd/hostapd.conf
如果你使用的網卡提示一下信息
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。
安裝新的 hostapd
刪除原來的 hostapd
sudo apt-get autoremove hostapd
下載第三方驅動並安裝
wget https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz
tar -zxvf v1.1.tar.gz
編譯
cd RTL8188-hostapd-1.1/hostapd
sudo make
sudo make install
然後再重啓服務,應該提示成功
$ sudo service hostapd restart
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[ ok ] Starting advanced IEEE 802.11 management: hostapd.
將 hostapd 加入開機自啓動
sudo service hostapd start
sudo update-rc.d hostapd enable
如果這裏提示的是失敗,重啓後網絡建立成功,用手機可以搜到這個網絡
安裝 DHCP 服務
以上步驟建立起了 WiFi 熱點,但是無法自動獲取 ip,需要以下步驟
sudo apt-get install udhcpd
編輯配置文件
sudo vim /etc/udhcpd.conf //修改以下信息,start和end是重點,注意跟第一步的靜態ip在一個網段
start 192.168.0.20
end 192.168.0.200
interface wlan0
接下來編輯/etc/default/udhcpd
並且將下面這行註釋掉,以使DHCP Server正常工作
#DHCPD_ENABLED="no"
啓動 dhcp 服務器
sudo service udhcpd start
sudo update-rc.d udhcpd enable
經過此步手機已經可以接入 WiFi 網絡,並且自動獲取 ip。
配置路由轉發
理論上是經過這一步,手機可以通過共享樹莓派的無線網絡上網了,但是可能還存在一些路由轉發問題。
設置路由映射規則
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
編輯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
開起內核轉發
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
其它問題
最近經常發現無線網卡配置的 DHCP 不能發揮作用,經過排查發現給無線網卡指定的靜態 IP 失敗了,也就是說無線網卡沒有 IP 導致 DHCP 無法工作,將/etc/default/ifplugd
的內容修改配置如下:
INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"