远程访问树莓派
远程访问树莓派
引言
第一次使用树莓派时,一般会配置两个东西:一个是ssh,一个是无线网络。配置好后,再用自己的电脑通过ssh连接树莓派就可以使用了。例如
1 | |
在本例中,需要注意树莓派的IP地址为192.168.3.1,是一个本地IP地址。这意味着我的电脑只有在该局域网中才能访问树莓派,在其他网络中是不行的。例如,我的个人电脑和树莓派连上我家的WiFi,那么我可以使用我的电脑与树莓派建立ssh连接。
graph LR;
subgraph 我的家
我家中的路由器-->PI0("192.168.3.1(树莓派)")
我家中的路由器-->PC0("192.168.3.2(我的电脑)")
我家中的路由器-->OD0(...)
end
当我周末去朋友家,想要用我的电脑访问树莓派时,以上方法便会失效,因为我的电脑和树莓派在不同的局域网中。
graph LR;
subgraph 我的家
我家中的路由器-->PI0("192.168.3.1(树莓派)")
我家中的路由器-->ND0("192.168.3.2(我家的设备,或者局域网中不存在该IP地址)")
我家中的路由器-->OD0(...)
end
subgraph 朋友家
朋友家的路由器-->ND1("192.168.3.1(朋友的设备,或者局域网中不存在该IP地址)")
朋友家的路由器-->PC0("192.168.3.2(我的电脑)")
朋友家的路由器-->OD1(...)
end
1 | |
为了在任意地点访问树莓派,必须使用一个公网IP进行中转。简单点说,公网IP是互联网中那些真正具有互联网通信能力的IP地址。在上文例子中,192.168.3.1就不是一个这样的地址,因为当我处于其他的网络中时,我便无法与之通信。对于一个公网IP,我可以在任何地点、任何网络中与之通信。
因此,为了在任意网络中访问树莓派,必须使用一个公网IP进行中转。我们把那些具有公网IP的电脑(机器)称为服务器。
开始
工具准备:
- 一台电脑
- 树莓派
- 服务器
- frp(重量级)
什么是frp
以下内容摘自frp的GitHub仓库
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
借助frp,我们可以像访问公网IP那样访问在内网中的树莓派。
安装
在frp的release页面上可以找到最新的frp下载包。可以使用arch或lscpu命令来查看服务器或树莓派的CPU架构,下载对应的正确版本。
这是我的服务器信息:
1 | |
因此我的服务器上需要下载linux_amd64的版本。
这是我的树莓派信息:
1 | |
因此我的树莓派上需要下载linux_arm的版本。
配置和启动
解压后进入frp文件夹,查看内容:
1 | |
其中frps和frpc分别是frp的服务端和客户端。同理,frps.ini和frpc.ini分别是frp的服务端配置文件和客户端配置文件。初始时frps.ini的内容如下:
1 | |
在服务器中启动frps:
1 | |
在树莓派中启动frpc时,要先修改frpc.ini中的server_addr字段。初始时frpc.ini的内容如下:
1 | |
修改server_addr字段为服务器的IP地址(假设服务器IP地址为x.x.x.x)。启动frpc:
1 | |
查看双方的连接信息,如无报错则frp服务启动并连接成功。如果连接失败,一个可能的原因是服务器的防火墙阻止了frp的连接,此时可以到服务器的控制台查看和更改防火墙设置。
连接树莓派
在电脑上通过ssh连接树莓派。这次不是选择树莓派的本地IP地址,而是选择服务器的IP地址,加上frpc.ini中配置的remote_port字段(在本例中为6000):
1 | |
这样,我们就可以在任何地方访问树莓派了。
设置frp系统服务
现在,虽然能通过公网IP访问树莓派,但是当服务器或者树莓派重启后,frp也因为设备重启关闭了。为了解决这一问题,我们要让frp开机自启动。一个非常好的解决方法是使用frp文件夹中的.service文件,让frp成为系统服务的一部分。
在上文中提到,frp的文件夹中有这些内容:
1 | |
进入systemd文件夹:
1 | |
这里以服务器设置frp系统服务为例。查看frps.service的内容:
1 | |
修改User选项
修改User=nobody为自己的用户名。当前用户名可以通过whoami命令查询。在本例中,假设我们的用户名是root。
1 | |
因此,该行应为User=root
复制frps.service
将修改后的frps.service复制到/usr/lib/systemd/system目录下:
1 | |
同时,注意到frp默认的系统服务启动方式是这样的:
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
此时/usr/bin文件夹中并没有frps,也不存在/etc/frp目录,因此我们的工作还未结束。
添加软链接
我们在/usr/bin/目录为frps创建软链接。建议以frps的绝对路径创建软链接:
1 | |
复制frps.ini
在/etc/路径下创建frp目录,并将frps.ini复制到该目录下::
1 | |
启动frp系统服务
一切准备完毕,可以开启frp系统服务了:
1 | |
查看frps服务状态:
1 | |
如果状态信息中没有报错,且显示frps服务正在运行,说明启动成功。
要停止frps服务:
1 | |
开启frp系统服务自启动
打开frps服务自启动:
1 | |
服务器重启后,可以查询到frps的进程信息,说明frps已自启动:
1 | |
要关闭 frps 服务自启动:
1 | |
在树莓派上也需要开启frp系统服务,操作流程大同小异,这里不再赘述。(全文完)