内网穿透工具 frp:自建隧道的实操笔记
先说我为什么折腾这个。公司内网服务回到家连不上,NAS 出门就成了摆设,本地起的 demo 想给外面看两眼没公网地址就没法演示,调微信回调也调不通——平台只认公网 URL。这些事的本质不是技术难题,是缺一条自己能完全掌控的隧道。
买台云服务器一年几百块,只为做端口转发有点浪费;用公共穿透服务,免费版限速、域名随机、高峰还掉线,正经服务不敢往上挂。所以我们需要的是:找台便宜 VPS,自己搭,速度自己定,想映射什么映射什么。frp 就是干这个的。
项目概况
frp(Fast Reverse Proxy),Go 写的高性能反向代理,主打内网穿透。2015 年迭代到现在的 v0.70.1,GitHub 上有 109K+ Star,不少公司在生产环境用它。
一句话讲清它做的事:在内网机器和一台有公网 IP 的服务器之间打条隧道,让内网服务能被公网访问。TCP、UDP、HTTP、HTTPS 都能转发,还支持 P2P 直连。
源码:https://github.com/fatedier/frp
文档:https://gofrp.org/zh-cn/docs/
技术架构速记
经典 C/S 结构:
- frps:服务端,部署在有公网 IP 的机器上
- frpc:客户端,跑在内网机器上
流程是 frpc 主动向 frps 建长连接,内网机器不用开端口、不用动路由器。公网访问 frps 的端口,流量顺着隧道转进内网。配置用 TOML,两端各一个文件,改完重启生效。
Go 编译出来是单个二进制,没有依赖,Linux、Windows、macOS、ARM 都有包,NAS、路由器也能跑。部署方式就是解压直接跑、配 systemd 开机自启、Docker 拉起来,十分钟能完事。
能力盘点
先说协议覆盖。SSH、远程桌面、数据库、摄像头流这类 TCP/UDP 服务直接转发;网站类服务走 HTTP 代理,能绑域名、加鉴权、改 Header。
传输上,两端通信支持 KCP、QUIC、Websocket 等底层协议,TCP 连接做了流式复用,单连接能承载更多请求,省掉握手延迟。
安全方面,两端通信走 TLS 加密;不想直接把服务挂公网,用 STCP 类型,访问方持密钥才能连;代理组自带负载均衡和健康检查。
P2P 是亮点。XTCP 模式下两端打洞,成功后数据直接在家宽之间跑,带宽不走服务器,能跑满自家宽带的上下行。这对大流量场景很关键。
自带的 Web Dashboard,服务端和客户端的页面直接打进二进制里,不用单独部署前端工程。frps 面板能看代理列表、连接数、流量曲线,frpc 也有本地管理页。排查通没通,看面板比翻日志快。
后端核心是 frps 管中转、frpc 管本地转发。扩展性留得足:客户端内置静态文件、HTTPS 转 HTTP、SOCKS5 代理插件;服务端有插件系统,通过 HTTP 回调可以把认证、限流接进自己的业务。新版还在加东西,比如 v0.68 的 VirtualNet 能给设备分虚拟 IP 组网。
适用与不适用场景
适用场景:
- 手头有便宜 VPS,想完全掌控带宽和端口分配,不想被公共服务的限速和随机域名绑架
- 内网服务类型复杂,TCP、UDP、HTTP 都要暴露,frp 一个工具全覆盖
- 大流量传输场景(比如 NAS 文件访问),XTCP 打洞成功后可绕开服务器中转,带宽只受两端家宽限制
不适用场景原文未明确提及。但要注意两点:一是 XTCP 依赖 NAT 打洞,如果两端网络类型太严格导致打洞失败,P2P 就不成立(打洞失败后的降级行为原文未提供);二是 frp 本质是工具,不是免费服务,没有一台 VPS 就无从谈起,这点得先算清楚成本。
实操记录:SSH 穿透
来一段最常见的:在家 SSH 连公司内网机器。
公网服务器 frps.toml:
bindPort = 7000
公司机器 frpc.toml:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "office-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
两边启动后,回家一条命令直达工位:
ssh -p 6000 user@x.x.x.x
本地 web 项目想要公网地址,把 type 换成 http、绑上域名就行。面板上看着流量曲线爬起来,比啥都实在。
使用取舍
frp 解决的是“自己掌控隧道”的需求。比起一年几百块的云服务器只为端口转发,frp 让这台机器的价值不只是转发,还能顺带做代理、认证、限流;比起公共穿透服务,frp 没有限速和随机域名限制,前提是你愿意为 VPS 掏钱和维护。
开源协议是 Apache-2.0,对商用友好:使用、修改、分发都没问题,集成进公司项目不用顾虑。留意两点:分发时保留版权声明和许可文本,修改过的文件带上变更说明。
结语
配置简单、协议够全、社区成熟,frp 属于装上就不用惦记的工具。个人折腾 NAS、公司搭调试环境都吃得开。原文作者提到平时把好用的东西随手记下来,这篇就是其中一件。文末附的往期项目推荐与本文主题无关,此处从略。