文档版本:V1.1 FRP版本:v0.61.0 环境:
- 服务端frps:公网云服务器 Ubuntu 22.04/24.04
- 客户端frpc:本地笔记本 Ubuntu 桌面版 用途:内网穿透,将本地笔记本服务暴露到公网;配置systemd开机自启、日志、合盖不休眠;可直接作为操作手册使用。
安全前置提醒
- 所有密钥 token、仪表盘密码务必自行修改,禁止直接使用文档示例字符串。
- 云服务器安全组、服务器防火墙需要放行对应端口。
- 不建议直接把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测试服务。
第四部分:故障排查清单
-
客户端无法连接服务端
- 确认服务端7000端口安全组、防火墙放行
- frps.ini与frpc.ini的
token完全一致,无多余空格换行 server_addr填写正确公网IP
-
frpc状态running,但访问remote_port打不开业务
- 云服务器安全组放行remote_port业务端口
- 检查本地服务是否正常监听对应local_port
-
合上笔记本盖子frp隧道断开
- 确认完整执行合盖不休眠全套脚本;笔记本接电源;部分机型BIOS存在Lid合盖策略,需要BIOS中设置为Do nothing
-
修改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:安全最佳实践
- token使用大小写字母+数字+符号的长字符串,不要泄露。
- Web仪表盘
7500端口,建议仅自己IP访问,不对外公开。 - 尽量使用HTTP域名方式业务访问,避免大量高位TCP端口暴露。
- SSH不要直接映射22,使用高位端口。
- 定期查看日志排查异常连接。
- 客户端笔记本务必接电源运行,电池模式即使不休眠,电量耗尽依然断隧道。