frp客户端连接不上服务端主因是网络层不通:确认frps监听0.0.0.0:7000、云防火墙放行7000及映射端口、frpc.ini中server_addr填公网IP/server_port填bind_port而非dashboard_port。

frp 客户端连接不上服务端的常见原因
绝大多数“内网穿透失败”其实卡在 frpc 启动后立刻断连或反复重连,不是配置逻辑错,而是网络层没通。先确认三件事:
-
frps服务端确实在运行,且监听的是公网可访问的 IP(比如0.0.0.0:7000),不是127.0.0.1:7000 - 云服务器防火墙(如阿里云安全组、腾讯云网络 ACL)放行了
frps的bind_port(默认7000)和你打算映射的端口(如ssh映射用的6000) -
frpc.ini里的server_addr填的是服务端公网 IP 或域名,不是内网 IP;server_port是frps的bind_port,不是dashboard_port
用 frp 映射 SSH 端口并稳定连接
目标是让外网能通过 ssh -p 6000 user@your-domain.com 连上内网机器的 22 端口。关键在于避免认证失败和连接中断:
- 在
frpc.ini中启用health_check_type = tcp,并设health_check_timeout_s = 3,让客户端主动探测服务端存活 - 加
login_fail_exit = false,否则一次鉴权失败(比如 token 错)会导致进程退出,systemd 不会自动拉起 - SSH 映射段必须写全:
[ssh]<br>type = tcp<br>local_ip = 127.0.0.1<br>local_port = 22<br>remote_port = 6000<br>use_encryption = true<br>use_compression = true
- 不要把
remote_port设成22—— 多数云厂商禁止非 root 用户绑定 1–1024 端口,且易被扫描爆破
frps dashboard 打不开或显示 404
这是配置项位置导致的典型误解。dashboard_port 和 dashboard_user/dashboard_pwd 必须写在 frps.ini 的 [common] 段,而不是单独建一个 [dashboard] 段。
正确写法:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
[common]<br>bind_port = 7000<br>dashboard_port = 7500<br>dashboard_user = admin<br>dashboard_pwd = pass123
然后确保服务器防火墙放行 7500,浏览器访问 http://your-server-ip:7500 即可。如果仍 404,请检查 frps 版本 —— v0.50.0+ 把 dashboard 改为独立子路由,旧版配置在新版里会失效。
为什么 frpc 映射 Web 服务时无法访问 / 返回 502
Web 映射(type = http)依赖 Host 头和域名路由,比 TCP 映射更敏感:
-
custom_domains必须填你实际访问的域名(如web.your-domain.com),且该域名已 DNS 解析到 frps 服务器 IP - 内网 Web 服务(如 Nginx)必须允许来自 frpc 所在机器的请求,检查
allow规则或防火墙是否拦了127.0.0.1或 frpc 本机 IP - 如果 Web 服务绑定了
127.0.0.1:8080,frpc 的local_ip就不能写成192.168.x.x,得保持一致为127.0.0.1 - 别开
use_encryption = true同时又用 HTTP(非 HTTPS)—— frp 加密只作用于 frp 协议层,不影响应用层协议,但可能干扰某些反向代理判断
HTTP 映射的调试成本远高于 TCP,建议首次验证先用 type = tcp + remote_port = 8080 绕过 Host 路由,确认通路后再切回 HTTP 模式。










