frp 内网穿透完全指南:用廉价VPS把家里NAS和服务器全都暴露到公网
家里NAS存了20T资料,出门在外只能干瞪眼?一文讲透frp内网穿透从服务端到客户端的完整部署,含避坑清单和安全性建议,半小时搭好永不掉线。
家里的 NAS、服务器、开发板,跑了一大堆服务,但一到外面就全连不上了。运营商不给公网 IP,这是大多数自部署玩家最头疼的问题。
frp 是目前最成熟的内网穿透方案之一,作者是 Go 语言开发者 fatedier,项目在 GitHub 上已有 80k+ Star。它的原理很简单:在你的 VPS 上跑一个 frps(服务端),在家里的机器上跑 frpc(客户端),客户端主动连服务端建立隧道,外面的请求通过 VPS 转发到你家里的服务。
准备工作
- 一台有公网 IP 的 VPS(最低配置即可,1核1G足够)
- 家里需要暴露的服务(NAS、Jellyfin、SSH 等)
- 一个域名(可选,配 HTTPS 用)
服务端部署(VPS)
用 Docker 部署最省事:
docker run -d --name frps --restart always \
-p 7000:7000 -p 7500:7500 \
-v /opt/frps.toml:/etc/frp/frps.toml \
snowdreamtech/frps
配置 frps.toml:
bindPort = 7000
auth.token = "你的安全令牌"
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "管理密码"
客户端部署(家里机器)
家里跑 Docker 的机器上:
docker run -d --name frpc --restart always \
--network host \
-v /opt/frpc.toml:/etc/frp/frpc.toml \
snowdreamtech/frpc
配置 frpc.toml,暴露 NAS 的管理页面为例:
serverAddr = "你的VPS_IP"
serverPort = 7000
auth.token = "安全令牌"
[[proxies]]
name = "nas-web"
type = "tcp"
localIP = "192.168.1.100"
localPort = 5000
remotePort = 5000
配置完后,访问 http://你的VPS_IP:5000 就能连回家里的 NAS 了。
进阶:配 HTTPS 和域名
光用 IP+端口访问不够安全,配合 Nginx/Caddy 反代加 HTTPS 是标准做法。在 VPS 上配一个 Caddy:
nas.你的域名.com {
reverse_proxy localhost:5000
}
Caddy 自动申请 Let’s Encrypt 证书,一条配置就搞定 HTTPS。
注意事项
- frp 不加密传输内容,建议配合 HTTPS 使用
- auth.token 不要用弱密码,frp v0.52+ 支持 TLS 加密,建议开启
- 如果家里有 IPv6,优先考虑直接用 DDNS + IPv6,延迟更低
- VPS 带宽决定了实际体验,流媒体至少需要 10Mbps 上行
内网穿透的选择不止 frp,还有 WireGuard Tailscale Cloudflare Tunnel 等。frp 的优势是配置灵活、协议支持全面(TCP/UDP/HTTP/HTTPS),是通用性最好的方案。
