未归类 · network · 验证于 2026-08-31 ✓ 实测验证

frp

已验证 2026-08-31frps/frpc 隧道 + 热加载实测通过;status/reload 需先开 webServer(admin 服务),否则报错。

内网穿透/反向隧道:无公网 IP 也能经公网 frps 服务器访问内网服务(SSH/Web/远程联调)

你会遇到什么

你在内网/校园网里跑了个服务(家里的 NAS、实验室的开发机、WSL 里的 Web 服务),想在外面随时访问,但没有公网 IP。运营商不给、路由器设置复杂、校园网压根没有入站——这是「无公网 IP 远程访问」问题。frp 就是干这个的:一台有公网 IP 的服务器(便宜的云服务器即可)当中转,内网机器主动连出去建隧道,外面的人访问服务器端口就等于访问你的内网服务。 什么时候用:

  • 家里/实验室机器没有公网 IP,要 SSH 回内网机器;
  • 本地开发的服务要临时暴露给外面看(远程联调、给同事演示、微信小程序/回调调试);
  • 内网 Web 服务通过公网域名/端口对外提供(HTTP 虚拟主机)。

什么时候别用:只是本机/局域网内互相访问(用不到穿透);需要长稳大流量的生产代理(考虑成熟网关方案)。

本文路径:快速修复(一条命令本地跑通隧道)→ 一步步来(公网服务器部署)→ 怎么确认修好了 → FAQ(连不上怎么排查)。

为什么会这样

frp 是反向隧道:不是把公网流量「打进来」,而是内网机器主动连出去,和公网服务器保持一条长连接。外部用户访问「服务器 IP:端口」时,frps 把流量沿这条隧道转给内网机器上的 frpc,frpc 再转给本机真实服务。

  • frps(server):跑在有公网 IP 的机器上,负责监听端口、收流量、沿隧道转发;
  • frpc(client):跑在内网机器上,主动连 frps 注册代理,接收转发来的流量转给本地服务;
  • 代理(proxy):frpc.toml 里的一条映射规则(如「服务器 6000 端口 → 本机 22 端口」)。

装完它动哪里:两个独立二进制(frps/frpc)+ 各自配置文件,不碰系统包管理器、不写全局配置;建议配合 systemd 做开机自启。

快速修复(不想看讲解,一段命令本地跑通隧道)

note: 下面命令合并成一条:下载 → 解压 → 起 frps → 起 frpc → 经隧道验证,全程 127.0.0.1 回环隔离(端口 27000 段),失败时逐段拆开按「一步步来」走
mkdir -p /tmp/frp-demo && cd /tmp/frp-demo && curl -L -o frp.tar.gz https://ghfast.top/https://github.com/fatedier/frp/releases/download/v0.71.0/frp_0.71.0_linux_amd64.tar.gz && tar xzf frp.tar.gz --strip-components=1 && printf 'frp tunnel demo page\n' > index.html && (python3 -m http.server 27081 --bind 127.0.0.1 >/dev/null 2>&1 &) && printf 'bindAddr = "127.0.0.1"\nbindPort = 27000\n' > frps.toml && ./frps -c frps.toml >/dev/null 2>&1 & sleep 1; printf 'serverAddr = "127.0.0.1"\nserverPort = 27000\n\n[[proxies]]\nname = "web-demo"\ntype = "tcp"\nlocalIP = "127.0.0.1"\nlocalPort = 27081\nremotePort = 27082\n' > frpc.toml && ./frpc -c frpc.toml >/dev/null 2>&1 & sleep 2; curl -s http://127.0.0.1:27082/index.html

预期输出: frp tunnel demo page(隧道通);否则按「一步步来」分段排查

一步步来

第 1 步:下载与安装(两台机器各一份)

  • 服务端(有公网 IP 的云服务器,Linux x86_64):下载 frps 并放到 /usr/local/bin;
  • 客户端(内网机器):下载 frpc 并放到 /usr/local/bin。
