家用住宅主机FRP内网穿透外网访问NAS文件
很多人在家里搭了NAS,存文件、跑下载、做备份,但一出门就没办法连上。
原因很简单:绝大多数家庭宽带没有独立公网IP,或者运营商封了80/443端口。
用FRP(Fast Reverse Proxy)做一层反向代理,就能用一台便宜的云服务器当跳板,把家里的NAS服务暴露到公网。
本文会从零开始,跟你说清楚需要什么、每一步怎么操作、哪些地方容易踩坑,操作完之后怎么确认外网能访问。
需要准备的东西
- 一台有公网IP的云服务器,配置不用高(1核1G就够),系统建议Debian或Ubuntu。
- 家里的主机或NAS,已经跑着文件服务(比如Samba、WebDAV、Nextcloud,或者群晖/威联通自带的DSM)。
- FRP程序,从 GitHub releases 下载,服务端和客户端版本保持一致。
- 一个域名(可选),如果想通过域名访问,提前把域名解析到云服务器的公网IP。
第一步:在云服务器上配置FRP服务端
登录云服务器,把下载的 frp 压缩包解压,进到目录。
服务端只需要 frps 和 frps.toml(新版配置文件格式)。
编辑 frps.toml:
bindPort = 7000
vhostHTTPPort = 8080
简单说,bindPort 是客户端和服务端握手的端口,vhostHTTPPort 是用来暴露HTTP服务的端口。
你也可以加 auth.token 做权限验证,但先只配这俩也能跑通。
启动服务端:
./frps -c frps.toml &
查看日志没有报错,服务端就准备好了。
记得在云服务器的安全组(防火墙)里放行 7000 和 8080 端口(根据自己的配置修改)。
第二步:在家里的主机上配置FRP客户端
同样把 frp 文件传到家用主机(Windows用 exe,Linux用二进制)。
客户端配置文件是 frpc.toml,示例内容:
serverAddr = "你的云服务器IP"
serverPort = 7000
[[proxies]]
name = "nas-web"
type = "http"
localIP = "127.0.0.1"
localPort = 5000
customDomains = "你的域名" # 如果没有域名,可以把 type 改成 tcp,用 remotePort 映射
解释:serverAddr 填云服务器IP,localIP 和 localPort 填家里NAS服务的地址(群晖默认5000,
威联通默认8080,
其他按实际)。customDomains 填你提前解析好的域名,
如果没有域名,
把 type 改成 tcp,
再加一行 remotePort = 5000,
这样访问 云服务器IP: 就能转发到家里的5000。
5000
启动客户端:
./frpc -c frpc.toml &
Windows 直接双击 frpc.exe 会自动读同目录下的 frpc.toml(或加参数指定)。
第三步:验证能否外网访问
- 如果你配置了域名和 HTTP 代理,在浏览器输入 http://你的域名:8080 就能看到NAS登录页。
- 如果用 TCP 模式,直接访问
云服务器IP:你设置的remotePort。 - 如果打不开,先检查云服务器防火墙是否放行了对应端口,再检查客户端日志(frpc 窗口或日志文件)有没有“proxy started”或报错。
避坑指南与高频问题
1. 客户端连不上服务端
- 检查云服务器防火墙:7000端口(bindPort)必须放行。
- 检查客户端
serverAddr是否写对了IP。 - 用
telnet 云服务器IP 7000测试连通性。
2. 网页访问提示 Bad Gateway 或 连接被拒绝
- 检查
localIP和localPort是否与家里NAS服务匹配。可以在家用主机上先试着curl http://127.0.0.1:5000看能否返回内容。 - NAS服务本身是否允许局域网内其他设备访问?有的NAS默认只允许本地访问。
3. 访问速度问题
- FRP的转发延迟取决于云服务器的带宽和延迟。如果对速度要求高,可以考虑用阿里云轻量、腾讯云轻量,流量够用。
- 文件传输量大的场景,建议用 TCP 模式而非 HTTP 模式,减少头开销。
4. 想用域名但不想加端口?
- 云服务器如果80端口可用,可以在
frps.toml里加vhostHTTPPort = 80,但注意家庭宽带可能无法使用80,而且备案也是个麻烦。更实际的方案是保留8080端口,或者用 Nginx 反向代理到 frp 的 HTTP 端口。
总结
通过FRP内网穿透,家用主机上的NAS文件就像搬到云上一样,随时可以在外网访问。
核心就是三步:服务端配置启动、客户端配置启动、防火墙放行。
遇到问题优先看日志,日志里一般会告诉你哪里没配好。
如果你刚开始接触,建议先用 TCP 模式做最简单的端口映射,成功后再尝试域名和 HTTP 模式。
这样一步步走,基本不会卡壳。