玩转树莓派
树莓派网络配置
raspberry pi不同系统版本的网络配置方法略有不同,需要阅读官方文档,针对具体的版本进行配置,
以下设置针对stretch版本,其他版本未作测试
需求
- 有线接入公网
- 无线wlan0 作为STA
- 无线wlan1 作为AP,提供无线热点
有线网络
树莓派接入有线网络,默认DHCP获取地址,这里配置static ip,方便后续维护管理 - edit dhcpcd.conf
|
|
在文件末尾添加以下内容,重启树莓派即可
无线网络
- USB无线网卡
由于树莓派2B没有板载无线芯片,这里使用usb wireless dongle来实现,推荐使用免驱的USB dongle,可在树莓派的USB dongle支持列表里查看https://elinux.org/RPi_USB_Wi-Fi_Adapters
无线网卡均支持STA模式,AP模式是否支持可从https://wireless.wiki.kernel.org/en/users/drivers查看
将两张USB dongle 插入树莓派的USB端口,查看型号12345678pi@raspberrypi:~ $ lsusbBus 001 Device 006: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network AdapterBus 001 Device 005: ID 258a:001aBus 001 Device 007: ID 093a:2532 Pixart Imaging, Inc.Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN AdapterBus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet AdapterBus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 HubBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
可见两款USB dongle的型号分别为RTL8188EUS和RTL8188CUS,都是RealTek的,官方文档表示该型号AP功能未测试,那么接下来我便实测一下
Tips
树莓派在系统启动时会随机为无线网卡分配设备接口号,也就是两块USB Dongle的设备名 wlan0和wlan1会随机swap,但这并不影响使用
wlan0 STA设置
配置 /etc/network/interfaces
在改文件里添加以下内容1234allow-hotplug wlan0iface wlan0 inet manualpre-up wpa_supplicant -B w -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.confpost-down killall -q wpa_supplicant配置 /etc/wpa_supplicant/wpa_supplicant.conf
1234567country=GBctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1network={ssid="xxxxxx"psk="xxxxxx"
其中ssid和psk分别表示无线网络名称和密码
配置 /etc/dhcpcd.conf
在文件末尾添加以下内容1234interface wlan0static ip_address=192.168.0.116/24static routers=192.168.0.1static domain_name_servers=192.168.0.1重启树莓派,查看wlan0接入网络是否成功
123456789pi@raspberrypi:~ $ ifconfig wlan0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255inet6 fe80::b80e:3e12:3882:fa4d prefixlen 64 scopeid 0x20<link>ether 00:13:ef:81:00:0b txqueuelen 1000 (Ethernet)RX packets 3064 bytes 524906 (512.6 KiB)RX errors 0 dropped 44 overruns 0 frame 0TX packets 46 bytes 6094 (5.9 KiB)TX errors 0 dropped 3 overruns 0 carrier 0 collisions 0
可见wlan0已经分配地址192.168.0.116,wlan0作为STA设置完成
wlan1 AP设置
准备工作
安装需要的软件包
hostapd—支持无线网卡作为无线热点使用
dnsmasq— 提供DHCP和DNS服务1sudo apt-get install hostapd dnsmasq修改/etc/dhcpcd.conf
禁止wlan1 DHCP功能,将其修改为静态ip地址,这个地址将做为后续我们wifi热点的网关地址
在/etc/dhcpcd.conf末尾添加以下内容12interface wlan1static ip_address=192.168.2.1/24配置 /etc/network/interfaces
在文件结尾添加以下内容12allow-hotplug wlan1iface wlan1 inet manual重启dhcp服务和wlan1无线网卡配置
123sudo service dhcpcd restartsudo ifdown wlan1sudo ifup wlan配置hostapd
123456789101112131415sudo vim etc/hostapd/hostapd.confinterface=wlan1driver=nl80211ssid=TP-LINK_1112_hothw_mode=gchannel=6wmm_enabled=1macaddr_acl=0auth_algs=1ignore_broadcast_ssid=0wpa=2wpa_passphrase=asdfghjkl_123wpa_key_mgmt=WPA-PSKrsn_pairwise=CCMP
运行以下命令
wlan1: AP-ENABLED表明配置成功
配置hostapd为自启动模式
将DAEMON_CONF 修改为DAEMON_CONF=”/etc/hostapd/hostapd.conf”
配置DNSMASQ
为了实现上网功能,需要对DNSMASQ服务进行配置,首先备份一下系统默认的文件,然后创建一个新的配置文件123456789101112131415161718sudo mv /etc/dnsmasq.conf/etc/bak_dnsmasq.confsudo vim /etc/dnsmasq.confinterface=wlan0bind-interfacesserver=218.2.2.2server=114.114.114.114server=8.8.8.8domain-neededbogus-privdhcp-range=192.168.2.2,192.168.2.254,12h设置IPV4内核转发
打开系统配置文件sysctl.conf,将IPV4转发那一行的#去掉1net.ipv4.ip_forward=1
下一次重启后会生效,如果不想现在重启,可以直接输入如下指令直接生效
- 防火墙设置
为了实现树莓派以太网接口共享给wlan1上网,需要配置NAT,需先执行如下防火墙命令123456sudo iptables -Fsudo iptables -Xsudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEsudo iptables -A FORWARD -i eth0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPTsudo bash -c iptables-save > /etc/etc/iptables.ipv4.nat
编辑sudo vim /etc/network/if-pre-up.d/iptables
添加下面两行代码:
sudo chmod 755 /etc/network/if-pre-up.d/iptables
通过获取DHCPCD来运行NAT需要创建一个新文件
1sudo touch /lib/dhcpcd/dhcpcd-hooks/70-ipv4-nat重启服务:
123sudo service hostapd startsudo service dnsmasq startsudo reboot
测试
重启树莓派后,输入ifconfig,得到以下结果
eth0 wlan0 wlan1均已正常工作,good job!
但是用手机搜索热点,并没有找到SSID 为TP-LINK_1112_hot一项
查看进程
hostapd已经启动,重启试试
重启后手机可以搜索到这个热点,但是拿不到ip
ps查看是未启动dnsmasq服务
重启dnsmasq
现在手机可以连接到热点了,但是上不了网
重新配置防火墙
现在手机终于可以上网了
可以写个脚本,将这三项需要手动启动的项目开机自动启动
编写开机自启脚本
注册开机启动sudo update-rc.d hotserver defaults
可是重启后并没有启动,应该是树莓派使用systemctl这种新型的服务启动方式了,暂时不折腾了
直接手动启动脚本吧
OK,热点已经启动,手机连接可以正常上网。
这里使用eth0->wlan1转发的,也可以配置防火墙,让wlan0->wlan1转发,就可以拔掉树莓派的网线啦!