树莓派Zero配置USB无线网卡
前言
贪便宜买了个树莓派zero,不带板载WiFi及蓝牙,配置过程的话接收端还好,基本多数Linux免驱无线网卡设置好树莓派文件都能搞定(设置方法见“作为接收端配置”),但本意希望能将网卡设为AP组建局域网,结果差点没被搞疯掉,真是一步一个坑,本文记录一下以作纪念及供人避坑。
无板载WiFi树莓派联网(接收端)方式汇总
- 树莓派+带RJ45接口的USB HUB实现网线连接;
- 树莓派+串口网口模块,通过GPIO转RJ45实现网线连接:https://blog.csdn.net/vilmaigic/article/details/109093247;
- 树莓派+Zero Quick Plug实现USB共享网络连接:https://shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html;
- 树莓派+USB HUB+USB无线网卡实现WiFi连接。
无线网卡选型
如果各位壮士坚定地选择无线网卡联网,请务必认真阅读该文章https://www.cnblogs.com/sjqlwy/p/5003436.html。
并不是所有牛奶都叫特仑苏,也并不是所有无线网卡树莓派都能用。
作为接收端配置
如果只是希望用USB网卡在树莓派上实现上网,这个实现难度还会略低一些。
确认网卡是否有效
Terminal界面输入ifconfig
查看是否有wlan0信息,如果显示wlan0信息则说明网卡可用,如无wlan0则证明该网卡需要安装驱动,找准网卡芯片型号开始八仙过海各显神通,建议阅读“无线网卡选型”中链接文章。
实名建议不要选RTL8188类芯片,需要安装驱动,虽然Github上有大神开源了对应驱动,但不支持Raspbian系统最新kernal,需要降级头文件(详见:https://blog.csdn.net/dxxdxxd/article/details/108302135),简直费力不讨好。
修改interfaces文件
如网卡驱动正常,开始修改树莓派interfaces文件:sudo nano /etc/network/interfaces
,并将内容修改为以下形式并保存退出:
auto lo
iface lo inet loopback
iface eth0 inet dhcp #采用dhcp方式获取IP
auto wlan0 #如果有wlan,无线网卡,则默认启动无线网卡连接
allow-hotplug wlan0 #表示wlan设备可以热插拨
iface wlan0 inet dhcp #无线网卡连接也采用DHCP方式获取IP地址
wpa-ssid "yourwifiname" #ssid名
wpa-psk "yourwifipassword" #wifi使用wpa-psk认证方式,认证密码
iface default inet dhcp
配置无线网卡信息
编辑/etc/wpa_supplicant/wpa_supplicant.conf
文件,配置无线网卡信息,内容如下:
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi-A"
psk="password1"
key_mgmt=WPA-PSK
priority=1
}
network={
ssid="WiFi-B"
psk="password2"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}
重启网卡或重启树莓派
输入ifconfig
查看wlan0是否分配了IP地址,如未分配则重启网卡:
sudo ifdown wlan0
sudo ifup wlan0
若重启网卡后仍未被分配IP地址,则sudo reboot
重启树莓派。
作为发送端配置
重要提示
- 请尽量选择RT5370芯片USB无线网卡,作为被誉为“树莓派可用的世界上最好配置AP的无线网卡”,它能为你减少很多生活的烦恼;
- 很多文章都在介绍使用
create_ap
工具做AP,但事实上该工具能在4B等带有板载WiFi主板上很好运行,但像zero这类无板载WiFi主板上无法实现,具体原因尚不详。 - 当然也有老哥使用RTL8188CUS芯片USB无线网卡实现了AP功能,具体见https://wangye.org/blog/archives/845/,该方法我没有试过,各位如果有RTL8188CUS可以尝试下。
使用RT5370无线网卡配置AP
老规矩直接上命令行:
# udhcpd在非树莓派zero系列上可以正常工作,但在Zero (W)上重启后不能正常分配IP,猜想是因为该服务在无线网卡初始化完成前启动导致,使用dnsmasq替代后可正常工作
sudo apt-get -y remove udhcpd
# 安装hostapd和dnsmasq
sudo apt-get -y install hostapd dnsmasq
# 备份配置文件
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
# 配置需要分配的IP网段,可根据需要自行分配
sudo sed -i "s/^#dhcp-range=192.168.0.50,192.168.0.150,12h/dhcp-range=192.168.0.50,192.168.0.150,12h/g" /etc/dnsmasq.conf
# 设置AP名称
export AP_NAME="AP"
# 为无线网卡配置静态IP,可根据需要自行分配
export WLAN_IP=192.168.0.1
# 确认IP地址是否设置成功
sudo ifconfig wlan0 $WLAN_IP
# dhcpcd.conf插入参数
sudo sed -i '$a\interface wlan0' /etc/dhcpcd.conf
# dhcpcd.conf设置静态IP
echo "static ip_address=${WLAN_IP}/24" | sudo tee -a /etc/dhcpcd.conf
# hostapd配置,配置为开放模式
sudo touch /etc/hostapd/hostapd.conf
# hostapd.conf设置interface
echo "interface=wlan0" | sudo tee -a /etc/hostapd/hostapd.conf
# hostapd.conf设置AP名称
echo "ssid=${AP_NAME}" | sudo tee -a /etc/hostapd/hostapd.conf
# 设置WiFi工作频段(1-13)
echo "channel=9" | sudo tee -a /etc/hostapd/hostapd.conf
# 硬件工作模式
echo "hw_mode=g" | sudo tee -a /etc/hostapd/hostapd.conf
# 验证方式为开放模式 1=wpa, 2=wep, 3=both,尽量避免选择安全性极低的wep
echo "auth_algs=1" | sudo tee -a /etc/hostapd/hostapd.conf
# 设置802.11n模式支持
echo "ieee80211n=1" | sudo tee -a /etc/hostapd/hostapd.conf
# 备份配置文件
sudo cp /etc/default/hostapd /etc/default/hostapd.bak
# 修改配置文件
sudo sed -i "s/#DAEMON_CONF=\"\"/DAEMON_CONF=\"\/etc\/hostapd\/hostapd.conf\"/g" /etc/default/hostapd
# 启动networking和hostapd服务,注意先后顺序先使用networking服务设置IP再更新hostapd
sudo service networking restart
sudo service hostapd restart
sudo service dnsmasq restart
# 设置开机启动
sudo update-rc.d hostapd enable
#重启设备,检查配置是否已经生效
sudo reboot
可能有用的其他方式
还看到了一位老哥写的另一种方式,方法上大同小异,但有讲如何进行NAT(尚未验证),供大家参考: