FRP实战:为ARM工控机搭建稳定,安全的4G远程SSH运维通道
前言
- 本文目标: 为处于任何网络环境下的ARM工控机,搭建一套稳定、安全、可扩展的远程SSH运维通道.解决设备位于4G网络、NAT内网等无法直接访问的痛点,实现对多台设备的统一、便捷管理.
云服务器端(frps)部署 - 搭建我们的“中继总机”
云服务器是整个远程体系的中枢,它的配置关乎所有设备能否正常接入.
准备工作:下载并解压FRP
首先,我们通过SSH登录云服务器.我的服务器是标准的x86_64
架构,因此选择linux_amd64
版本.
1 | # 前往FRP的GitHub Release页面获取最新版本链接 |
核心配置:编写 frps.ini
我们需要编辑服务端配置文件 frps.ini
,为我们的“总机”设定规则.
1 | nano frps.ini |
我采用了极简且安全的配置,清空文件后写入以下内容:
1 | [common] |
安全加固:配置防火墙
遵循“最小权限”原则,我们只向公网暴露绝对必要的端口.
7000/tcp
: FRP服务端监听端口,供所有客户端连接.6001/tcp
: 我规划的第一个设备的远程SSH映射端口.
1 | # 以ufw防火墙为例 |
稳定运行:配置Systemd守护服务
为了让frps
能在后台稳定运行并实现开机自启,我们为它创建一个Systemd服务.这是生产环境的标配.
1 | sudo nano /etc/systemd/system/frps.service |
写入以下服务配置(注意:ExecStart
中的路径必须是您服务器上的绝对路径):
1 | [Unit] |
最后,启动并设置开机自启:
1 | sudo systemctl daemon-reload |
工控机端(frpc)部署 - 让设备主动报到
现在轮到我们的主角——ARM工控机.我们需要在其上部署frpc
客户端.
准备工作:下载并解压FRP(ARM版)
我的工控机是aarch64
架构,因此必须下载linux_arm64
版本,这一点至关重要.
1 | # 登录工控机后执行 |
核心配置:编写 frpc.ini
同样,我们编辑客户端配置文件 frpc.ini
,告诉它如何找到“总机”.
1 | nano frpc.ini |
清空并写入以下配置:
1 | [common] |
稳定运行:配置Systemd守护服务
与服务端一样,我们也为客户端配置守护服务,确保其断线重连和开机自启.
1 | sudo nano /etc/systemd/system/frpc.service |
写入配置(同样,注意ExecStart
中的路径必须是工控机上的绝对路径):
1 | [Unit] |
启动并设置开机自启:
1 | sudo systemctl daemon-reload |
验证成果:实现首次远程穿透
所有铺垫工作完成,激动人心的时刻到了.现在,我可以在我的本地电脑上,打开终端,执行一条简单的命令:
1 | # ssh <工控机用户名>@<云服务器IP> -p <远程端口> |
输入工控机的密码后,我成功登录了!这标志着我们的远程运维通道已经完全打通.
横向扩展:管理多台设备
这套架构的美妙之处在于其强大的扩展性.当我需要接入第二台、第三台设备时,操作非常简单.
- 服务端:只需在防火墙上为新设备开放一个新的远程端口即可(如
6002
). - 客户端:在新设备上部署
frpc
,修改其frpc.ini
文件中的隧道名称和**remote_port
**,确保它们是唯一的.
例如,为“工控机B”的配置:
1 | # ... [common]部分不变 ... |
这样,我便可以通过访问服务器的6002
端口来单独管理工控机B.
批量部署:镜像灌装的最佳实践
对于批量生产,我采用了镜像灌装的方式.但需要注意,直接复制镜像会导致所有设备的frpc.ini
配置冲突.我的最佳实践流程是:
- 制作一个包含FRP程序和
frpc.service
的“模板镜像”. - 将镜像灌装到新设备.
- 在新设备首次开机后,必须执行一个初始化脚本或手动修改
frpc.ini
文件,为其分配一个唯一的隧道名和remote_port
. - 最后重启
frpc
服务 (systemctl restart frpc
),使新配置生效.