实现CentOS系统下frp服务开机自启的完整指南
在服务器管理中,确保关键服务开机自动启动是运维工作的重要环节,对于使用frp(Fast Reverse Proxy)进行内网穿透的用户而言,配置frp客户端或服务端随系统启动,能有效避免因服务器意外重启导致的服务中断,本文将详细介绍在CentOS系统中实现frp开机自启的两种主流方法,并提供安全优化建议。

一、准备工作:安装frp与基础配置
在配置开机启动前,需确保已正确安装frp并完成基础配置。
1、下载frp程序
- 访问frp官方GitHub仓库,根据系统架构选择对应版本(如frp_0.52.3_linux_amd64.tar.gz)。
- 使用wget命令下载至服务器:
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz - 解压并移动到指定目录(如/usr/local/frp):
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
mv frp_0.52.3_linux_amd64 /usr/local/frp2、配置frp参数

- 编辑客户端配置文件(frpc.ini)或服务端配置文件(frps.ini),设置server_addr、token等必要参数。
- 测试frp服务是否能正常运行:
cd /usr/local/frp
./frpc -c frpc.ini # 客户端启动命令
# 或
./frps -c frps.ini # 服务端启动命令二、方法一:通过systemd服务实现开机自启
systemd是CentOS 7及以上版本默认的初始化系统,通过编写服务单元文件可精准控制进程行为。
1、创建systemd服务文件
- 新建文件/etc/systemd/system/frpc.service(客户端)或/etc/systemd/system/frps.service(服务端):

vi /etc/systemd/system/frpc.service- 输入以下内容(以客户端为例,注意替换路径和配置文件名称):
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target2、启用并启动服务
- 重载systemd配置:
systemctl daemon-reload- 设置开机自启并立即启动服务:
systemctl enable frpc
systemctl start frpc- 检查服务状态:
systemctl status frpc三、方法二:使用rc.local实现开机启动(兼容旧版本系统)
对于使用CentOS 6或习惯传统脚本的用户,可通过修改rc.local文件实现。
1、赋予rc.local执行权限
CentOS 7默认未启用rc.local,需先添加权限:
chmod +x /etc/rc.d/rc.local
2、添加启动命令
- 编辑/etc/rc.local文件:
vi /etc/rc.local- 在文件末尾添加以下命令(示例为客户端):
/usr/local/frp/frpc -c /usr/local/frp/frpc.ini > /var/log/frpc.log 2>&1 &3、验证生效性
- 重启服务器后,执行ps -ef | grep frpc确认进程是否存在。
四、安全与稳定性优化建议
1、最小权限原则
- 避免使用root用户运行frp,可新建专用用户并限制目录权限:
useradd -s /sbin/nologin frpuser
chown -R frpuser:frpuser /usr/local/frp - 在systemd服务文件中将User=root改为User=frpuser。
2、日志管理与监控
- 指定日志输出路径,便于排查问题,例如在frpc.ini中增加:
[common]
log_file = /var/log/frpc.log
log_level = info - 配合logrotate定期归档日志,避免磁盘占满。
3、防火墙配置
- 开放frp所需端口(如7000为服务端默认端口),同时限制访问来源IP:
firewall-cmd --permanent --add-port=7000/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port protocol="tcp" port="7000" accept'
firewall-cmd --reload五、常见问题与解决方案
Q:服务启动失败,提示“permission denied”
A:检查文件权限(尤其是frpc/frps可执行文件)及SELinux状态,可暂时禁用SELinux测试:setenforce 0。
Q:systemd服务状态显示“Active: activating (auto-restart)”
A:查看日志journalctl -u frpc -xe,通常因配置文件错误或端口冲突导致。
Q:开机启动后frp连接不稳定
A:在systemd服务中增加Restart=always参数,并检查网络延迟或服务端配置。
作为长期使用frp的开发者,个人更推荐通过systemd管理服务:它不仅支持进程守护、自动重启,还能通过journalctl集中查看日志,极大提升了运维效率,定期更新frp版本至官方最新稳定版,可避免潜在漏洞对服务造成影响。
