外网远程访问威联通、群晖等 NAS 的异地容灾方案
2022-12-17
| 2023-9-1
0  |  0 分钟
页面类型
发布状态
发布日期
文章地址
内容摘要
文章标签
文章分类
icon代码
密码
最近没钱续宽带,用了用房东的宽带,谁曾想房东宽带的速度稳定性还很给力,就是没了公网,NAS用户体验直接夭折,官方的中转服务越用越气,应应急还行,所以研究了一下,利用 NewFuture/DDNS 开源软件配合 fatedier/FRP 实现了多地转发、异地容灾的折中方案,出奇稳定,还使用了 Cloudflare Tunnel 实现保底连接,从此 NAS 永不失联。
 
💡
文章内容尽量讲透整体的实现思路及原理,后期有空再提供完整服务器端及客户端的 docker compose 模板降低学习成本
 

注意事项

实现的本质是利用中间服务器进行中转,但我们可以利用 Cloudflare Tunnel 实现转发,起码比 NAS 官方中转好使。
1、中转服务器一个或多个(可选);
2、家里或朋友有公网的宽带能给你用(可选);
3、域名一枚并由Cloudflare管理;
4、NAS安装配置 Cloudflare Tunnel;
5、因人而异。

基本思路

用python编写程序使用tcping间歇测试中转服务器与NAS的通讯情况,选择最优的服务器解析到”nas.xxx.com”域名,若配置的服务器均无法访问,解析至 Cloudflare Tunnel 确保基本的连接保障,只要NAS有网既可以访问,NAS 到内部的应用使用了 nginx 进行反代理,为了配置证书及统一接口。

创建 Cloudflare Tunnel

登录 Cloudflare 的 Zero Trust 控制面板,在左侧导航栏的 access 选择 tunnels,创建一个隧道名称随意,创建后会提供官方安装方案,将隧道程序安装到NAS主机。
notion image
配置好后端地址,此时 Cloudflare 会创建一条解析记录,cname 到 Connector ID。
notion image
安装完成后保留好 Connector ID 以备后用
notion image

配置中转服务器

在中转服务器安装 FRP 服务端,安装方法参考官方文档。
frp/README_zh.md at dev · fatedier/frp
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括: 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。 代理组间的负载均衡。 端口复用,多个服务通过同一个服务端端口暴露。 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。 服务端和客户端 UI 页面。 frp 目前已被很多公司广泛用于测试、生产环境。 master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试。 我们正在进行 v2 大版本的开发,将会尝试在各个方面进行重构和升级,且不会与 v1 版本进行兼容,预计会持续一段时间。 现在的 v0 版本将会在合适的时间切换为 v1 版本并且保证兼容性,后续只做 bug 修复和优化,不再进行大的功能性更新。 完整文档已经迁移至 https://gofrp.org 。 frp 是一个免费且开源的项目,我们欢迎任何人为其开发和进步贡献力量。 在使用过程中出现任何问题,可以通过 issues 来反馈。 Bug 的修复可以直接提交 Pull Request 到 dev 分支。 如果是增加新的功能特性,请先创建一个 issue 并做简单描述以及大致的实现方法,提议被采纳后,就可以创建一个实现新特性的 Pull Request。 欢迎对说明文档做出改善,帮助更多的人使用 frp,特别是英文文档。 贡献代码请提交 PR 至 dev 分支,master 分支仅用于发布稳定可用版本。 如果你有任何其他方面的问题或合作,欢迎发送邮件至 fatedier@gmail.com 。 提醒:和项目相关的问题最好在 issues 中反馈,这样方便其他有类似问题的人可以快速查找解决方法,并且也避免了我们重复回答一些问题。 如果您觉得 frp 对你有帮助,欢迎给予我们一定的捐助来维持项目的长期发展。 您可以通过 GitHub Sponsors 赞助我们。 企业赞助者可以将贵公司的 Logo 以及链接放置在项目 README 文件中。 如果您想学习 frp 相关的知识和技术,或者寻求任何帮助及咨询,都可以通过微信扫描下方的二维码付费加入知识星球的官方社群:
frp/README_zh.md at dev · fatedier/frp
配置文件参考:
💡
高级玩法:实际使用中发现,如果是安装在家宽并单独使用 FRP 进行 NAT 一段时间后运营商会有一定几率封端口,建议使用伪装工具对 FRP 流量进行隐藏保安全。

NAS 安装 Nginx

在 NAS 上使用 Nginx 对内部服务进行反代理,这样的目的是为了统一接口和配置域名证书,具体配置方案网上找找吧,这个都是因人而异,网上也很多关于nginx反代理的教程,这里提供我其中反代 NAS 页面的参考
Tips:Nginx 可不止能反代理 WEB 哦。
需要注意:FRP 客户端若开启了 Proxy Protocol ,nginx 也要开启 Proxy Protocol 协议。

NAS 安装 FRP

NAS 上需要安装 FRP 客户端,配置了多少个服务器就需要安装多少个客户端(推荐使用Docker)。
配置文件参考:

NAS 安装 DDNS

程序由 NewFuture/DDNS 的源码二次开发,主要实现的作用是测试中转服务器的可用性,选择延迟最低的更新解析到指定域名,从域名解析层实现故障切换,如果配置的中转服务器均无法使用解析到 Cloudflare Tunnel ,由于 Cloudflare 有端口限制除了固定的端口外,其他端口是无法访问的。这就是为什么要用 Nginx 进行反代理统一接口的原因之一。
配置说明:
具体安装及使用方法可参考官方教程:https://github.com/NewFuture/DDNS/blob/master/README.md
二次开发(本文使用)

实际效果

DDNS 服务解析更新地址的记录
notion image
实际维护了两条中转隧道,家用公网做主用、服务器备用,CloudFlared 保底备用。
notion image

更新计划

提供 Docker 配置模板(已重构)
兼容本地公网(下篇文章更新)
Docker 按需启动(已重构)
 
💡
未尽事宜欢迎留言沟通
 
 
技术分享
  • NAS
  • DDNS
  • Python
  • WP插件CodeColorer兼容PHP7Linux防火墙管理脚本,自动屏蔽网络威胁IP
    目录