树莓派搭建git服务器并实现公网访问(一)共2篇—安装frp实现内网SSH穿透

12次阅读

共计 1725 个字符,预计需要花费 5 分钟才能阅读完成。

为了使家中的树莓派能通过公网访问,我们需要一款内网穿透软件,笔者在这里选择的是 frp,相比其他方式具有开源免费,配置简单,无端口数限制的优势。
下载地址:https://github.com/fatedier/f…
一、下载安装包服务端和客户端都在同一个安装包里,但需要根据自己系统分别下载对应的安装包笔者树莓派安装 32 位 CentOS 操作系统,作为客户端下载的版本为 frp_0.21.0_linux_arm.tar.gz 服务端为某云服务器安装 64 位 CentOS 操作系统,作为服务端下载版本为 frp_0.21.0_linux_amd64.tar.gz
二、配置将压缩包分别解压,可以看到 frps 为服务端启动脚本,frpc 为客户端启动脚本。服务端创建 frps.ini 文件,具体配置项可以参照 frps_full.ini 文件客户端创建 frpc.ini 文件,具体配置项可以参照 frpc_full.ini 文件
笔者服务端配置如下:
[common]
# frp 服务端端口(必须)
bind_port = 7000
# frp 服务端密码(必须)
token = 请设置自己的密码
# 认证超时时间,由于时间戳会被用于加密认证,防止报文劫持后被他人利用
# 因此服务端与客户端所在机器的时间差不能超过这个时间(秒)
# 默认为 900 秒,即 15 分钟,如果设置成 0 就不会对报文时间戳进行超时验证
authentication_timeout = 0
# 仪表盘端口,只有设置了才能使用仪表盘(即后台)
dashboard_port = 7500
# 仪表盘访问的用户名密码,如果不设置,则默认都是 admin
dashboard_user = admin
dashboard_pwd = admin
客户端配置如下:
[common]
server_addr = 请填写云服务器 ip 地址
server_port = 7000
token = 请填写服务端设置的密码
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
remote_port = 6001
三、运行服务端启动:nohup ./frps -c ./frps.ini & 客户端启动:客户端由于远程操作需要重启系统或者客户端进程被意外杀掉后,服务端无法再连接上。为了能保证客户端服务的高可用只设置客户端开机自启是不行的,笔者的处理办法为加一个定时脚本每隔一段时间扫描客户端进程,如果不存在就启动。笔者的定时启动脚本如下 monitor.sh:
#!/bin/sh
Monitor()
{
ps -fe|grep frpc |grep -v grep
if [$? -ne 0];then
echo “start process…..”
nohup /usr/local/frp/frp_0.21.0_linux_arm/frpc -c /usr/local/frp/frp_0.21.0_linux_arm/frpc.ini &
fi
}
Monitor>>/usr/local/frp/monitor.log
编辑 /etc/crontab 文件在最后一行加入以下代码,设置每一分钟扫描一次
*/1 * * * * root /bin/sh /usr/local/frp/monitor.sh
四、完结在浏览器访问服务端 IP 地址加映射的 SSH 端口号即可查看仪表盘页面如下:

SSH 工具配置服务端 IP 地址,端口为映射的 SSH 端口(此处笔者的为 6001),用户名和密码为客户端的用户名密码,即可通过公网直接访问局域网内的机器了。

另外如果服务端配置设置了 authentication_timeout 参数且不为 0 需要保证客户端和服务端时间同步,不然会启动失败。需要设置的同学可以参照以下方式进行设置:
ntpdate 0.asia.pool.ntp.org #同步网络时间
timedatectl set-timezone Asia/Shanghai #设置时区
然而树莓派并不像我们目前的笔记本或者主机一样存在 cmos 电池,在断电之后,时间就停留在当前这个时间点,下次开机依然从这次开始。因此可参照前边在定是脚本文件加入以下代码:
/1 * * * * ntpdate 0.asia.pool.ntp.org

正文完
 0