FRP 自建内网穿透
04篇里接线员是ngrok雇的 免费版地址会变还限速;Tunnel把接线员换成了Cloudflare 但要挂自己域名、数据走人家节点。FRP是第三条路:把接线员换成自己——前提是得有台带公网IP(或至少有公网端口)的VPS
定位说明:这篇是文档学习加方案设计 FRP 我还没在自己机器上实际跑通 命令和配置都按官方文档整理 真动手时以官方仓库说明为准(全文核对点)
组成:一端一个程序
frp(Fast Reverse Proxy)就两个可执行文件:
- frps 服务端 跑在VPS上 当"服务台"
- frpc 客户端 跑在你内网的机器上 当"内线电话"
flowchart LR
A["访客<br>公网上任何人"] --> B["VPS: frps<br>监听公网端口"]
B -. "frpc 主动拨出的<br>长连接隧道" .-> C["内网电脑: frpc"]
C --> D["本地服务<br>SSH 22 / 网站 8080 / 远程桌面 3389"]
关键在虚线那一步:frpc 是主动去连 frps 的 所以你内网的机器只要能上网就行 不需要公网IP——隧道建起来之后 访客敲VPS的端口 frps顺着隧道把流量递给frpc frpc转交本地服务 和ngrok原理一模一样 只是中间那台服务器从别人家换成了自己家
服务端配置(VPS上)
从 github.com/fatedier/frp releases 下载对应系统版本 解压出 frps
frps.toml 最小配置:
bindPort = 7000
auth.token = "换成一段只有你知道的随机字符串"
跑起来:
./frps -c frps.toml
安全组/防火墙记得放行 7000 以及后面客户端要用的 remotePort。长期挂建议交给 systemd 或者 docker(VPS上docker那条路见VPS Docker 部署完整指南)
客户端配置(内网机器上)
frpc.toml:
serverAddr = "你VPS的公网IP"
serverPort = 7000
auth.token = "与服务端一致"
[[proxies]]
name = "my-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
跑起来:
./frpc -c frpc.toml
之后在任何地方 ssh -p 6022 用户名@VPS公网IP 就会落到家里那台机器的22端口 上门服务变成"敲VPS的门 VPS帮我转进去"
网站同理:localPort 改成 8080 有两种玩法——
- 简单粗暴:type 保持 tcp remotePort=8080 直接访问
IP:8080什么协议都透传 - 讲究点:type 改 http 配 customDomains 需要把域名解析到VPS 由frps按域名分流(配合DNS那套 见DNS 记录与域名实战)
NAT VPS 能不能当 frps
我的VPS是NAT型(NAT VPS那篇记过)——没有独立公网IP 只有商家映射好的一段共享端口 这种机器想当frps:
- bindPort 必须落在商家给你的可用端口段内
- 每个remotePort也得提前在商家面板里映射好 不是想开几号就开几号
理论上可行(frp不在乎中转机是不是独立IP 只要端口能通)但我没验证过(核对点) 真要试先确认NAT VPS给了多少个TCP转发额度
版本坑:ini 和 toml
frp 从 0.52.0 起配置文件从 .ini 换成了 .toml 字段名全变了(bind_port → bindPort)网上大量老教程还是ini写法 直接抄会报错——看教程先看它按哪个版本写的 下载程序时也尽量和教程对版本
和另外两条路怎么选
一句话版:偶尔调试选ngrok 长期网站选Tunnel 有VPS想全权掌控选FRP——完整对比表见06-内网穿透选型对比
⬅️ 内网穿透 ngork 🏠 00-网络与项目 ➡️ 内网穿透选型对比
💬 评论