FRP 0.61.0 完整保姆级部署教程

文档版本:V1.1 FRP版本:v0.61.0 环境:

  • 服务端frps:公网云服务器 Ubuntu 22.04/24.04
  • 客户端frpc:本地笔记本 Ubuntu 桌面版 用途:内网穿透,将本地笔记本服务暴露到公网;配置systemd开机自启、日志、合盖不休眠;可直接作为操作手册使用。
    安全前置提醒
  1. 所有密钥 token、仪表盘密码务必自行修改,禁止直接使用文档示例字符串。
  2. 云服务器安全组、服务器防火墙需要放行对应端口。
  3. 不建议直接把22、3389端口直接暴露公网。

端口规划

端口 作用
7000(TCP) frps‑frpc通信握手端口,服务端监听
7500(TCP) frps Web仪表盘(查看连接状态)
8080(TCP) 示例业务穿透端口,可自行替换

云服务器控制台安全组需要放行:7000、7500、业务端口(示例8080)。


第一部分:公网服务器部署 frps(服务端)

1.1 下载 frp 程序包

登录公网服务器终端执行:

bash 复制代码
#下载v0.61.0安装包
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz

#解压压缩包
tar -zxvf frp_0.61.0_linux_amd64.tar.gz

#进入解压目录
cd frp_0.61.0_linux_amd64

1.2 部署服务端二进制程序

bash 复制代码
#复制frps程序到全局可执行目录
sudo cp frps /usr/local/bin/

#验证部署,输出版本代表正常
frps --version

1.3 创建配置目录与配置文件

bash 复制代码
#创建frp配置存放目录
sudo mkdir -p /etc/frp

#复制模板配置文件
sudo cp frps.ini /etc/frp/frps.ini

#编辑frps服务端配置
sudo nano /etc/frp/frps.ini

将下面完整配置粘贴进去,修改token、dashboard_pwd为自定义强密码

ini 复制代码
[common]
bind_port = 7000
# 客户端连接密钥,客户端必须完全一致,自行修改!
token = FrpServer_2026_ComplexToken_061

# Web管理仪表盘
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = ChangeMe_2026@Frp

# 日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 7

nano操作:Ctrl+O →回车保存;Ctrl+X退出编辑器。

1.4 创建 systemd 开机自启服务

bash 复制代码
sudo nano /etc/systemd/system/frps.service

完整服务单元内容:

ini 复制代码
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

1.5 启动 frps 服务

bash 复制代码
#重载systemd识别新增服务
sudo systemctl daemon-reload

#设置开机自启并立即启动服务
sudo systemctl enable --now frps

#查看运行状态,应当显示 active (running)
systemctl status frps

1.6 服务器防火墙放行端口(ufw)

bash 复制代码
sudo ufw allow 7000/tcp
sudo ufw allow 7500/tcp
sudo ufw reload

访问仪表盘地址:http://服务器公网IP:7500,输入账号密码查看客户端连接状态。

1.7 清理服务器端安装包(可选)

bash 复制代码
cd ~
rm -rf frp_0.61.0_linux_amd64
rm -f frp_0.61.0_linux_amd64.tar.gz

服务端常用运维命令

bash 复制代码
#查看实时日志
tail -f /var/log/frps.log

#重启服务(修改配置后必须执行)
sudo systemctl restart frps

#停止服务
sudo systemctl stop frps

#取消开机自启
sudo systemctl disable frps

第二部分:本地客户端 frpc 完整部署(Ubuntu桌面版,完整版,含下载解压全流程)

操作机器:本地Ubuntu笔记本(内网机器,不具备公网IP)

2.1 下载 frp 发布包

打开笔记本终端执行:

bash 复制代码
#下载frp v0.61.0安装包
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz

#解压压缩包
tar -zxvf frp_0.61.0_linux_amd64.tar.gz

#进入解压后的工作目录
cd frp_0.61.0_linux_amd64

2.2 部署frpc二进制可执行程序

bash 复制代码
#将frpc客户端程序复制到系统全局命令目录
sudo cp frpc /usr/local/bin/

#验证部署成功,打印版本号代表正常
frpc --version

2.3 创建客户端配置目录与frpc.ini配置

bash 复制代码
#创建frp配置存放目录
sudo mkdir -p /etc/frp

#复制模板配置文件
sudo cp frpc.ini /etc/frp/frpc.ini

#编辑客户端穿透配置
sudo nano /etc/frp/frpc.ini

粘贴完整客户端配置:

