鍍金池/ 教程/ 嵌入式/ 樹(shù)莓派做 wifi 熱點(diǎn)
樹(shù)莓派 GPIO 控制
樹(shù)莓派介紹
樹(shù)莓派做 wifi 熱點(diǎn)
樹(shù)莓派網(wǎng)絡(luò)與更新配置
樹(shù)莓派內(nèi)核編譯與固件升級(jí)
樹(shù)莓派做 web 服務(wù)器
樹(shù)莓派啟動(dòng)方式及支持的系統(tǒng)
樹(shù)莓派配置
樹(shù)莓派 spi 液晶屏支持
樹(shù)莓派常用軟件及服務(wù)

樹(shù)莓派做 wifi 熱點(diǎn)

原理:Pi 使用有線連入網(wǎng)絡(luò),然后接 USB 無(wú)線網(wǎng)卡作為熱點(diǎn),提供 Wifi 接入。

USB 無(wú)線網(wǎng)卡驅(qū)動(dòng)

如果接上 USB 無(wú)線網(wǎng)卡,使用 ifconfig 命令,能直接看到 wlan0,那么恭喜你,可以直接跳過(guò)這一步。 如果沒(méi)有請(qǐng)查詢一下樹(shù)莓派支持的 USB 無(wú)線網(wǎng)卡型號(hào),可參考以下網(wǎng)址: http://elinux.org/RPi_VerifiedPeripherals#USB_Wi-Fi_Adapters

修改 wlan0 為靜態(tài) IP

相當(dāng)于設(shè)置路由器 wlan 口 IP,即我們?cè)L問(wèn)路由器通常使用的:192.168.1.1

sudo vim /etc/network/interfaces

把原來(lái)關(guān)于 wlan0 的注釋掉:(可能跟這個(gè)不一樣,跟 wlan0 有關(guān)的注釋掉即可)。

#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,后面需要重新卸載安裝新的, 測(cè)試時(shí)這里必須先裝舊的,然后后面卸了裝新的,否則也不能用。

sudo apt-get install hostapd

編輯 hostapd 默認(rèn)配置文件

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

保存退出,然后重啟服務(wù)

sudo service hostapd restart

或者執(zhí)行以下命令生效

sudo hostapd -dd /etc/hostapd/hostapd.conf

如果你使用的網(wǎng)卡提示一下信息

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

刪除原來(lái)的 hostapd

sudo apt-get autoremove hostapd

下載第三方驅(qū)動(dòng)并安裝

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

然后再重啟服務(wù),應(yīng)該提示成功

$ sudo service hostapd restart
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[ ok ] Starting advanced IEEE 802.11 management: hostapd.

將 hostapd 加入開(kāi)機(jī)自啟動(dòng)

sudo service hostapd start
sudo update-rc.d hostapd enable

如果這里提示的是失敗,重啟后網(wǎng)絡(luò)建立成功,用手機(jī)可以搜到這個(gè)網(wǎng)絡(luò)

安裝 DHCP 服務(wù)

以上步驟建立起了 WiFi 熱點(diǎn),但是無(wú)法自動(dòng)獲取 ip,需要以下步驟

sudo apt-get install udhcpd

編輯配置文件

sudo vim /etc/udhcpd.conf //修改以下信息,start和end是重點(diǎn),注意跟第一步的靜態(tài)ip在一個(gè)網(wǎng)段
start 192.168.0.20
end 192.168.0.200
interface wlan0

接下來(lái)編輯/etc/default/udhcpd并且將下面這行注釋掉,以使DHCP Server正常工作

#DHCPD_ENABLED="no"

啟動(dòng) dhcp 服務(wù)器

sudo service udhcpd start
sudo update-rc.d udhcpd enable

經(jīng)過(guò)此步手機(jī)已經(jīng)可以接入 WiFi 網(wǎng)絡(luò),并且自動(dòng)獲取 ip。

配置路由轉(zhuǎn)發(fā)

理論上是經(jīng)過(guò)這一步,手機(jī)可以通過(guò)共享樹(shù)莓派的無(wú)線網(wǎng)絡(luò)上網(wǎng)了,但是可能還存在一些路由轉(zhuǎn)發(fā)問(wèn)題。

設(shè)置路由映射規(guī)則

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 權(quán)限:

sudo chmod 755 /etc/network/if-pre-up.d/iptables

開(kāi)起內(nèi)核轉(zhuǎn)發(fā)

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

其它問(wèn)題

最近經(jīng)常發(fā)現(xiàn)無(wú)線網(wǎng)卡配置的 DHCP 不能發(fā)揮作用,經(jīng)過(guò)排查發(fā)現(xiàn)給無(wú)線網(wǎng)卡指定的靜態(tài) IP 失敗了,也就是說(shuō)無(wú)線網(wǎng)卡沒(méi)有 IP 導(dǎo)致 DHCP 無(wú)法工作,將/etc/default/ifplugd的內(nèi)容修改配置如下:

INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"