原文章链接

〇、本文的使用场景

笔者近期购买了群辉的220+,由于家里没有公网IP,无法支持DDNS访问,因此需要一个内网穿透的解决方案。

可选方案比较

  • 群辉QuickConnect:虽然白群晖支持群辉官方的QuickConnect跳转访问群辉,但访问速度很慢,而且也没法发布群辉上的其他服务(比如Webdav)到公网。
  • FRP方案:需要自己购买一台公有云的虚拟机部署FRP服务器端,还需要在登录群辉的ssh安装脚本。而且frp的可维护性也很差,经常因为各种原因故障断开,恢复时只能登录ssh来检查,非常麻烦。
  • 花生壳等收费方案:毕竟公网穿透还需要收费购买流量,成本不低,而且安全性也不太放心。

一、准备工作

  1. 首先一个Cloudflare账号 https://www.cloudflare.com/zh-cn/
  2. 我们需要规划一个域名地址,这个域名可以从Cloudflare上直接申请注册,或者通过其他域名供应商申请后,转入到Cloudflare上托管。如果是前者,则可直接在Cloudflare购买域名,本文采用这种方式介绍
  3. 一台正常运行的X86架构群辉NAS(笔者采用的是DSM7.1版本白群辉,理论上DMS6.x、黑群辉也适用),安装群辉的Docker套件
  4. 有无公网IP均可

二、Cloudflare购买域名

域名不仅仅可以用于Cloudflare内网穿透,还可以用于建站、搭建Email等诸多用途,因此付出这部分费用性价比是很高的。

  1. 在Cloudflare购买域名并用付款
  2. 注册、购买完成后,需要对域名进行激活。登录注册域名使用的邮箱,根据cloudflare的邮件指引激活域名即可
  3. 激活后,即可在管理域的页面看到自己购买的域名。这个域名就已经托管在cloudflare上了!
  4. 进入Cloudflare的“网站”页面,可见Cloudflare注册新的域名后,会自动创建一个同名的“站点”

三、Cloudflare创建ZeroTrust Access Tunnel

  1. 选择站点详情里面,左侧的Access,并进入零信任管理页面
  2. 进入Tunnels(隧道)管理页面,创建一个Access Tunnel
  3. 输入隧道名称,这里我们以“SynologyNAS”命令
  4. 保存隧道后,Cloudflare会给出各种不同部署环境下的Connector的安装命令,这里我们选择Docker
  5. 复制这里的命令,先保留好,下一步我们再群辉上会用到。注意这里的Token信息需要保密,不要泄露给第三方!
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiZTNhNjk4ZGFkMWNhMTAwMTY2NjNiOWI4ZTZjODkyNDYiLCJ0IjoiZWIyMDYzZDAtYWY2YS00MGY1LWJjOGItOTE0Yjg5Y2RmNWI2IiwicyI6Ik5tRXlOV0ZsWXprdE56WTBOeTAwT0dNM0xUazNaVGt0WldJMk16WmlObUppTW1VeSJ9

四、群辉上部署Cloudflare Access tunnel的Connector

  1. 进入群辉的Docker套件,在注册表中搜索“cloudflare”,选择Cloudflare的官方镜像(cloudflare/cloudflared)、下载 标签这里选择“latest”即可 容器镜像下载完成后,会出现在镜像列表中

  2. 点击启动,容器网络选择使用于Docker Host相同的网络,并选择下一步

  3. 因为希望群辉时刻可以从公网访问,因此建议选择“启用自动重新启动”,这样一旦容器因为某种原因关闭后,群辉docker会自动重启隧道。

  4. 进入“高级设置”的“执行命令”页面,在“命令”这里需要输入容器的启动命令,这一步非常关键!

找到我们前面Cloudflare Access tunnel时,Cloudflare给出的docker命令,我们取其中一部分命令,形成一个命令参数,形如“tunnel run --token xxxx”,粘贴到群辉的命令框中并保存 docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  1. 继续下一步后,端口设置、存储空间设置这里保留默认值无需改动,一路下一步后启动容器

  2. 容器启动后,可以进入详情-日志,查看tunnel是否已经建立了。如果有报错或者容器无法正常启动,则没有启动成功。

  3. 回到Cloudflare检查隧道是否已经建立。如果你仍然停留在tunnel的创建页面,则会在下面的“Connectors”里看到群辉NAS与Cloudflare数据中心建立的连接。比如这里代表群辉的NAS通过Tunnel连接到了SJC、HKG两个数据中心

  4. 也可以回到Tunnel列表,Status这里显示Acitve,则说明隧道建立成功!

不过目前的状态只是Tunnel的Connector成功连接到了Cloudflare数据中心,我们并没有发布群辉的登录页面到公网。如果想要实现内网穿透,还需要把群辉的web页面通过tunnel隧道发布到公网。

五、在Cloudflare上发布群辉的登录页面

  1. 先打开群辉的控制面板-登录门户,确认一下群辉登录页面的HTTP端口号,如下图:

  2. 在Cloudflare的隧道列表,选择对应隧道-Configure,进入配置页面

  3. 新增一个public hostname

Domain这里选择前面在Cloudflare购买/托管的域名 如果想通过子域名访问群辉,就在Subdomain这里自定义一个子域名,用来访问群辉NAS,比如子域名为cloud,就可通过cloud.<主域>.com来访问群辉 如果想通过主域名下的路径来访问群辉,就在Path这里自定义一个路径,比如路径为cloud,就可通过<主域>.com/cloud来访问群辉 Service服务这里,选择HTTP,URL这里填写群辉NAS的本地端口号,并添加localhost

点击保存后,Cloudflare会自动下发配置到群辉docker中的tunnel connector里,从而实现外网穿透。

  1. 通过群辉Docker的日志,可以检查配置是否自动下发成功了

六、检查内网穿透效果

浏览器直接访问发布的子域名,注意cloudflare会自动代理为https,因此要以https来访问: https://cloud.<主域名>.com