前言
最近在项目中需要使用 frp 进行内网穿透,服务端我选择了使用宝塔面板部署(非 Docker 方案)。本以为按照官方教程一步步操作就能顺利完成,没想到在部署客户端的过程中却遇到了各种问题,折腾了好久才解决。今天就把这次踩坑的经历分享给大家,希望能帮到同样遇到这个问题的朋友。
什么是 frp?
在开始之前,先简单介绍一下 frp。frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透。简单来说,它可以帮助你从公网访问内网中的服务,非常适合开发测试、远程办公等场景。
遇到的问题
按照官方教程(gofrp.org/zh-cn/docs/…
踩坑记录
官方文档的配置陷阱
虽然官方文档中给出了 TOML 格式的配置文件示例,但是其语法存在错误,不能直接使用。这一点对于新手来说非常容易踩坑,因为你会认为官方文档肯定是正确的,结果照搬之后却发现无法运行。
错误的配置示例
serverAddr = "x.x.x.x"
serverPort = 7000
# 如果默认的 STUN 服务器不可用,可以配置一个新的 STUN 服务器
# natHoleStunServer = "xxx"
[[visitors]]
name = "p2p_ssh_visitor"
type = "xtcp"
# 要访问的 P2P 代理的名称
serverName = "p2p_ssh"
secretKey = "abcdefg"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
bindPort = 6000
# 如果需要自动保持隧道打开,将其设置为 true
# keepTunnelOpen = false
这段配置看起来没什么问题,但实际上存在语法错误,导致 frp 客户端无法正确解析。
正确的配置方式
经过多次尝试和查阅资料,我找到了正确的配置方式。关键在于使用正确的 TOML 语法结构:
[common]
server_addr = "你的服务器IP"
server_port = 7500
user = "local_server"
[common.auth]
method = "token"
token = "你的认证token"
[common.log]
file_path = "./frpc.log"
level = "info"
max_days = 7
disable_color = true
[common.transport]
protocol = "tcp"
tcp_mux = true
heartbeat_interval = -1
tcp_mux_keepalive_interval = 30
[[proxies]]
name = "local_web"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 8080
remote_port = 8081
pool_count = 5
配置详解
基础配置
[common]:通用配置段server_addr:frp 服务器的 IP 地址server_port:frp 服务器的监听端口user:客户端标识,用于区分不同的客户端
认证配置
[common.auth]:认证配置段method:认证方式,这里使用 tokentoken:认证密钥,需要与服务端配置一致
日志配置
[common.log]:日志配置段file_path:日志文件路径level:日志级别(info/debug/warn/error)max_days:日志保留天数disable_color:是否禁用彩色日志
传输配置
[common.transport]:传输配置段protocol:传输协议,通常使用 tcptcp_mux:是否启用 TCP 多路复用heartbeat_interval:心跳间隔,-1 表示使用默认值tcp_mux_keepalive_interval:TCP 多路复用保活间隔
代理配置
[[proxies]]:代理配置段(注意是双中括号,表示数组)name:代理名称,需要唯一type:代理类型(tcp/http/https 等)local_ip:本地服务 IP 地址local_port:本地服务端口remote_port:远程访问端口pool_count:连接池大小
关键要点总结
- 注意 TOML 语法:TOML 格式要求使用点号(.)来表示嵌套结构,而不是直接写在一起
- 使用正确的配置段:基础配置要放在
[common]段下,子配置使用[common.xxx]的格式 - 数组配置使用双中括号:如
[[proxies]]表示这是一个数组,可以配置多个代理
结语
这次 frp 配置的经历让我深刻体会到,即使是官方文档也可能存在错误(我也不知道是不是错误,总之是不对的结果,也可能呢有别的问题,如果有错误,欢迎评论给我和大家说明) ,作为开发者我们需要保持怀疑精神,遇到问题时要善于排查和验证。希望这篇文章能帮助到正在使用 frp 的朋友们,少走一些弯路。
作者:行止 日期:2026-01-17 版本:1.0