把树莓派变身无线AP

家住魔仙堡 提交于 2020-11-24 12:46:50

把树莓派变身无线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,到底在网络中是什么角色。

在这里插入图片描述

图中的 RPiPC#1PC#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方式登录树莓派,进入树莓派的终端界面进行代码操控即可。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!