server_addr填写你的云服务器公网IP;token必须和服务端frps.ini完全一致,不能有多余空格。

ini 复制代码
[common]
server_addr = 你的云服务器公网IP
server_port = 7000
# 和服务端frps.ini内token保持完全一致
token = FrpServer_2026_ComplexToken_061

#客户端日志
log_file = /var/log/frpc.log
log_level = info
log_max_days = 7

#示例穿透配置,名字[web‑demo]可自定义,不能重复
[web-demo]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8080

配置字段说明:

  • local_port:笔记本本地需要对外暴露的端口
  • remote_port:公网服务器对外访问端口,云服务器安全组要放行该端口

Ctrl+O回车保存,Ctrl+X退出nano。

2.4 创建frpc systemd开机自启服务单元

bash 复制代码
sudo nano /etc/systemd/system/frpc.service

完整frpc.service内容:

ini 复制代码
[Unit]
Description=frpc client service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

2.5 启动frpc客户端服务

bash 复制代码
#重载systemd识别新增服务文件
sudo systemctl daemon-reload

#设置开机自启并立刻启动frpc
sudo systemctl enable --now frpc

#查看运行状态,预期输出 active (running)
systemctl status frpc

2.6 Ubuntu桌面版:合上笔记本盖子不休眠(防止frpc断连,必做)

Ubuntu桌面版默认合盖进入挂起休眠,网络全部断开,frp隧道中断。执行下面全套配置,实现合盖屏幕关闭、系统继续运行,网络不中断。

bash 复制代码
#修改logind配置
sudo sed -i 's/^#HandleLidSwitch=.*/HandleLidSwitch=ignore/' /etc/systemd/logind.conf
sudo sed -i 's/^#HandleLidSwitchExternalPower=.*/HandleLidSwitchExternalPower=ignore/' /etc/systemd/logind.conf
sudo sed -i 's/^#HandleLidSwitchDocked=.*/HandleLidSwitchDocked=ignore/' /etc/systemd/logind.conf

#重载logind配置,无需重启整机
sudo systemctl restart systemd-logind

#GNOME桌面层关闭合盖休眠动作
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'

⚠️重要注意:笔记本必须持续接通电源适配器;电池供电模式下虽然不休眠,但持续耗电,电池耗尽依然会断电休眠,frp隧道断开。

2.7 清理客户端本地安装包(可选,手册可写建议执行)

bash 复制代码
#回到家目录
cd ~
#删除解压目录与原始压缩包
rm -rf frp_0.61.0_linux_amd64
rm -f frp_0.61.0_linux_amd64.tar.gz

客户端常用运维命令

bash 复制代码
#查看frpc实时日志
tail -f /var/log/frpc.log

#修改frpc.ini配置之后必须重启客户端
sudo systemctl restart frpc

#停止frpc
sudo systemctl stop frpc

#取消开机自启
sudo systemctl disable frpc

#确认frpc全局路径
which frpc

第三部分:连通性验证测试

3.1 在本地笔记本启动简易web测试服务

yaml 复制代码
python3 -m http.server 8080

3.2 浏览器访问测试

访问地址:http://云服务器公网IP:8080

如果可以打开页面,代表frp内网穿透全部部署成功。测试完成关闭python测试服务。

第四部分:故障排查清单

  1. 客户端无法连接服务端

    • 确认服务端7000端口安全组、防火墙放行
    • frps.ini与frpc.ini的token完全一致,无多余空格换行
    • server_addr填写正确公网IP
  2. frpc状态running,但访问remote_port打不开业务

    • 云服务器安全组放行remote_port业务端口
    • 检查本地服务是否正常监听对应local_port
  3. 合上笔记本盖子frp隧道断开

    • 确认完整执行合盖不休眠全套脚本;笔记本接电源;部分机型BIOS存在Lid合盖策略,需要BIOS中设置为Do nothing
  4. 修改ini配置文件不生效

    • 修改配置后必须执行:sudo systemctl restart frpc

附录A:全路径对照表

对象 文件路径
frps二进制程序 /usr/local/bin/frps
frps配置文件 /etc/frp/frps.ini
frps服务单元文件 /etc/systemd/system/frps.service
frps日志 /var/log/frps.log
frpc二进制程序 /usr/local/bin/frpc
frpc配置文件 /etc/frp/frpc.ini
frpc服务单元文件 /etc/systemd/system/frpc.service
frpc日志 /var/log/frpc.log

附录B:扩展配置示例(直接追加到frpc.ini,common块之后)

修改完成执行:sudo systemctl restart frpc

B.1 多端口TCP映射示例

