为了使家中的树莓派能通过公网访问,我们需要一款内网穿透软件,笔者在这里选择的是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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。