把树莓派变身无线AP
环境要求:
- Raspberry Pi 4B(4GB版)
- TF卡(最小16GB)
- 以太网线一根
- PC机一台(本例以Mac为例)
1 系统安装
1.1 下载系统镜像(32bit)
截止到目前(2020-11-20),清华大学开源软件镜像站的树莓派系统镜像最新的版本是 2020-08-20 的,选择 2020-08-20-raspios-buster-armhf-lite.zip 文件,将其下载到本地。
1.2 下载 Raspberry Pi Image
这个工具是Raspberry官方提供的傻瓜式将Raspberry Pi OS烧写到TF卡的软件,从 清华源 上也可以下载,目前最新的版本是 imager_1.4,根据自己的操作系统,选择合适的版本下载即可。Mac系统下载 imager_1.4.dmg ,Windows系统下载 imager_1.4.exe ,Ubuntu系统下载 imager_1.4_amd64.deb 。
1.3 烧写镜像文件到TF卡
一般选择16GB的TF卡就够用了,首先打开 Raspberry Pi Image 软件,启动后界面如下:
点击Operating System下面的 CHOOSE OS 按钮,选择 “Erase”
然后把TF卡插在读卡器上,将读卡器插入PC机的USB3.0接口,点击 SD Card 下面的 CHOOSE SD CARD 按钮,选择刚才插入的TF卡。
接着,点击“WRITE”按钮,开始对TF卡进行擦除和格式化,等操作完成。
格式化完成后,还是在这个界面中选择“Use custom”。
并在弹出的对话框中找到自己之前下载的镜像文件,然后选择SD卡为刚才格式化好的TF卡,最后点击“WRITE”,等待镜像烧写完成。
烧写完成后,会出现一个名叫“boot”的磁盘系统,这里我们的系统镜像就烧写好了。
2 配置树莓派
2.1 开启SSH
用VS Code打开“boot”,在根目录系创建一个名为“ssh”的文件,注意,这个文件的名字就是“ssh”,全小写,没有扩展名,没有内容。创建好了,直接关闭就行。这样就可以通过ssh远程连接树莓派了。
2.2 使用SSH方式连接到树莓派
首先给树莓派插上以太网的网线,然后通电开机。
稍微等待一会儿,一般家庭用的无线路由器都有自带的管理软件,我用的是小米WiFi。通过小米WiFi的APP可以查看到连接的设备信息,找到那个叫“raspberrypi”的设备,点击查看联网信息,可以获取的树莓派在家庭局域网中的ip地址,我这里是192.168.31.187,记住这个地址,接下来就可以通过终端使用ssh访问树莓派了。
启动终端,输入命令
~ $ ssh pi@192.168.31.187
第一次访问的时候,PC机会要求记录这个远程设备访问的权限。所以请输入“yes”后回车,之后会让我们输入树莓派的账户“pi”的登录密码,默认密码是“raspberry”,输入正确后,回车会看到这个欢迎页面,并看到终端的显示已经变成“pi@raspberrypi:”的主机信息了,这表明我们成功通过ssh进入到了树莓派的系统中。
2.3 给树莓派换国内源
这个必须做,不然后面会疯掉。
sudo nano /etc/apt/sources.list
把文件中的内容注释掉,添加以下内容
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
然后 control-o 回车保存,control-x关闭。
同样,将 /etc/apt/sources.list.d/raspi.list
文件中的内容也替换掉。
sudo nano /etc/apt/sources.list
替换内容为:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
然后 control-o 回车保存,control-x关闭
2.4 更新
在终端里执行更新软件命令先。
sudo apt-get update
sudo apt-get dist-upgrade
2.5 配置
在终端里执行
sudo raspi-config
会启动下图的配置界面,通过键盘上的上下方向键,选择 5 Localisation Options
,回车。
进入配置的二级界面后,选择 L1 Locale
,回车。
这时,树莓派会先回到终端环境一下,然后很快就会进入下图这个界面。
首先在这个界面上通过键盘方向键或者鼠标滚动那个 Locales to be generated:
区域,直到找到 zh_CN.UTF-8 UTF-8
,然后按 空格键
进行选中,选中效果是会出现一个 “*” 号。完成选择请回车。
这时会出现下图的“设置系统的默认本地环境”的界面,这里我选择的是 en_US.UTF-8
然后在这个界面上,按动键盘的“右箭头”按键,选中 <OK>
,回车,树莓派会回到终端里,界面中会出现几行配置过程信息,不用管,直接等待它配置完成即可,然后就会回到一开始的配置界面了。
连续按两下“右箭头”按键,选中<Finish>
,回车。
如果是第一次配置,应该会让你重启,直接按照提示指引重启就行了。
等待差不多1分钟吧,再使用ssh方式登录到树莓派上即可。
3 安装 RaspAP (手动方式)
3.1 原理介绍
首先借用 RaspberryPi 官网上“配置无线接入点”页面的一张图 ,来说明一下我们的树莓派作为无线AP,到底在网络中是什么角色。
图中的 RPi
和 PC#1
、 PC#2
共同连接在家庭局域网环境中,它们的IP地址范围都是“10.10.0.X”的,这个地址范围是由图中的 Router
来负责分配的,它们都在由 “Router” 创建的局域网环境中,相互之间是可以通信的。
配置成无线AP的RPi
还有另外一个地址,就是“192.168.4.1”,而图片中最右侧的 Laptop
地址是“192.168.4.2”,也就是说这个“Laptop”是在由“RPi”创建的局域网络环境中,它只能跟“RPi”通信。这样,如果“RPi”能访问外网的话,“Laptop”就借助“RPi”也能访问外网了;如果“RPi”没有连接外网的网线,不能上网,那“Laptop”也不能上外网,但是它和“RPi”之间还是可以进行局域网通信的。
3.2 RaspAP介绍
RaspAP 是一个运行在树莓派上,可以将树莓派作为无线AP的图形化管理工具。当我们在树莓派上安装了 RaspAP 之后,就可以轻松地通过网页的方式来配置无线AP的功能了。
RaspAP 的官网上给出了一个 “Quick Installer”,其实就是在树莓派终端执行下面的一条命令
curl -sL https://install.raspap.com | bash
当这条命令自己运行完之后,我们的树莓派就具有了上图所列出的一些无线访问配置信息。
很遗憾的是,这条命令因为网络的原因在这里用不了,所以我们需要使用“手动”的方式来安装和配置。
3.3 RaspAP 手动安装步骤
手动安装的指引我参考了 Manual installation 页面中的步骤,并稍微做了一些调整。下面列出我的安装步骤。
Step1:安装必备的依赖
sudo apt-get install lighttpd git hostapd dnsmasq iptables-persistent vnstat qrencode php7.3-cgi
Step2:开启lighttpd服务
sudo lighttpd-enable-mod fastcgi-php
会看到如下输出:
Met dependency: fastcgi
Enabling fastcgi-php: ok
Enabling fastcgi: ok
Run "service lighttpd force-reload" to enable changes
继续执行指令:
sudo service lighttpd force-reload
sudo systemctl restart lighttpd.service
Step3:克隆raspap-webgui源码
这个源码仓库在GitHub,由于网络的原因,下载速度很慢,我已经把这个仓库导入到了码云上,所以克隆地址会跟官网文档的命令不一样。
pi@raspberrypi:~ $ sudo rm -rf /var/www/html
pi@raspberrypi:~ $ sudo git clone https://gitee.com/ursaminor68/raspap-webgui.git /var/www/html
这时会出现以下输出:
Cloning into '/var/www/html'...
remote: Enumerating objects: 19377, done.
remote: Counting objects: 100% (19377/19377), done.
remote: Compressing objects: 100% (10829/10829), done.
remote: Total 19377 (delta 7163), reused 19377 (delta 7163), pack-reused 0
Receiving objects: 100% (19377/19377), 20.96 MiB | 2.46 MiB/s, done.
Resolving deltas: 100% (7163/7163), done.
看到这些信息,就表明克隆完成了。
Step4:一大波指令
以下的指令都是从 RaspAP 的手动安装指引界面中搬移过来的,直接老老实实把下面的所有指令都执行完就行了。
给“www-dtata”用户添加sudo的权限
cd /var/www/html
sudo cp installers/raspap.sudoers /etc/sudoers.d/090_raspap
创建一堆 RaspAP 的配置目录,添加 /etc/dhcpcd.conf
文件作为基础配置文件。
sudo mkdir /etc/raspap/
sudo mkdir /etc/raspap/backups
sudo mkdir /etc/raspap/networking
sudo mkdir /etc/raspap/hostapd
sudo mkdir /etc/raspap/lighttpd
cat /etc/dhcpcd.conf | sudo tee -a /etc/raspap/networking/defaults > /dev/null
更改一些文件和目录的用户组以及权限的命令,敲就是了。
sudo cp raspap.php /etc/raspap
sudo chown -R www-data:www-data /var/www/html
sudo chown -R www-data:www-data /etc/raspap
sudo mv installers/*log.sh /etc/raspap/hostapd
sudo mv installers/service*.sh /etc/raspap/hostapd
sudo chown -c root:www-data /etc/raspap/hostapd/*.sh
执行到这里会看到以下输出:
changed ownership of '/etc/raspap/hostapd/disablelog.sh' from www-data:www-data to root:www-data
changed ownership of '/etc/raspap/hostapd/enablelog.sh' from www-data:www-data to root:www-data
changed ownership of '/etc/raspap/hostapd/servicestart.sh' from www-data:www-data to root:www-data
继续执行指令:
sudo chmod 750 /etc/raspap/hostapd/*.sh
sudo cp installers/configport.sh /etc/raspap/lighttpd
sudo chown -c root:www-data /etc/raspap/lighttpd/*.sh
执行到这里会看到输出:
changed ownership of '/etc/raspap/lighttpd/configport.sh' from root:root to root:www-data
继续执行指令:
sudo mv installers/raspapd.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable raspapd.service
执行到这里会看到输出:
Created symlink /etc/systemd/system/multi-user.target.wants/raspapd.service → /lib/systemd/system/raspapd.service.
继续执行指令:
sudo mv /etc/default/hostapd ~/default_hostapd.old
sudo cp /etc/hostapd/hostapd.conf ~/hostapd.conf.old
sudo cp config/default_hostapd /etc/default/hostapd
sudo cp config/hostapd.conf /etc/hostapd/hostapd.conf
sudo cp config/dnsmasq.conf /etc/dnsmasq.d/090_raspap.conf
sudo cp config/dhcpcd.conf /etc/dhcpcd.conf
sudo cp config/config.php /var/www/html/includes/
指令太多,怕看串行:)
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo cp config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev
sudo cp config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/90_raspap.conf > /dev/null
sudo sysctl -p /etc/sysctl.d/90_raspap.conf
sudo /etc/init.d/procps restart
看到以下输出:
[ ok ] Restarting procps (via systemctl): procps.service.
继续执行指令:
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
sudo iptables-save | sudo tee /etc/iptables/rules.v4
看到以下输出:
# Generated by xtables-save v1.8.2 on Sat Nov 21 22:43:02 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 21 22:43:02 2020
# Generated by xtables-save v1.8.2 on Sat Nov 21 22:43:02 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
COMMIT
# Completed on Sat Nov 21 22:43:02 2020
然后,继续执行指令:
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
看到以下输出:
Synchronizing state of hostapd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable hostapd
然后执行
sudo reboot
系统重启。等待1~2分钟。你应该能够看到你的无线网络连接信号中多了一个“raspi-webgui”
安装RaspAP成功~~!
4 RaspAP WebGUI
用PC机在无线信号中找到 “raspi-webgui” 后,点击连接,输入初始密码 “ChangeMe” 之后,就可以在PC机的浏览器中输入地址:http://10.3.14.1
,用户名为 admin
,密码是 secret
,进入如下画面
因为我们之前配置了本地语言环境为“zh_CN”,所以看到的是中文界面,很亲切吧。
如果你不喜欢“raspi-webgui”这个名字,可以按照下图的指引修改。
这样自己容易记,而且也不会跟其他同样也是用树莓派做成的无线AP名称冲突。
其他的配置选项除了修改密码以外,基本上都不用改,除非你十分清楚自己要改什么,否则最好不要随意改动。
5 用ssh登录树莓派无线AP
如果你的PC机连接了树莓派的无线AP网络,那么以后ssh可以通过 10.3.141.1
这个地址来登录树莓派操作。【强调,即便这时树莓派没有连接网线,它的无线AP也可用的】
当你用你的树莓派做智能小车的驱动板时,如果你需要通过电脑控制树莓派,那么只需要让你的电脑连接树莓派的无线AP信号,然后再选择ssh方式登录树莓派,进入树莓派的终端界面进行代码操控即可。
来源:oschina
链接:https://my.oschina.net/u/4344814/blog/4740576