最近部署了黑群晖,并使用 frp 实现了通过域名进行外网访问。然后通过 WevDAV 使用自己可以在电脑上像访问自己的硬盘一样直接访问NAS中存储的文件。为了防止自己以后忘记怎么做,这里简单记录一下过程,以备自己查看。
一、为什么需要内网穿透?
当我们组装了一个 NAS 之后,通常只能在同一个局域网(比如连接着同一个路由器的 Wi-Fi)里面访问,这就很难受…… 我们想要在任何地方——无论是公司、咖啡厅还是在出差的高铁上——都能像访问电脑上的本地硬盘一样,直接访问我们的 NAS,该怎么做呢? 这就需要做“内网穿透”。内网穿透有很多种方法,今天讲解如何使用 FRP 来实现。
1. 传统网络环境的限制:NAT 与状态防火墙
要理解内网穿透的必要性,首先需要明确传统 IPv4 网络架构下的寻址与安全限制。 由于 IPv4 地址资源的枯竭,绝大多数家庭宽带不再分配固定的公网 IP,而是处于运营商及家庭路由器的 NAT(网络地址转换,Network Address Translation) 机制之下。
当外部网络尝试访问局域网内的 NAS 时,会面临两个不可逾越的网络屏障:
- 缺乏路由可达性:私有 IP 地址在广域网中是不可路由的,外部网络的数据包无法直接寻址到你家庭网络内部的具体设备。
- 入站流量被防火墙拦截:家庭路由器的核心机制是处理“出站(Outbound)”流量。当内网设备主动访问外网时,路由器会在内存中建立一张 NAT 会话映射表,并允许对端服务器的数据包顺着原路返回。然而,对于任何未经内网主动请求、直接从外部发起的“入站(Inbound)”连接(如 TCP SYN 握手包),路由器防火墙会将其判定为非法探测并直接丢弃。这导致 NAS 默认对互联网完全“隐身”。
2. FRP 的穿透逻辑:反向代理与隧道复用
FRP(Fast Reverse Proxy)解决上述屏障的核心网络架构是反向代理。其核心逻辑在于转变连接的发起方向——变“入站”为“出站”,从而合法绕过防火墙的拦截。
FRP 的工作流可以拆解为以下四个技术环节:
- 主动建立控制隧道:我们在具备固定公网 IP 的云服务器上部署 FRP 服务端,也就是
frps。NAS 上运行的 FRP 客户端(也就是frpc)启动后,会主动向云服务器的服务端frps发起长连接请求。由于这是内网设备发起的“出站”流量,家庭路由器的 NAT 会合法放行。这条保持活跃的长连接,就构成了一条穿透内外网的“数据隧道”。 - 公网端口监听:
frps在云服务器的公网上开启特定的监听端口,等待外部用户的访问。例如我们可以把 frps运行在服务器的 7002端口,即remote_port = 7002。 - 流量封装与反向转发:当你在外网通过电脑或手机访问云服务器的 7002 端口时,网络请求首先到达
frps。frps接收到数据流后,将其进行协议封装,并顺着步骤 1 中已经建立好的“数据隧道”,反向推送给内网的frpc。 - 本地请求还原:
frpc接收到隧道传来的数据包后进行解包还原,将其转化为标准的本地网络请求,并转发给 NAS 本地的服务端口(如 WebDAV 的 5005 端口)。从 NAS 的视角来看,这个请求就像是局域网内其他设备发出的一样。
3. 网络拓扑架构图
以下是基于 FRP 的内网穿透数据流向图解:

