树莓派Zero配置USB无线网卡

  • 前言
  • 无板载WiFi树莓派联网(接收端)方式汇总
  • 无线网卡选型
  • 作为接收端配置
  • 确认网卡是否有效
  • 修改interfaces文件
  • 配置无线网卡信息
  • 重启网卡或重启树莓派
  • 作为发送端配置
  • 重要提示
  • 使用RT5370无线网卡配置AP
  • 可能有用的其他方式


前言

贪便宜买了个树莓派zero,不带板载WiFi及蓝牙,配置过程的话接收端还好,基本多数Linux免驱无线网卡设置好树莓派文件都能搞定(设置方法见“作为接收端配置”),但本意希望能将网卡设为AP组建局域网,结果差点没被搞疯掉,真是一步一个坑,本文记录一下以作纪念及供人避坑。

无板载WiFi树莓派联网(接收端)方式汇总

  1. 树莓派+带RJ45接口的USB HUB实现网线连接;
  2. 树莓派+串口网口模块,通过GPIO转RJ45实现网线连接:;
  3. 树莓派+Zero Quick Plug实现USB共享网络连接:https://shumeipai.nxez.com/2018/02/20/raspberry-pi-zero-usb-ethernet-gadget-tutorial.html
  4. 树莓派+USB HUB+USB无线网卡实现WiFi连接。

无线网卡选型

如果各位壮士坚定地选择无线网卡联网,请务必认真阅读该文章。
并不是所有牛奶都叫特仑苏,也并不是所有无线网卡树莓派都能用。

作为接收端配置

如果只是希望用USB网卡在树莓派上实现上网,这个实现难度还会略低一些。

确认网卡是否有效

Terminal界面输入ifconfig查看是否有wlan0信息,如果显示wlan0信息则说明网卡可用,如无wlan0则证明该网卡需要安装驱动,找准网卡芯片型号开始八仙过海各显神通,建议阅读“无线网卡选型”中链接文章。
实名建议不要选RTL8188类芯片,需要安装驱动,虽然Github上有大神开源了对应驱动,但不支持Raspbian系统最新kernal,需要降级头文件(详见:),简直费力不讨好。

修改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重启树莓派。

作为发送端配置

重要提示

  1. 请尽量选择RT5370芯片USB无线网卡,作为被誉为“树莓派可用的世界上最好配置AP的无线网卡”,它能为你减少很多生活的烦恼;
  2. 很多文章都在介绍使用create_ap工具做AP,但事实上该工具能在4B等带有板载WiFi主板上很好运行,但像zero这类无板载WiFi主板上无法实现,具体原因尚不详。
  3. 当然也有老哥使用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(尚未验证),供大家参考: