内网穿透(frp/ngrok)连不上?服务端、隧道与防火墙
内网穿透让无公网 IP 的主机暴露到外网,frp、ngrok 等工具很流行,但『客户端显示 online 却访问不了』很常见。问题在服务器端口、隧道类型、防火墙和域名。下面系统排查。
一、确认服务端真的在监听
- 在服务器执行 netstat -tlnp 或 ss -tlnp,确认 frps 的 7000(控制)与映射端口在监听。
- 云服务器务必在 安全组 放通对应端口,这是最常见被忽略的一点。
- 确认 bind_addr 不是只绑 127.0.0.1,否则外部连不进,应绑 0.0.0.0。
二、客户端配置与令牌
- 核对 server_addr / server_port 正确,且 token(若服务端设了)两端一致,错 token 会静默断连。
- 确认 type(tcp/http/https)与服务端支持的一致,乱配会导致隧道不建立。
- 看 frpc 日志是否报 login to server failed 或 proxy xxx start error,日志最直接。
三、内网目标与本地防火墙
- 确认 local_ip/local_port 指向正确的内网服务且本机可访问,先在内网 curl 验证。
- 确认内网主机防火墙放通该端口,且服务监听在 0.0.0.0 而非仅 127.0.0.1。
- 若目标服务有 host 校验/防盗链,可能限制来源 IP 导致访问被拒。
四、域名与 HTTP 类穿透
- http 隧道若用 custom_domains,确认域名已 A 记录指向服务器公网 IP。
- 确认域名在 frps 的 subdomain_host 白名单内,否则被拒。
- HTTPS 注意证书路径与端口,证书错误会让客户端访问直接失败。
五、用外网环境验证
- 用 手机流量或外部 VPS 访问服务器公网IP:端口,排除本地网络影响。
- 服务器侧抓包 tcpdump -i eth0 port 映射端口,看外部请求是否到达,区分是网络问题还是应用问题。
技术总结:frp/ngrok 连不上先看服务端端口与安全组是否放通、bind 是否 0.0.0.0,再核 token 与 type 匹配,最后确认内网目标可达与域名解析。外网抓包能快速分断点是网络还是应用。