note: 国内下载优先 ghfast.top 加速镜像(2026-08-31 实测可用、支持断点续传);直连 GitHub release 在部分网络不可达;Gitee 有仓库镜像但不带 release 资产
curl -L -o /tmp/frp.tar.gz https://ghfast.top/https://github.com/fatedier/frp/releases/download/v0.71.0/frp_0.71.0_linux_amd64.tar.gz
tar xzf /tmp/frp.tar.gz -C /tmp
sudo mv /tmp/frp_0.71.0_linux_amd64/frps /tmp/frp_0.71.0_linux_amd64/frpc /usr/local/bin/
frps --version && frpc --version

预期输出: 0.71.0(两行)

卡住怎么办:下载超时/失败 → 换 ghfast.top 为代理或直连 GitHub release;版本命令报 command not found → 检查 mv 路径与 sudo 权限;其他架构/系统到项目 release 页找对应包(linux_arm64 / darwin / windows amd64 等)。

第 2 步:配置 frps(公网服务器)

frps 是服务端,监听一个「控制端口」等 frpc 来连;还要定一个 token 做身份校验(默认 TLS 已开,v0.50.0 起)。

sudo mkdir -p /etc/frp
sudo tee /etc/frp/frps.toml > /dev/null <<'TOML'
bindAddr = "0.0.0.0"
bindPort = 7000
auth.method = "token"
auth.token = "换成你自己的长随机串"
TOML
sudo /usr/local/bin/frps -c /etc/frp/frps.toml

预期输出: frps uses config file: /etc/frp/frps.toml frps tcp listen on 0.0.0.0:7000 frps started successfully

卡住怎么办:address already in use → 端口被占,ss -tlnp | grep 7000 找占用进程换端口;起不来且日志无输出 → 确认 TOML 语法(自 v0.52.0 起 TOML,INI 已弃用)。云服务器记得在安全组放行 bindPort(默认 7000)和你要映射出去的 remotePort(如 6000)。

第 3 步:配置 frpc(内网机器)

frpc 是客户端:填 frps 的地址和 token,再声明一条代理规则——「服务器 6000 端口 → 本机 22 端口」。

sudo tee /etc/frp/frpc.toml > /dev/null <<'TOML'
serverAddr = "你的服务器公网 IP"
serverPort = 7000
auth.method = "token"
auth.token = "和 frps 一致的 token"
[[proxies]]
name = "ssh-home"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
TOML
sudo /usr/local/bin/frpc -c /etc/frp/frpc.toml

预期输出: login to server success proxy added: [ssh-home] [ssh-home] start proxy success

卡住怎么办:login to server failed → 先 ss -tlnp | grep 7000 确认 frps 在监听、serverAddr 是公网 IP、token 两边一致;代理注册成功但外面连不上 → 检查安全组 remotePort 放行。

第 4 步:开机自启(systemd,2026-09-01 实测托管)

note: systemd-run transient unit 实测通过(启动/注册/停止/隧道随停随关);以下为持久 unit 标准写法(多落盘 /etc/systemd/system,行为同构),按发行版调整
sudo tee /etc/systemd/system/frpc.service > /dev/null <<'UNIT'
[Unit]
Description=frp client
After=network.target
[Service]
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl enable --now frpc
sudo systemctl status frpc --no-pager

预期输出: systemd 状态 Active: active (running)(2026-09-01 实测 transient unit:active + 隧道 200 + stop 后隧道关闭,实测复现日志(2026-09-01))

卡住怎么办:systemctl 报 unit not found → 先 sudo systemctl daemon-reload;Status 显示 failed → journalctl -u frpc -n 30 看具体报错。

怎么确认修好了

从外面(或另一台机器)连服务器端口,能通就是隧道在工作;再用 frpc 状态命令核对代理注册情况。

