分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

fatedier/frp

运维与部署

自建反向代理,用一台公网服务器把 NAT 或防火墙后的本地服务暴露到互联网。

110,329
15,286
Go
Apache-2.0
创建于 10 年前

frp 是一个自建反向代理,用于访问处在 NAT 或防火墙后面的服务。你在有公网 IP 的机器上运行 frps,在私有服务旁边运行 frpc;客户端与服务器保持隧道,服务器再把外部请求转发到内网端口或 socket。它支持 TCP、UDP 以及 HTTP、HTTPS,也能按域名做虚拟主机转发。相比托管隧道服务,它的数据传输经过你自己控制的设施。配置可使用 TOML、YAML、JSON;INI 已弃用,新功能只会在其他格式中提供(配置文档)。

一次实际配置的过程

两个二进制都从 release 页面按操作系统和架构下载(示例用法)。服务端配置设置客户端连接的 bindPort,Web 流量再加 vhostHTTPPort/vhostHTTPSPort;客户端配置里列出代理:本地目标,加上远端端口或自定义域名。典型 SSH 示例把本地 22 端口映射到远端 6000,再用 ssh -oPort=6000 user@服务器IP 连接。UDP DNS 转发、Unix domain socket、静态文件服务和 HTTPS 终结也都沿用同一模式。

增强功能大多按代理配置:客户端与服务器之间的 token 或 OIDC 认证、可选 TLS、加密与压缩、带宽限制、健康检查、负载均衡组、连接池,以及 TCP 或 QUIC 传输。还有 STCP 和 xtcp 模式:STCP 需要共享密钥并另配 visitor,而不是公开远端端口;xtcp 尝试客户端之间直连传输,但某些 NAT 类型下可能失败,文档建议此时回退到 STCP。frps 服务器需要固定地址且可被访问;内网机器只需要能向外连接。

值得了解的操作细节

  • 仪表盘和客户端管理界面是可选的;metricsServer 在独立监听器上提供 /healthz 和 Prometheus 指标(监控文档)。/healthz 只能说明 HTTP 服务器有响应,不代表客户端已连接或代理就绪。
  • 代理可以通过 Store/API 在运行中增删改并持久化到文件,frpc reload 会应用配置变更,但除 start 之外的全局客户端参数不会被修改(热重载文档)。
  • 部分杀毒软件会把 frpc 当作恶意软件隔离,因为反向代理可能绕过防火墙端口限制;README 给出了相关 issue 供加白参考(issue 3637)。
  • frp 目前仍以版本 1 开发。维护者表示规划中的 v2 不会兼容版本 1,且受时间限制进度放缓;目前仍应使用 v1(开发状态)。

适用性

frp 适合能自备公网服务器、希望以可配置方式隧道 SSH、数据库、Web 应用或文件传输,而不依赖托管隧道服务的运维者。如果你无法运行公网中继,或无法管理一个公网可达端点的安全配置,它就不太合适;文档本身说明了暴露风险,并给出 STCP 和 HTTP Basic Auth 作为缓解方式。

本文由 AI 根据项目 README 生成,更新于 2026年10月30日,以项目官方文档为准。

Hacker News 讨论

Frp: A fast reverse proxy to help you expose a local server to the internet
▲ 134 · 29 条评论 · 2016年8月12日
Fast proxy to expose a local server behind a NAT or firewall to the internet
▲ 5 · 2 条评论 · 2020年8月6日