用公网 VPS 穿透无公网 IP 的家用 NAS:FRP、Nps 与 Gost 高速反向代理配置

家里 NAS、Jellyfin、Home Assistant 没有公网 IP?租用一台便宜 VPS 做跳板,用开源 FRP、带可视化面板的 Nps 或多协议转发工具 Gost 反向代理穿透内网,并配置 HTTPS 证书与访问控制加固安全。

延伸阅读

更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用Ollama AI系列(2):VPS上的AI推理与API应用【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPSARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?Ollama AI系列(2):VPS上的AI推理与API应用

一、痛点:家里有 NAS 却没有公网 IP

先说痛点,估计你一看就懂。你在家里折腾了一台 NAS,存满了照片和电影;又装了 Jellyfin 想在外面看片;还跑了 Home Assistant 把家里的灯和空调都接进去了。这些东西本来只能在自家局域网里访问,因为运营商给你的宽带根本没有公网 IPv4 地址,或者给的是个大内网里的内网 IP。

于是尴尬的事来了:你在公司想看家里 Jellyfin 里那部电影,打不开;出差想用 Home Assistant 关一下忘关的灯,连不上;朋友来家里想拷点照片,你总不能把 NAS 搬过去。传统办法要么是求运营商要公网 IP(很多地方根本不给,或者给的是 IPv6 你设备不支持),要么是花钱用第三方穿透服务,速度慢还限流量。

那我们自己能不能解决?能,而且成本很低。思路就一句话:租一台带公网 IP 的便宜 VPS 当跳板,把你家里的服务通过反向代理映射出去。下面三种工具,就是干这个最顺手的代表。

二、解决思路:买台便宜 VPS 当跳板

反向代理穿透的核心逻辑其实不复杂。你家里那台 NAS 在一个没有公网地址的内网里,它自己主动往外连,和你在云上的 VPS 建立一条长连接隧道。之后,外面的人访问这台 VPS 的某个端口,VPS 就把请求顺着这条已经建立好的隧道,转发到你家里的 NAS 上,再把响应原路送回去。

因为隧道是你家设备主动连出去建立的,所以不管你家有没有公网 IP、有没有被 NAT 困住,都能打通。这就是内网穿透的本质:让内网里的服务,看起来像长在公网 VPS 上一样。

对这台跳板 VPS 的要求其实不高。它只负责转发流量,不跑重业务,所以 1 核 1G 甚至更低配都行,选个流量大、网络稳的便宜机房就好。你要注意的是:VPS 的入站防火墙(云厂商的安全组)要放行你在穿透配置里用到的端口,比如 7000、80、443、8024 这些,不然隧道连不上。

三、明星工具 FRP 高速反向代理

FRP 全称 Fast Reverse Proxy,是 fatedier 在 GitHub 上开源的项目,目前是中文圈最火的内网穿透工具,没有之一。它的架构是经典的服务端加客户端:服务端 frps 跑在公网 VPS 上,客户端 frpc 跑在你家里的机器上(可以是 NAS 本身,也可以是家里一台常开的小主机)。

新版 FRP 的配置改成了 TOML 格式,比老版的 ini 清晰。服务端 frps.toml 里,bindPort 默认 7000,是 frpc 连上来控制的端口;vhostHTTPPort 和 vhostHTTPSPort 一般设成 80 和 443,用来接 Web 流量;还可以开一个 webServer,端口 7500,带账号密码,能在浏览器里看连接状态和流量图。认证用 auth.token,一定要设一个够强的随机串,否则别人能随便连你的服务端。

客户端 frpc.toml 里,serverAddr 填 VPS 的 IP,serverPort 填 7000,auth.token 和服务端一致。然后每个要穿透的服务写一个 proxies 块。比如想穿透 SSH,就写 type=tcp,localIP 填 127.0.0.1,localPort 填 22,remotePort 填 6000,之后 ssh -p 6000 用户@VPSIP 就能连回家里的 SSH。想穿透网站就写 type=http,localPort 填内网 Web 端口,customDomains 填你绑定的域名,FRP 会根据域名把请求分给不同服务。

FRP 还支持 https 类型,配合 https2http 插件能直接在服务端终止 TLS,把证书放在 VPS 上;也支持 stcp、xtcp 这类点对点模式,适合两个内网之间直接打通。想要稳定还能开 transport.useEncryption 和 transport.useCompression 加密压缩,再配心跳 heartbeatInterval 和 heartbeatTimeout 防断线。整体来说,FRP 轻量、快、文档全,适合愿意对着配置文件敲两下的玩家。

四、带可视化面板的 Nps

如果你一看配置文件就头大,那 Nps 可能更对你胃口。它同样是 Go 写的开源内网穿透代理,最大的卖点是一个图形化的 Web 管理面板。你几乎不用手写配置文件,全在网页上点几下就加好一条隧道。

服务端叫 nps,装好后配置文件在 /etc/nps/conf/nps.conf。最关键的安全项:默认管理员账号密码是 admin/123,这跟把家门钥匙挂门上没区别,必须立刻改掉 web_username 和 web_password,再把 web_port 从默认 8080 改掉。客户端连服务端的桥接端口默认 8024,建议把 auth_key 设成强密码,有条件再开 tls_enable 加密通信。还能设 max_login_fail 限制登录失败次数防爆破。

