目标

最近树梅派4B发布,相比树梅派3B在CPU、内存、网卡、USB等各方面大幅升级,又唤起了我对树梅派的兴趣。淘宝上很快就可以买到了,不过在准备下单的时候,我问了自己一个问题:我要买来干什么?是要把玩两天之后就让它变成“吃灰派”吗?

最终,我觉得用树梅派做一个wifi中继是一个比较好的用途。不过,做一个wifi中继,3B的性能足矣,于是我找出了正在吃灰的树梅派3B,最终也就有了这篇文章。

2020-2-1备注:此文同样适用于树莓派4B

下面记录一下如何将一个双WiFi的树莓派变为一个软AP,从而可以将WiFi的信号进行距离延展,同时实现将无线转有线。原理简单点说就是树梅派通过一个USB网卡接收一个wifi信号,然后通过NAT转发到自带的无线网卡上建立的wifi和自带的有线网卡上。

准备工作

准备一个usb无线网卡,我用的是迅捷的FW150US,形如一个无线鼠标接收器,很便宜。

给树梅派3B刷写系统,具体过程不赘述,我用的是目前最新的官方系统,镜像名称为2019-06-20-raspbian-buster.iso。第一次进系统时请正确选择语言、国家、时区等等。记得原来的版本需要手动去设置wifi国别,新版似乎不必了。

固定WLAN接口名称

因为使用了两个WIFI适配器,为了防止系统开机时随机分配哪个是wlan0,哪个是wlan1,因为两个适配器不一样,可能会导致运行在上面的配置没办法生效。因此,我们必须让系统记住WIFI适配器使用的接口名称。本例中,wlan0为树梅派自带的无线网卡,wlan1为usb无线网卡。

编辑新增文件/etc/udev/rules.d/10-network.rules,其中的内容如下:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan1"

注意其中的mac地址,设置为你的设备的mac地址。获得mac地址,可以使用命令ip link

重启系统后,再插入设备,就会绑定接口名称

用wlan1连网

本例中,是用usb无线网卡即wlan1来联网,先设置好wlan1要连接的wifi,方便下面安装软件包和测试。

固定eth0、wlan0的IP

编辑文件/etc/dhcpcd.conf, 添加如下配置

 interface eth0
 static ip_address=192.168.3.1/24
 interface wlan0
 static ip_address=192.168.4.1/24
 nohook wpa_supplicant

现在重启dhcpcd守护进程:

sudo systemctl restart dhcpcd

安装dnsmasq来设置DHCP服务

先来说明一下我的网段设置,有线网络使用192.168.3.*这个网段,而无线AP端,使用192.168.4.*网段

使用命令sudo apt-get install dnsmasq安装dnsmasq,编辑/etc/dnsmasq.conf,添加如下配置:

 listen-address=127.0.0.1,192.168.3.1,192.168.4.1
 interface=eth0
 dhcp-range=192.168.3.50,192.168.3.150,12h
 interface=wlan0
 dhcp-range=192.168.4.50,192.168.4.150,12h

运行命令sudo systemctl reload dnsmasq来启用

开启包转发、NAT

Linux系统默认关闭了IP包转发,因此不能做路由器。所以需要先打开包转发

编辑/etc/sysctl.conf,去掉以下属性前的注释:

net.ipv4.ip_forward=1

运行sudo sysctl -p来启用

之后运行

sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE

来启用wlan1端口的NAT

配置防火墙

上一步中,我们启用了一条防火墙规则,但是防火墙规则重启后就丢失了,为了能够规则开机自动加载,我们可以使用iptables-persistent。用命令sudo apt-get install iptables-persistent来安装该组件,根据其提示进行初次设置(一路确认)。该组件默认会将防火墙规则保存到/etc/iptables/rules.v4中。你可以使用如下命令保存和读入规则:

#保存现有规则
 sudo service netfilter-persistent save
 #读取并应用先有规则
 sudo service netfilter-persistent reload

确认WIFI适配器支持AP模式

上面说过,我用的usb无线网卡是迅捷的FW150US,第一次配置时,我试图用这个usb无线网卡来开启AP,失败之后发现,这个网卡用内核自带的驱动时不支持AP mode。好在树梅派3B自带的无线网卡是支持的。可以使用命令iw list查看网卡是否支持ap mode,在命令输出里Supported interface modes下查看是否有AP。

安装并开启hostapd

Linux启用WIFI热点,使用的是hostapd。首先,用命令sudo apt-get install hostapd安装它,然后增加配置文件/etc/hostapd/hostapd.conf如下:

 interface=wlan0
 driver=nl80211
 ssid=ssid
 hw_mode=g
 channel=13
 macaddr_acl=0
 auth_algs=1
 ignore_broadcast_ssid=0
 wpa=2
 wpa_passphrase=passwd
 wpa_key_mgmt=WPA-PSK
 wpa_pairwise=TKIP
 rsn_pairwise=CCMP

请需要更改其中的ssid和wpa_passphrase属性,分别为无线AP的名称和密码。

之后运行命令sudo hostapd -d /etc/hostapd/hostapd.conf来观察测试,没有错误可以连接,就OK了。 CTRL+C后,编辑/etc/default/hostapd,改变DAEMON_CONF的配置如下

DAEMON_CONF="/etc/hostapd/hostapd.conf"

正式启动AP

sudo systemctl unmask hostapd

sudo systemctl enable hostapd

sudo systemctl start hostapd

关机重启一下,看看AP是否能够启动起来。如果正常就OK了。

2 个评论

发表评论

您的电子邮箱地址不会被公开。

10 − 10 =