curl -s http://你的服务器公网IP:映射出的remotePort/ -o /dev/null -w '%{http_code}\n'
ssh -oPort=6000 你的用户名@你的服务器公网IP 'echo tunnel-ok'
frpc status -c /etc/frp/frpc.toml

预期输出: HTTP 200;SSH 回显 tunnel-ok;frpc status 列出代理 web-demo/ssh-home 状态为 running(本地隔离演示的等价验证见「验证证据」,curl 127.0.0.1:27082 返回与直连一致)

其它环境的表现

note: frp 官方 release 提供多平台二进制;以下为本指南未实测环境的如实说明
环境表现说明
Windowsfrps/frpc 均有 windows amd64 二进制,命令行用法一致;需在防火墙放行端口未实测(本环境 WSL/Linux)
macOSdarwin amd64/arm64 二进制;Apple 芯片用 arm64 包未实测
Linux 服务器(公网)frps 标准部署场景,配合 systemd 自启;安全组放行 bindPort/remotePortsystemd 托管 2026-09-01 实测(transient unit);公网安全组仍按环境核对
路由器/嵌入式(OpenWrt 等)社区有编译包,用法同 Linux未实测

日常使用

前提:frpc status / frpc reload 依赖 frpc 的 admin server,配置里必须开启 webServer——本指南实测:不开会直接报 web server port should be set if you want to use this feature。在 frpc.toml 里加:
cat >> /etc/frp/frpc.toml <<'TOML'
webServer.addr = "127.0.0.1"
webServer.port = 7400
TOML

预期输出: (无输出;重跑 status/reload 前需要重启一次 frpc 让 admin server 生效)

看隧道状态

想确认每个代理通不通、对外端口有没有生效,用 frpc status:

frpc status -c /etc/frp/frpc.toml

预期输出: Proxy Status... 表格,每个代理一行(实测 v0.71.0):Name Status LocalAddr Plugin RemoteAddr Error,行如 web-demo running 127.0.0.1:27081 127.0.0.1:27082(Status 为 running 即正常)

怎么读:Status 不是 running 时看 Error 列(端口被占、本地服务没起等);LocalAddr = 本机服务地址,RemoteAddr = 对外端口;表格按代理名排序。

改配置不重启(热加载)

场景:想再加一条代理(比如多暴露一个端口),不用重启 frpc、不掉现有隧道:

frpc reload -c /etc/frp/frpc.toml

预期输出: reload success(实测:2 个代理运行中 reload 新增第 3 条,新代理立即 running,旧代理不受影响)

步骤:① 编辑 frpc.toml 追加代理段;② 执行 reload;③ frpc status 确认新代理出现;④ 从外部访问新 remotePort 验证。 注意:reload 只处理代理的增删改;改 serverAddr / serverPort / 认证等连接级配置仍要重启 frpc。

看日志

  • systemd 部署:journalctl -u frpc -f;
  • 手动跑:终端输出里 login to server success = 已连上 frps,start proxy success = 该代理就绪;
  • 服务端也想看状态:frps 可开 webServer.port 仪表盘(未实测,见项目文档)。

卸载与清理

note: frp 无后台数据、无全局状态,删二进制和配置即完全卸载;注意清掉云服务器安全组里放行的 frp 端口
sudo systemctl disable --now frpc 2>/dev/null || true
sudo rm -f /usr/local/bin/frps /usr/local/bin/frpc
sudo rm -rf /etc/frp
pkill -f frpc; pkill -f frps 2>/dev/null

预期输出: (无输出;/usr/local/bin 与 /etc/frp 已清理)