ini 复制代码
#示例1:本地8080端口映射公网8080
[web-demo]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8080

#示例2:本地3000端口映射公网3000
[app-node]
type = tcp
local_ip = 127.0.0.1
local_port = 3000
remote_port = 3000

#示例3:内网其他机器端口转发(本地局域网其他设备)
[lan-device]
type = tcp
local_ip = 192.168.1.100
local_port = 80
remote_port = 8090

B.2 HTTP域名访问配置(需要域名,80端口,服务端开放80端口)

前提:域名解析指向你的云服务器公网IP;云服务器安全组放行80端口;服务端frps.ini无需额外修改。

ini 复制代码
[web-http]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = frp-demo.yourdomain.com

访问:http://frp‑demo.yourdomain.com

注意:80端口为特权端口,云服务器防火墙/安全组放行;一台服务端多个http可以共用80端口,依靠域名区分,不需要分配多个remote_port。

B.3 SSH安全穿透示例(不直接暴露22端口)

不建议remote_port=22,改用高位端口

ini 复制代码
[ssh-proxy]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 22222

远程连接命令:

css 复制代码
ssh -p 22222 用户名@云服务器公网IP

附录C:配置回滚脚本

C.1 客户端:恢复笔记本默认合盖休眠策略(取消合盖不休眠)

ini 复制代码
#恢复logind.conf默认注释状态
sudo sed -i 's/^HandleLidSwitch=ignore/#HandleLidSwitch=suspend/' /etc/systemd/logind.conf
sudo sed -i 's/^HandleLidSwitchExternalPower=ignore/#HandleLidSwitchExternalPower=suspend/' /etc/systemd/logind.conf
sudo sed -i 's/^HandleLidSwitchDocked=ignore/#HandleLidSwitchDocked=suspend/' /etc/systemd/logind.conf

sudo systemctl restart systemd-logind

#恢复GNOME电源默认行为
gsettings reset org.gnome.settings-daemon.plugins.power lid-close-ac-action
gsettings reset org.gnome.settings-daemon.plugins.power lid-close-battery-action

C.2 完整卸载frpc客户端脚本

bash 复制代码
#停止服务,取消开机自启
sudo systemctl stop frpc
sudo systemctl disable frpc

#删除systemd服务文件
sudo rm -f /etc/systemd/system/frpc.service
sudo systemctl daemon-reload

#删除程序、配置、日志
sudo rm -f /usr/local/bin/frpc
sudo rm -rf /etc/frp
sudo rm -f /var/log/frpc.log

C.3 完整卸载frps服务端脚本(云服务器执行)

bash 复制代码
sudo systemctl stop frps
sudo systemctl disable frps
sudo rm -f /etc/systemd/system/frps.service
sudo systemctl daemon-reload

sudo rm -f /usr/local/bin/frps
sudo rm -rf /etc/frp
sudo rm -f /var/log/frps.log

附录D:安全最佳实践

  1. token使用大小写字母+数字+符号的长字符串,不要泄露。
  2. Web仪表盘7500端口,建议仅自己IP访问,不对外公开。
  3. 尽量使用HTTP域名方式业务访问,避免大量高位TCP端口暴露。
  4. SSH不要直接映射22,使用高位端口。
  5. 定期查看日志排查异常连接。
  6. 客户端笔记本务必接电源运行,电池模式即使不休眠,电量耗尽依然断隧道。
相关推荐
2401_894915532 小时前
Geo 优化源码部署实战:环境配置、参数调优完整指南
运维·服务器·数据库·tcp/ip·安全
爱和冰阔落3 小时前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
JavaPub-rodert3 小时前
Linux 下部署 MongoDB:从安装、配置到生产环境使用
linux·运维·mongodb
画中有画4 小时前
自动化脚本中如何启动/打开app的某个页面
运维·自动化
我星期八休息4 小时前
Linux—五种IO模型与非阻塞IO
linux·运维·服务器·网络·数据库·网络协议
hweiyu004 小时前
Linux命令:column
linux·运维·服务器
日常筹谋记5 小时前
ATS选不对运维两行泪:数据中心市电与柴发切换场景的双电源自动转换开关选型笔记
运维·数据库·笔记
绿蚁新亭5 小时前
Markdown Wiki 网页代码块复制至欧拉 Linux Shell 脚本隐形字符故障完整复盘
linux·运维·服务器
mengge.cloud5 小时前
LVS 小白完整教程(Linux虚拟服务器负载均衡)
linux·运维·服务器·负载均衡·lvs