对于需要远程访问家庭或私有云存储的用户,将群晖 NAS 的 WebDav 服务通过 Frp 反向代理暴露到公网,是兼顾安全性与便捷性的解决方案。本文将从服务器准备到最终调试,详细讲解如何通过 Frps + 群晖 WebDav 实现外网文件同步,并解决常见踩坑问题。
通过 Frp 反向代理,将内网群晖的 WebDav 服务映射到公网,支持:
• 外网设备(PC、手机、平板)通过 HTTP/HTTPS 协议访问群晖文件;
• 实时同步本地与 NAS 文件(支持 WebDav 原生协议);
• 低延迟、高稳定性的远程访问体验。
类别 | 工具/资源 | 说明 |
---|---|---|
服务器 | 阿里云/腾讯云 200M 带宽实例 | 推荐阿里云 2C2G(68元/年)或腾讯云 2C1G(408元/年),需备案域名 |
系统 | Debian 12.x | 轻量稳定,适合部署反向代理服务 |
反向代理工具 | Frp | 开源高效,支持 TCP/HTTP 多种代理模式 |
证书服务 | Let’s Encrypt | 免费 SSL 证书,通过 OpenResty 自动申请 |
辅助工具 | 1Panel | 一键部署环境、管理服务,简化运维 |
域名解析:
• 购买域名(如 yourdomain.com)后,在 DNS 管理后台添加泛解析 *.yourdomain.com 指向服务器公网 IP(需备案,否则会被拦截)。
• 服务器初始化:
重置服务器密码,关闭不必要的防火墙规则(后续通过 1Panel 管理),确保 22 端口(SSH)开放。
1Panel 是轻量级服务器管理工具,可快速安装环境、管理服务。
安装命令:
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
• 登录服务器后执行,等待自动安装(约 5 分钟)。
• 访问 http://服务器IP:10086,使用初始账号 admin 和密码登录。
通过 1Panel 后台「网络」→「防火墙」开放以下端口:
• 基础服务:80(HTTP)、443(HTTPS)、22(SSH);
• Frp 通信:7000(Frps 服务端口)、7001/7002(HTTP/HTTPS 反代端口);
• 自定义端口:根据需求开放(如群晖 WebDav 本地端口 5002,后续通过 TCP 反代时需开放对应公网端口)。
Supervisor 可监控并自动重启关键服务(如 Frps),避免进程意外终止。
• 路径:1Panel 后台 →「工具箱」→「进程守护」→「初始化」;
• 按提示完成安装后,可通过 supervisorctl 命令管理进程。
为确保传输安全,需为 *.yourdomain.com 申请免费 SSL 证书(Let’s Encrypt)。步骤 :
• 选择「DNS 验证」(需配置 DNS 解析记录,按提示操作);
• 勾选泛域名 *.yourdomain.com,完成申请;
• 域名:webdav.yourdomain.com(或其他自定义子域名);
• 反向代理:目标地址填 127.0.0.1:7001(后续 Frps 会将 HTTP 请求转发至此);
• 启用 HTTPS:绑定已申请的证书,强制 HTTPS 跳转(可选)。
• 登录群晖 DSM 系统 →「套件中心」→ 搜索安装「WebDav Server」;
• 启动服务后,默认 HTTP 端口为 5002(可在「设置」→「高级」中修改)。
• 添加第三方套件源:进入「套件中心」→「设置」→「套件来源」→ 添加 https://spk.imnks.com/(可靠社区源);
• 搜索安装「frpc」套件,启动后进入配置界面。
Frps 是反向代理服务端,需在服务器上部署并配置。配置文件 frps.toml 示例 (路径:/etc/frp/frps.toml):
bindPort = 7000 # Frps 监听端口(与服务器防火墙开放端口一致)
vhostHTTPPort = 7001 # HTTP 反代端口(对应公网访问端口)
vhostHTTPSPort = 7002 # HTTPS 反代端口(可选)
auth.method = "token" # 启用 Token 认证(增强安全性)
auth.token = "your-random-token" # 自定义 Token(建议复杂字符串)
Frpc 是反向代理客户端,需在群晖上配置并连接至服务器。
配置文件 frpc.toml 示例(路径:/etc/frp/frpc.toml):
serverAddr = "你的服务器公网IP" # 或域名(需能解析到服务器)
serverPort = 7000 # 与服务器 frps.bindPort 一致
auth.token = "your-random-token" # 与服务器 Token 一致
[[proxies]]
name = "synology-webdav-http"
type = "http"
localPort = 5002 # 群晖 WebDav 本地 HTTP 端口
customDomains = ["webdav.yourdomain.com"] # 与服务器创建的网站域名一致
现象:申请证书时提示“域名未备案”,无法通过 OpenResty 绑定。
解决:
• 若仅需 HTTP 访问,可跳过 HTTPS 步骤,直接通过 http://webdav.yourdomain.com 访问;
• 若需 HTTPS,建议注册已备案域名(如阿里云万网、腾讯云 DNSPod 均提供快速备案服务)。
现象:使用 http://webdav.yourdomain.com 访问时,Windows 持续要求输入账号密码。
原因:Windows WebClient 服务默认禁用 HTTP 基本认证。
解决:
• 按 Win+R 输入 regedit 打开注册表,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters;
• 双击 BasicAuthLevel,将值改为 2(允许 HTTP 基本认证);
• 重启 WebClient 服务(services.msc → 找到 WebClient → 重启)。
可能原因:
• 服务器防火墙未开放 7000 端口(Frps 服务端口);
• Token 输入错误(服务器与客户端 Token 不一致);
• 网络延迟过高(跨运营商线路不稳定)。
解决:
• 检查服务器防火墙规则,确认 7000 端口已放行;
• 对比 frpc.toml 中的 auth.token 与 frps.toml 中的 auth.token 是否完全一致;
• 尝试更换服务器节点(如从腾讯云切换至阿里云),或使用中转节点优化线路。
Fail2Ban 可监控 SSH 等服务的登录日志,自动封禁频繁尝试的 IP。
• 1Panel 后台 →「应用商店」→ 搜索安装「Fail2Ban」;
• 配置文件(/etc/fail2ban/jail.local)中调整策略:
[sshd]
enabled = true
maxretry = 3 # 允许最多 3 次失败尝试
findtime = 600 # 10 分钟内超过次数封禁
bantime = 3600 # 封禁 1 小时
Frp 的 Token 是身份验证的关键,建议:
• 使用 16 位以上随机字符串(如 openssl rand -base64 16 生成);
• 定期更换 Token(修改服务器和客户端配置后重启服务);
• 避免将 Token 写入日志或公开文档。
通过本文的步骤,可快速搭建一个稳定的外网 WebDav 访问通道,支持多设备同步文件。以下是优化建议:
• 性能优化:若带宽不足(如多人同时上传),可升级服务器至 500M 峰值带宽;
• 版本管理:如需文件版本控制,建议搭配群晖「Hyper Backup」或第三方工具(如 Rsync);
• 替代方案:若需强制下线、权限管理等高级功能,可直接使用群晖「DS Drive」套件(支持客户端同步与管理)。
—— 评论区 ——