客户端叫 npc,启动命令特别简单,大概长这样:npc -server=你的VPS的IP:8024 -vkey=后台生成的密钥。这个 vkey 是你在 Web 面板里新增客户端时自动生成的,每台机器不一样。连上之后,在面板里点新增 TCP 隧道或者 HTTP 隧道,填一下服务端端口、内网目标 IP 和端口,保存就生效,完全不用碰命令行。

Nps 支持 TCP、UDP、HTTP、HTTPS、SOCKS5 甚至 P2P 等多种协议,一台服务端能挂很多客户端,每个客户端又能开很多隧道,特别适合帮亲戚朋友一人搭一条、统一在一个面板里管。代价是它比 FRP 重一点,面板本身也要好好加固,毕竟 Web 后台一旦被攻破,你所有的隧道都在别人眼前。

五、多协议转发利器 Gost

第三个主角 Gost,作者是 ginuerzh,它的定位比前两个更底层、更通用:它不是一个专门的内网穿透软件,而是一个把各种代理、转发、隧道协议揉在一起的多面手。它支持的协议前缀极多:socks5、http、ss(Shadowsocks)、tls、ws、wss、quic、kcp、h2、grpc 等等,用一套统一的 URL 格式来定义。

做反向代理穿透时,Gost 的两段命令很好记。公网 VPS 上跑:gost -L relay://:8024?bind=true,监听 8024 作为中继入口。家里机器上跑:gost -L rtcp://:8080/192.168.1.50:80 -F relay://VPS的IP:8024,意思是把家里的 192.168.1.50 的 80 端口,通过中继暴露到 VPS 的 8080 上。之后外网访问 VPS 的 8080,就相当于直接访问家里那台设备的 80 端口。

如果只是简单的端口转发,不用中继也行:gost -L tcp://:3306/192.168.1.100:3306 这种写法,把本地 3306 映射到内网某台数据库的 3306,常用于把家里或云上的数据库临时暴露出来调试。Gost 还能把多个上游串成代理链做负载均衡,也能用 tls 或 wss 给流量套一层加密通道,躲开部分运营商对明文隧道的干扰。

Gost 复杂的场景建议写 YAML 配置文件而不是一长串命令行,里面能定义 services、chains、routers,还能做限速 limiter、路由选择、DNS 代理等高级玩法。它更像是给进阶玩家的一把瑞士军刀:你想得到的转发姿势,它基本都能拼出来,代价是上手门槛比 Nps 高,文档也更偏参考手册风格。

六、安全加固:HTTPS 证书与访问控制

穿透把家里的私有服务暴露到了公网,安全要是没做好,等于在家门上贴了张纸条写钥匙在脚垫下。第一件事:给 Web 类服务上 HTTPS。最省心的做法是把域名解析到 VPS,在 VPS 上用证书工具申请免费证书,让 FRP 的 https 类型或 Nps 的 HTTPS 代理在 VPS 端终止 TLS,内网那边用 http 就行,外网看到的全程加密。

第二件事:给私有服务加一道 HTTP 基本认证。像 Home Assistant、路由器后台这种管理界面,光有 HTTPS 不够,最好再套一层账号密码。FRP 可以配合前端的 Nginx 或 Caddy 做 basic auth,Nps 也能在面板里配置。目的很简单:就算有人扫到了你的端口,没有账号密码也进不去,挡掉绝大部分自动化爆破。

第三件事:最小暴露面。只穿透真需要外网访问的服务,能不开放就不开放;管理面板(FRP 的 7500、Nps 的 Web)千万不要用默认端口和默认密码,最好再加 IP 白名单,只允许你自己的 IP 段访问。证书和 token 用够长的随机串,别用生日和 123456。这样一套下来,穿透既方便又不会变成安全窟窿。

七、三者怎么选

三个工具各有性格,按你的习惯挑就行。

  • 想要最轻量、最快、文档最全,愿意写配置:选 FRP。它专注内网穿透这一件事,性能强、社区大,遇到问题一搜一大把。
  • 不想碰命令行、喜欢网页点点点、要帮多人管理:选 Nps。可视化面板是它的王牌,代价是面板本身要重点加固。
  • 需要的不只是穿透,还想玩代理链、负载均衡、各种奇葩协议:选 Gost。它是通用转发瑞士军刀,灵活度最高,但学习曲线也最陡。

实际上很多人是混着用的:主力穿透用 FRP,给不太懂技术的家人用 Nps 开几条简单隧道,偶尔要做特殊转发再用 Gost 顶上。工具是死的,场景是活的。

八、带宽与延迟的真相

最后泼盆冷水,把你家服务穿透到公网后,速度和延迟取决于两件事:你家宽带的实际上行带宽,以及那台跳板 VPS 到你的网络质量。很多人家里下行几百兆,上行却只有二三十兆,那外面看 Jellyfin 4K 原盘肯定卡,这不是工具的问题,是上行带宽的锅。

所以选跳板 VPS 时,优先看它到你自己网络的延迟和到目标观众的延迟。比如你在国内,家在电信,VPS 选个回程走优化线路的机房,体验会好很多。穿透本身几乎不额外消耗你家上行之外的资源,但记得在 FRP 或 Nps 里把每条隧道的带宽限制设合理,免得某一条把上行打满,家里其他设备全掉线。搞清楚了这层,穿透才能真正好用。