frp必须用toml格式配置,禁用默认dashboard、强化auth.token、限制allowports,并通过systemd管理服务,否则存在严重安全与稳定性风险。

frp 能用,但默认配置直接暴露在公网等于裸奔;必须改 auth.token、关掉默认 dashboard、限制 allowPorts,否则几小时内就会被扫描器爆破。
frps 服务端必须用 TOML 格式,INI 已被弃用
0.65 版本起,frps.ini 不再支持新特性(比如 allowPorts 的数组写法、更细粒度的认证策略),强行用会静默忽略配置项,导致端口失控或 token 失效。
- 新建
/etc/frp/frps.toml,不要沿用旧.ini文件名 -
bindPort必须是云服务器安全组已放行的端口(如7000),不能只靠本地防火墙 -
auth.token必须是高强度随机字符串(至少 16 位,含大小写字母+数字+符号),不能是123456或admin - 仪表盘(
webServer)默认监听0.0.0.0:7500,生产环境建议注释掉整段,或改addr = "127.0.0.1"
frpc 客户端配置里 server_addr 不能填域名别名
很多用户填 server_addr = my-frp.example.com 后连不上,其实不是 DNS 问题,而是 frpc 默认不走系统 resolv.conf,也不支持 /etc/hosts 解析 —— 它只认 IP 或能被 Go 标准库 net.LookupIP 直接解析的域名。
- 首次部署建议直接填服务端公网 IPv4 地址(如
203.205.123.45),排除 DNS 干扰 - 如果必须用域名,确保该域名有 A 记录且 TTL 较低(
60秒以内),并加dns_server = "8.8.8.8"强制指定 DNS -
auth.token必须和服务端完全一致,区分大小写,多一个空格都会报invalid auth method - HTTP 类型代理中
custom_domains填的域名,必须提前在 DNS 解析到服务端公网 IP,否则浏览器直接报ERR_NAME_NOT_RESOLVED
启动后连接失败,先查这三处日志和状态
frp 不报错 ≠ 连接成功。常见“看起来启动了,但访问不了”的情况,90% 出在这三处。
- 服务端执行
sudo ss -tlnp | grep :7000,确认frps真正在监听,且State是LISTEN,不是SYN-RECV卡住 - 客户端启动时加
-l /var/log/frpc.log,查看日志里是否有login to server success;若只有try to connect to server循环,说明网络不通或 token 错 - 服务端 dashboard(如开启)里看
Proxies列表是否为空;为空说明客户端没注册上来,不是端口转发问题,是控制通道根本没建好
想长期运行必须配 systemd,别用 nohup &
nohup ./frps -c /etc/frp/frps.toml & 看似简单,但进程无法自动重启、日志不落盘、升级时 kill 不干净,线上环境基本不可用。
- 写
/etc/systemd/system/frps.service,核心字段:Type=simple、Restart=on-failure、RestartSec=5 -
ExecStart必须带完整路径:/usr/local/bin/frps -c /etc/frp/frps.toml,不能只写frps - 启动后执行
sudo systemctl status frps,确认状态是active (running),不是activating (auto-restart)循环 - 日志统一走 journalctl:
sudo journalctl -u frps -f,比手动重定向更可靠
真正麻烦的从来不是配置本身,而是 token 写错一次、dashboard 暴露在外、或 systemd 里漏了 RestartSec 导致服务挂了三天没人发现 —— 这些细节不检查,frp 就只是个半成品隧道。