依赖警告与冲突

  • 端口:bindPort(默认 7000)与 remotePort 必须未被占用、且云服务器安全组已放行;与本地其他服务冲突时换端口即可;
  • 安全:frps 暴露在公网必须设 auth.token;transport.useEncryption/useCompression 默认关(TLS 默认开),敏感流量建议开;
  • 杀软误报:frpc 是反向代理工具,部分杀毒软件会误报并删除(项目文档 issue 3637 有说明),需加白名单/排除;
  • WSL/双栈坑(本指南实测发现):本环境 frps 不带 bindAddr 时监听到 IPv6 双栈 socket,IPv4 回环连接被拒(connection refused),显式 bindAddr = "127.0.0.1"(或服务器场景 0.0.0.0)后正常;
  • 与本站其他工具:frp 为独立二进制 + 独立配置,与已收录的 agent/CLI 工具无共享写面(冲突矩阵 25 对均为 possible-compatible,静态判定)。

FAQ

  • 问:frpc status / frpc reload 报 web server port should be set if you want to use this feature,怎么办?
  • 答:这两个命令依赖 frpc 的 admin server,frpc.toml 里要开启 webServer.addr + webServer.port(见日常使用节),重启 frpc 后生效。本指南实测:不开 webServer 时 status/reload 直接报该错误,隧道本身不受影响。
  • 问:frpc 报 login to server failed: dial tcp ... connect: connection refused,怎么排查?
  • 答:先 ss -tlnp | grep <port> 确认 frps 在监听、端口没写错;再确认服务器安全组/防火墙放行了 bindPort;最后确认 serverAddr 是公网 IP 而不是 127.0.0.1。WSL 里 frps 起不来/外部连不上时,检查是否踩了双栈坑(见依赖警告,显式写 bindAddr)。
  • 问:报 address already in use 怎么办?
  • 答:端口被占。ss -tlnp | grep <port> 找到占用进程;换 bindPort/remotePort 或停掉旧进程。注意旧 frps/frpc 没退干净时重启会报这个。
  • 问:frpc 被杀毒软件删了怎么办?
  • 答:反向代理工具常见误报(项目文档 issue 3637)。在杀软里加白名单/排除项,或换免安装解压版(本指南安装方式即免安装版)。
  • 问:外部能连服务器端口,但隧道里没数据?
  • 答:先在本机验证 frpc 的 localPort 服务本身通(curl localhost:localPort);再 frpc status 看代理状态;常见原因:localIP 写成别的机器、服务只监听了 IPv6。
  • 问:WSL 里 frps 能启动,但 127.0.0.1 连不上、[::1] 能连上?
  • 答:双栈坑(本次实测复现)。frps 不带 bindAddr 时监听到 IPv6 双栈 socket,本环境 IPv4 回环被拒;配置里显式写 bindAddr = "127.0.0.1"(或服务器 0.0.0.0)后 IPv4 正常。
验证证据
  • 日常使用实测(2026-09-01,WSL Ubuntu x86_64,frps/frpc 0.71.0):实测复现日志(2026-09-01)——开 webServer 后 frpc status 输出代理表格;frpc reload 热加载新增代理(reload success),新隧道立即可用、旧代理不受影响;不开 webServer 时 status/reload 报错已复现;
  • 隔离回环隧道全链路实测(2026-08-31,WSL Ubuntu x86_64,frps/frpc 0.71.0):实测复现日志(2026-08-31)——本地服务 27081 直连正常 → frps 监听 27000 → frpc 注册代理成功 → curl 127.0.0.1:27082 返回与直连一致的页面;
  • 版本与下载:GitHub release v0.71.0(2026-08-14 发布,Apache-2.0);ghfast.top 镜像实测 206 支持断点续传;
  • 配置语义:TOML 配置自 v0.52.0 起支持(INI 已弃用);默认 TLS(v0.50.0 起);token 认证默认方法——与项目 README 核对。

引用:frp · 验证于 2026-08-31 · v0.52.0~0.71.0

相关问题(问题域)

暂无已收录问题。

出问题了?排障方案

暂无排障方案。遇到问题?去 问题空间 提交求助卡。

矩阵暂无该工具对子。

← 返回工具货架 | 遇到其它问题?去 问题空间 提交求助卡 | 预检与证据记录由维护流程本地留存,仅公开结论与来源