你正窝在咖啡馆的舒适角落,连上Wi-Fi,准备给朋友演示你本地电脑上那个酷炫的新项目。你熟练地敲下localhost:3000,一切完美。可当你把链接发给坐在另一家店的朋友时,才猛然想起——他访问不了你电脑的localhost。这一刻,你多想拥有一扇“任意门”,能直接把人从公共网络拉进你的本地世界里。
别急,开源的 frp 项目,就是这扇你梦寐以求的“传送门”。
干掉“内网孤岛”,世界触手可及
frp(Fast Reverse Proxy)是一个高性能的反向代理工具,专治各种“访问不了”。它能轻松地将你藏在 NAT(网络地址转换)或防火墙后面的本地服务器,安全地暴露到公网上。
它的典型应用场景数不胜数:
- 想让客户立刻看你刚设计好的网页Demo,而不是干等部署。
- 在公司连回家里的开发机写代码。
- 临时分享本地文件或搭建游戏私服拉朋友来玩。
简而言之,只要你有“让内部服务对外可见”的需求,frp就是你的瑞士军刀。
它究竟有多“香”?
frp之所以能成为开发者的“心头好”,靠的是这几个绝活:
- 十八般协议,样样精通:HTTP、HTTPS、TCP、UDP统统支持。无论你是要暴露一个网站,还是远程连接数据库、传输文件,甚至是转发DNS请求,它都能搞定。
- 安全感拉满,不是“裸奔”:它支持TLS加密、Token和OIDC等多种身份认证,还能给Web服务加一层HTTP基础验证。你的服务不再是互联网上“不设防的城市”。
- 仪表盘与后台,掌控全局:frp提供了直观的Web仪表盘和管理界面。你可以像看汽车仪表盘一样,实时监控流量、代理状态,甚至能动态地增删改查代理规则,无需重启服务。
- “秘密通道”与点对点:你可以创建只有持有“暗号”(密钥)的客户端才能访问的私密代理(STCP)。对于大文件传输或需要更低延迟的场景,还能开启P2P模式,让数据直接在客户端之间传输,不经过服务器中转。
一分钟上手,真的那么简单?
没错,它的入门姿势优雅到超乎你想象。假设你有一台有公网IP的服务器A,和一台家里的电脑B,你想从外面SSH连回电脑B。
- 在服务器A(公网)上:下载frp,配置 frps.toml 文件,只需指定一个客户端连接端口,然后一行命令启动服务端:
# frps.toml
bindPort = 7000
./frps -c ./frps.toml
- 在电脑B(内网)上:同样下载frp,配置 frpc.toml,填入服务器A的IP和要暴露的本机SSH服务,再一行命令启动客户端:
# frpc.toml
serverAddr = "服务器A的公网IP"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
bash
./frpc -c ./frpc.toml
- 见证奇迹:现在,你在任何地方只要通过服务器A的6000端口SSH连接,就能直接访问到电脑B。
ssh -o Port=6000 电脑B的用户名@服务器A的公网IP
看,就这么简单!内网穿透的魔法,你已经学会了。
你的下一扇“任意门”
frp的妙用远不止于此,仪表盘监控、负载均衡、为本地HTTP服务一键启用HTTPS……还有更多高级功能等你探索。整个项目由Go语言编写,设计优雅、性能强劲,配置文件也从早期的INI升级到了更结构化的TOML/YAML/JSON,对开发者非常友好。
如果你也受够了内网访问的种种限制,不妨去它的GitHub仓库 https://github.com/fatedier/frp 逛逛。翻翻文档,点个Star,甚至参与到这个充满活力的开源项目中来。或许,你的下一行代码,就能为更多人打开通向自由连接的大门。