前言
FRP v0.60+ 已弃用旧版INI配置,改用TOML格式导致大量教程失效。本文基于实测分享个人经验,通过可复用的配置模板(含服务器连接、代理规则、防火墙联动),五分钟实现本地Web服务/SSH公网穿透,解决语法报错、端口冲突等高频问题。
文章目录
一、环境准备
1.1 服务端要求
- 拥有公网IP
- 操作系统:推荐 Linux(CentOS/Ubuntu)
- 建议配置:1核2G以上,带宽5Mbps以上
1.2 客户端要求
- 操作系统:支持Linux/Windows
- 网络:能够访问公网服务器
- 本地服务:需要暴露的Web服务或SSH服务
1.3 FRP版本选择
- 从 FRP GitHub 下载对应系统的服务端(
frps
)和客户端(frpc
)程序 - 建议选择最新的稳定版本,本文使用v0.60+
提示:本文使用的服务器端为阿里云的轻量应用服务器,系统为Ubuntu,因此以Ubuntu系统演示,实际环境只要服务器带有公网IP都可以
二、服务器端防火墙配置
2.1 云服务商安全组配置
-
必要性说明
- 所有云服务器(如阿里云、腾讯云)均通过安全组策略控制入站流量,需手动放行 FRP 相关端口。
- 核心端口(仅为示范,可自定义):
4398
:FRP 服务端与客户端通信端口(TCP)4399
:HTTP/HTTPS 服务转发端口(TCP)4400
:Dashboard 监控面板端口(TCP)
-
配置步骤(以阿里云为例)
- 登录云控制台 → 进入安全组管理 → 添加入方向规则:
- 协议类型:TCP
- 端口范围:
4000/5000
(批量覆盖所需端口) - 授权对象:
0.0.0.0/0
(允许所有公网访问)
- 建议配置:生产环境应限制源 IP 范围(如仅允许办公网络 IP)。
- 登录云控制台 → 进入安全组管理 → 添加入方向规则:
图1:在阿里云控制台的安全组配置页面,添加新的入方向规则
图2:配置安全组规则,设置端口范围和授权对象
2.2 操作系统防火墙配置
-
工具选择
- 推荐使用
ufw
(Uncomplicated Firewall),适用于 Ubuntu/Debian 系统。 - CentOS 用户可替换为
firewalld
(命令略有差异)。
- 推荐使用
-
ufw 安装与基础操作
# Ubuntu/Debian 安装
sudo apt update && sudo apt install ufw -y
# CentOS 安装(需 EPEL 源)
# 我的Ubuntu默认安装工具也为yum
sudo yum install epel-release -y
sudo yum install ufw -y
- 端口放行与生效
# 启用防火墙
sudo ufw enable
# 放行必要端口(TCP)
sudo ufw allow 4398/tcp
sudo ufw allow 4399/tcp
sudo ufw allow 4400/tcp
# 重新加载配置
sudo ufw reload
# 查看规则状态
sudo ufw status numbered
- 操作验证
- 预期输出应包含
4398/tcp ALLOW
、4399/tcp ALLOW
、4400/tcp ALLOW
规则。
- 预期输出应包含
2.3 端口连通性测试
在配置完成后,建议进行端口连通性测试,确保防火墙配置正确:
telnet 公网IP/域名 测试端口
# 例如
telnet 153.3.238.28 80
telnet www.baidu.com 80
如果提示找不到telnet
命令,需要先安装telnet工具:
图3:在Windows控制面板中启用Telnet客户端功能
图4:勾选Telnet客户端选项并确认安装
三、服务端配置
3.1 解压服务端文件
下载并解压对应系统的FRP压缩包:
图5:解压FRP服务端文件,注意保留必要的配置文件
提示:可以删除解压文件夹中的客户端文件
frpc.toml
,避免混淆
3.2 编辑配置文件
创建并编辑 frps.toml
文件,配置服务端参数:
# 核心参数
bindAddr = "0.0.0.0"
bindPort = 4398
#【令牌,与本地客户端保持一致】
auth.token = "********"
# HTTP/HTTPS 入口
vhostHTTPPort = 4399
# 监控面板
webServer.addr = "0.0.0.0"
webServer.port = 4400
webServer.user = "admin"
webServer.password = "********"
# 端口白名单(限制可暴露端口范围)
allowPorts = [
{ start = 4398, end = 4400 },
{ single = 4399 }
]
# 日志管理(可选)
log.to = "/var/log/frps.log"
log.level = "warn"
log.maxDays = 7
配置说明:
bindAddr
:服务端监听地址,0.0.0.0表示监听所有网络接口auth.token
:认证令牌,用于客户端连接验证allowPorts
:限制可转发的端口范围,提高安全性log
:配置日志记录,方便问题排查
四、客户端配置
4.1 解压客户端文件
下载并解压对应系统的FRP客户端压缩包:
图6:解压FRP客户端文件,准备配置
提示:可以删除解压文件夹中的服务端文件
frps.toml
,避免混淆
4.2 编辑配置文件
创建并编辑 frpc.toml
文件,配置客户端参数:
# 连接服务端
serverAddr = "your_server_ip" # 替换为公网服务器IP
serverPort = 4398
#【令牌,与公网服务端保持一致】
auth.token = "********"
# HTTP 服务穿透
[[proxies]]
name = "web"
type = "http"
localPort = 8000
customDomains = ["your_domain.com", "your_server_ip"] # 替换为实际域名/IP
# SSH 穿透示例(可选)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 4399
配置说明:
serverAddr
:填写公网服务器IP地址auth.token
:必须与服务端配置的令牌一致proxies
:配置需要穿透的服务,支持多个服务配置
五、启动FRP服务
5.1 启动服务端
- 直接启动
在frp当前目录下运行:
frps -c frps.toml
- 配置系统服务(推荐)
创建系统服务文件:
vim /etc/systemd/system/frps.service
添加以下内容:
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /root/frp/frp_0.61.1_linux_amd64/frps -c /root/frp/frp_0.61.1_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
服务管理命令:
systemctl start frps.service # 启动
systemctl stop frps.service # 停止
systemctl restart frps.service # 重启
systemctl status frps.service # 查看状态
systemctl enable frps.service # 开机自启动
systemctl disable frps.service # 禁用开机自启动
5.2 启动客户端
在frp当前目录下运行:
./frpc.exe -c frpc.toml
六、效果验证
6.1 连接状态检查
查看客户端连接状态:
图7:客户端成功连接到服务端,显示连接状态和代理信息
6.2 管理面板访问
访问FRP管理面板:
浏览器键入
http://公网IP:4400
进入frps dashboard
图8:FRP管理面板登录界面,输入配置的用户名和密码
图9:管理面板显示连接状态和流量统计信息
6.3 服务测试
- 启动本地服务
图10:在本地启动需要穿透的Web服务
- 测试访问
图11:通过公网IP访问本地服务,验证穿透是否成功
常见问题解决
-
连接失败
- 检查防火墙配置
- 验证token是否一致
- 确认端口是否开放
-
服务无法访问
- 检查本地服务是否正常运行
- 验证端口映射配置
- 查看FRP日志排查问题
-
性能优化建议
- 使用最新版本FRP
- 合理配置端口范围
- 定期检查日志文件