二、详细部署实战:从云端到本地的打通
2.1 准备工作与核心组件
在正式开始配置之前,我们需要准备好必要的网络资源和软件工具。内网穿透本质上是在公网和内网之间架设一座数据桥梁,因此我们会在两端分别部署相应的服务。 为了对整体架构的依赖有一个全局认知,以下是本次部署所必需的核心组件清单:
| 核心组件 | 功能说明 | 部署环境 / 获取方式 |
|---|---|---|
| 云服务器 | 提供全天候在线的固定公网 IP,作为内网与外网之间流量中转的核心枢纽。 | 阿里云、腾讯云等服务商购买 |
| 1Panel 面板 | 用于在云服务器上可视化管理和安装应用。通过它可以像操作手机 App 一样管理服务器,告别命令行。 | 云服务器端 / 官网提供一键安装脚本 |
| FRP | 核心内网穿透工具,负责建立底层数据隧道。它分为两部分:服务端 frps和客户端 frpc。 |
frps 和 frpc 各运行在云服务器和 NAS |
| WebDAV | NAS 提供的文件共享服务协议。它基于 HTTP 构建,原生支持跨网段传输,支持电脑直接挂载。 | 通过 NAS 系统套件中心启用 |
| Cloudflare ( DNS) | 全球顶级的 DNS 服务商。用于域名解析,让我们能用域名代替代替 IP,并支持未来的 HTTPS 扩展。 | 网页端控制台 / 免费注册与配置 |
当你确认已经拥有一台公网云服务器(建议提前在安全组放行相关端口)、一个属于自己的域名,以及局域网内的 NAS 管理员权限后,我们就可以正式进入实战部署环节。
2.2 云服务器准备与环境预置 (前置条件)
获取具备公网 IP 的云服务器的具体流程在此不再赘述。但有一项至关重要的前置操作必须完成:配置安全组规则。 在云服务商(如阿里云、腾讯云)的控制台中,找到该服务器的安全组/防火墙设置,添加入站规则,放行以下 TCP 端口:
- 7000:供 FRP 服务端与客户端建立底层通讯隧道的端口。
- 7500:FRP 监控面板 (Dashboard) 的 Web 访问端口。
- 7002:预留给最终 WebDAV 数据传输的外网暴露端口,这个可以自定义,只要没有被占用的端口都可以。
2.3 部署与配置 1Panel 可视化面板
为了避免繁琐的 Linux 命令行以简化服务器运维,我们在云服务器上安装 1Panel 面板。
- 执行安装:通过 SSH 工具(如 Termius 或 Xshell)连接到云服务器,执行 1Panel 官方的一键安装脚本 《bash -c “$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)”》。安装过程中会有很多提示,可以在网上搜索教程,看怎么安装,其中会让你输入用户名和密码,终端会输出面板的访问地址、初始账号和密码。
- 登录控制台:在浏览器中输入面板地址,输入账号密码进入 1Panel 后台。在这个图形化界面中,我们可以像操作应用商店一样管理服务器上的所有服务。
2.4 配置 FRP 穿透引擎 (核心枢纽)
FRP 的部署分为云端(Server)和本地(Client)两部分,两者必须配合才能打通隧道。
- 在云端部署 FRPS (服务端)
- 进入 1Panel 的“应用商店”,搜索
frps,点击安装。 - 在 1Panel 中点击 frpc 图标中的参数按钮,然后即可设置端口,账号密码等信息。
- 在配置修改界面中配置
frps.ini以定义隧道的入口和权限控制:
- 进入 1Panel 的“应用商店”,搜索
[common]
# 隧道通讯监听端口,必须与安全组放行的端口一致。这个
bind_port = 7000
# Web 监控面板配置(可选,强烈建议开启以方便排障)
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your_strong_password
# 身份验证令牌,防止未授权的客户端恶意连接
token = your_secret_token
- 在 NAS 部署 FRPC (客户端)
- 在局域网的 NAS 侧,通过 Docker 或系统原生的套件中心安装
frpc。 - 编辑客户端配置文件
frpc.ini,将其指向服务器并声明需穿透的本地服务:
- 在局域网的 NAS 侧,通过 Docker 或系统原生的套件中心安装
[common]
# 指向你的云服务器公网 IP
server_addr = "你的云服务器公网IP"
# 与 frps 的 bind_port 保持一致
server_port = 7000
# 必须与 frps 配置的 token 完全一致
token = "your_secret_token"
# 具体的服务转发映射规则
[[proxies]]
name = "my-nas-webdav"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 5005 # NAS 本地 WebDAV 服务的真实运行端口
remote_port = 7002 # 期望在云服务器上暴露给外网的端口
配置完成后,启动 frpc 容器或套件。此时,如果访问 http://云服务器IP:7500 的监控面板,看到该客户端显示为 Online,即证明加密穿透隧道已成功建立。
三、如何使用电脑,手机在任意地点访问 NAS
3.1 挂载文件系统:为什么必须是 WebDAV 协议?
在解决了网络隧道的连通性后,我们面临一个抉择:外网应该用什么协议来传输文件?
很多新手在局域网内习惯了使用 SMB 协议(Windows 中的“网络”发现,Mac 的 smb://),试图直接用 FRP 把 SMB 穿透到外网,但这会遭遇两大技术壁垒:
局域网王者 SMB 为何在公网“水土不服”?
- 致命的 445 端口与系统硬编码限制:
- 运营商级封杀:2017 年利用 SMB 445端口漏洞的 “永恒之蓝”(WannaCry)勒索病毒席卷全球。此后,国内三大运营商在骨干网层面彻底封死了 445 端口。
- Windows 系统的死板:你可能会想,我在 FRP 里把 445 映射成 7005 不就行了?答案是不行。Windows 的资源管理器底层逻辑被写死,强制只允许通过 445 端口发起 SMB 连接,根本不支持在地址后追加自定义端口。
- 高延迟灾难(Chatty Protocol):
- SMB 是一种“话痨”协议(Chatty Protocol),专为延迟极低(<1ms)的局域网设计。为了确认文件的读写状态,它需要在客户端和 NAS 之间进行海量的碎片化往返确认(ACK)。一旦放到延迟几十毫秒的公网上,这种机制会导致严重的性能衰减,拖拽一个文件夹甚至可能卡死资源管理器。
WebDAV:专为互联网而生的文件管家 WebDAV 全称是“基于 Web 的分布式创作和版本控制”,它是 HTTP/HTTPS 协议的扩展。
- 无视封锁,端口自由:因为它本质上走的是 Web 流量,你可以把它挂在任何一个没被占用的端口(如 5005)上,彻底避开运营商的审查。
- 适应广域网的高延迟:HTTP 协议具备更好的容错率和并发机制,在 4G/5G 或公共 Wi-Fi 的高延迟环境下,传输大文件依然极其稳定,不会动辄断开连接。
- 完美的系统级集成:Windows 和 macOS 的底层操作系统原生自带 WebDAV 客户端组件,挂载后体验与本地 C 盘/D 盘几乎无异。
NAS 端实操:启用 WebDAV Server 以群晖为例,操作非常简单:
- 进入“套件中心”,搜索并安装 WebDAV Server。
- 打开该套件,勾选 “启用 HTTP”(默认端口 5005)。
- 权限检查:进入“控制面板” -> “用户与群组”,双击你日常使用的账号,在“应用程序”选项卡中,确保该账号拥有访问 WebDAV Server 的权限。
3.2 优雅与极致:域名解析与终端挂载实战
直接使用 http://公网ip:7002 这样的数字 IP 访问,不仅难记,而且一旦未来云服务器到期更换 IP,所有设备的配置都要重头来过。利用 Cloudflare 或者 阿里云等厂商的DNS服务器 将其绑定到专属域名,是长期使用 NAS 的最优解。
Cloudflare 域名解析(极易踩坑的“云朵”机制): 可以使用国内的任何厂商的DNS服务器做域名解析,这里使用cloudfare的DNS,详细设置域名解析的过程如下。
- 添加 A 记录:
- 类型 (Type):选择
A - 名称 (Name):填写你想作为 NAS 专属入口的子域名,例如填
nas(最终访问地址就是nas.yourdomain.com)。 - IPv4 地址:填入你云服务器的公网 IP。
- 类型 (Type):选择
- 生死抉择:关闭代理(灰色云朵):
在地址栏右侧,你会看到一个云朵图标(Proxy status)。请务必点击它,将其从橙色的
Proxied切换为灰色的DNS only。- 开启橙色云朵(代理模式):Cloudflare 会充当中间人,使得你的域名像是有证书一样,可以直接使用HHTPs传输文件。但是此时访问NAS时,数据会先到美国西海岸,再绕回国内服务器。速度会只有几 KB/s,且 Cloudflare 强制规定单次上传文件不得超过 100MB,否则直接切断连接。
- 开启灰色云朵(仅 DNS 模式):Cloudflare 只做一个单纯的DNS解析。后续的所有文件传输都直接在你的电脑和国内阿里云服务器之间进行。此时数据全程国内直连,延迟极低,跑满云服务器带宽,且没有任何文件大小限制。
3.3 终端挂载实操:让 NAS 变成你的本地硬盘
至此,FRP 隧道已通,域名已就绪,接下来就是在电脑上挂载。你的终极挂载地址为:http://nas.yourdomain.com:7002。
Mac 对 WebDAV 的支持堪称完美,开箱即用。具体来说,可以使用下面的步骤访问NAS:
- 回到桌面,按下快捷键
Command (⌘) + K唤出“连接服务器”窗口。 - 在服务器地址栏输入:
http://nas.yourdomain.com:7002。 - 点击右侧的 “+”号,将其加入个人收藏,方便日后一键连接。
- 点击“连接”,系统可能会提示不安全(因为没用 HTTPS),选择继续。
- 在验证弹窗中,输入你的 NAS 账号和密码。
- 大功告成:NAS 文件夹会出现在访达 (Finder) 左侧边栏的“位置”中,双击视频可以直接用 IINA 等本地播放器流畅解码,文档可以直接双击编辑并自动保存回 NAS。
3.4 手机端无缝访问:配置 DS file
既然电脑端已经完美挂载了,手机端自然也不能落下。群晖官方的 DS file App 是在外网管理文件的最佳工具,不仅能看视频、传照片,还能直接分享文件链接给朋友。有一个常见的误区,很多新手会理所当然地以为,既然前面配好了 WebDAV,DS file 直接连就行了。大错特错!DS file 走的是群晖自己的 API 协议,它依赖的是 File Station 的专属端口。因此,我们需要为 File Station 单独打通一条 FRP 隧道。
3.4.1 在群晖中为 File Station 分配独立端口
为了保障 NAS 的安全,我们绝对不应该把群晖的主管理控制台端口(5000/5001)暴露到公网。我们需要给 File Station 开个“小门”:
- 登录群晖后台,打开 控制面板 -> 登录门户 -> 应用程序。
- 找到 File Station,双击打开编辑窗口。
- 在“网页服务”下,勾选并填写 自定义端口 (HTTP)。这里我们假设填写为
7000(不要和前面的 WebDAV 5005 搞混)。 - 点击右下角“保存”。这样内网就可以通过 7000 端口单独访问文件管理了。
3.4.2 在 FRPC 中追加 File Station 穿透规则
回到我们 NAS 上的 frpc 配置文件中。在原有的 WebDAV 规则(remote_port = 7002)下方,我们再追加一段给 DS file 专用的转发规则。为了避免端口冲突,我们在云服务器上给它分配一个新的公网端口,比如 7003。追加后的配置大致如下:
# ... (上面保留你原有的 WebDAV 代理配置不动) ...
# 下面是给 DS file 新加的专用代理配置
[[proxies]]
name = "my-nas-filestation"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 7000 # 刚刚在群晖里给 File Station 设置的自定义 HTTP 端口
remote_port = 7003 # 暴露给外网的新端口,务必避开 7000 和 7002
注意:千万不要把外网的 remote_port 也设为 7000,因为云服务器上 frps 的主控端口默认就是 7000,这会导致穿透服务直接崩溃!
并且配置完成后,一定要记得去云服务器的安全组/防火墙中,把这个新增的 7003 端口放行!
3.4.3 手机端登录实操
保存配置文件并重启 NAS 上的 frpc 容器/服务后,拿出手机,打开 DS file App:
- 地址或QuickConnect ID:填入你的专属域名加刚刚放行的端口号,格式为
nas.yourdomain.com:7003(注意: 域名和端口号中间用英文冒号:)。 - 账号 / 密码:输入你的群晖日常登录账号和密码。
- HTTPS 选项:必须关闭(保持灰色)。因为我们在 Cloudflare 中关闭了代理(灰色云朵模式),使用的是纯 IP 直连解析,且当前域名尚未部署 SSL 证书。如果强行开启 HTTPS,App 会因为检测不到安全证书而直接拒绝连接。
点击登录,你就可以随时随地掏出手机,以极速管理和浏览 NAS 里的所有文件了。