MENU

树莓派通过frp实现ssh连接

November 13, 2022 • 兴趣

买了树莓派!

6aca7e5cecbb5078d79f68c4539b55d.jpg

不得不感慨树莓派现在都成了理财产品,三四百的东西都上千了,属于是魔幻现实主义了。(让我看看是什么掏空了我的钱包.jpg)

买树莓派的初衷是前一阵搭建的私有云已经快被我塞满了,鉴于云服务器昂贵的费用,我还是决定自己把服务搭建在本地。相比于其他解决方案,树莓派的可玩性更高,也方便我后期跑一些其他的服务。

这就不得不请教一下各位大大们了,树莓派 4b 的性能到底怎么样啊,目前计划的东西比较多,包括一个博客,一个私有云,一些脚本,MC 服务器(这个我也没抱太大希望就是了)等等,对这块小板子确实没什么信心

树莓派的基本配置在网上基本上其实都已经有了详细的介绍,在树莓派的烧录工具里也支持配置 ssh 以及 WiFi 等,因此本文将不再进行赘述。本文默认你已经完成了 Ubuntu 系统的烧录和登录,并拥有一个带有一个公网 IP 的云服务器。(如果有需要的话我也可以另开一个文章写写)

frp

frp 的相关文档可以在这里找到。

frp 主要由 客户端(frpc)服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。因此在配置过程当中,一定记得把自己云服务器安全组中对应的端口打开!

下载 frp

在 github 当中可以下载到目前最新版本的服务端和客户端文件。我这里下载的是 0.45.0。我们通过运行以下命令来直观的查看对应的架构

[root@VM-0-7-centos ~]# arch

对应的版本为:

frpLinux
386x86 架构
amd6464 位 x86 架构
armarm 架构
arm6464 位 arm 架构
mipsmips 架构
mips6464 位 mips 架构
mipslemipsle 架构
mips64le64 位 miplse 架构

因此在树莓派上,我应该使用 arm64 版本,在云服务器上我应该选择 amd64(x86 64 位架构)。

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

通过 ssh 访问内网机器

frps.ini 配置:

[common]
bind_port = 7001    #这里我用了7001你可以自己选

frpc.ini 配置:

[common]
server_addr = 你自己云服务器的公网ip
server_port = 7001  #这里我用了7001你可以自己选

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

启动 frps 和 frpc

./frps -c ./frps.ini

./frpc -c ./frpc.ini

一些要注意的坑

1.提示没有权限

-bash: ./frps: Permission denied

可以通过运行以下代码来给对应的文件副赋予权限 (frps 同理)

chmod 700 frps

2.客户端提示连接不到服务器

 connect: no route to host

放开你云服务器的对应端口,在本文中,你需要放开对应的 7001 端口(用来与树莓派连接)和 6000 端口(用来让你通过这个端口访问 ssh)

你可以在对应的云服务器供应商的控制台里放开响应的安全组。腾讯云的我没折腾明白,因此我用了以下命令来让机器防火墙放开对应端口:

firewall-cmd --permanent --add-port=7001/tcp
firewall-cmd --permanent --add-port=6000/tcp
firewall-cmd --reload

至此,ssh 连接已经建立成功,你可以通过访问你公网的 6000 端口来访问内网的机器

使用 systemd 控制 frps 及配置开机自启

这部分其实在 frp 文档中有详细的介绍,且几乎没有坑。我现在将其重点部分搬过来。

要使用 systemd 来控制 frps,需要先安装 systemd,然后在 /etc/systemd/system 目录下创建一个 frps.service 文件。

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini

[Install]
WantedBy = multi-user.target
  1. 使用 systemd 命令,管理 frps。

    # 启动frp
    systemctl start frps
    # 停止frp
    systemctl stop frps
    # 重启frp
    systemctl restart frps
    # 查看frp状态
    systemctl status frps
  2. 配置 frps 开机自启。

    systemctl enable frps

frpc 同理。

后记

其实本篇想把迁移私有云服务的部分全部写完的,但想了想这样反而会让文章没有重点,又臭又长(笑)。下一步打算把博客迁移到我的树莓派上,等放假把树莓派扔到家里再进行私有云的完整搭建,毕竟硬盘还没买(笑)