本文解决了利用域名解析到群晖的ipv4或ipv6地址,来实现外网访问群晖。同时开始ssl泛域名证书实现https的加密安全访问。
一、动态域名解析(DDNS-GO)
跳过群晖Docker容器安装jeessy2/ddns-go,这是一个提供自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务的项目,并且支持消息推送等进阶功能。同时在Mac、Windows、Linux系统都可以使用,下面的项目链接。
1.docker安装
先在群晖Docker套件->注册表中搜索jeessy/ddns-go,并下载最新版本。
然后在->映象中双击安装,选择“使用与Docker Host相同的网络”
选择“启用自动重新启动”
接下来全部下一步直到完成,我们可以在->容器中看到刚刚安装的jeessy-ddns-go1
2.配置容器
运行容器后,访问网页地址http://你的群晖ip地址:9876,进入DDNS-GO的配置界面
选择你是DNS服务商并输入密钥。
以腾讯云Dnspod为例,打开域名管理平台的API密钥界面,创建新DNSpod Token密钥,将获得的ID和Token分别填入ID和Token。
然后根据需要选择是否需要ipv4与ipv6的解析,并填入要对应的二级域名,注意格式为“XXX.一级域名”,不要填“http://,https://”等其他内容。
配置消息推送等其他功能后,点击最下方的“Save”保存。
稍作等待刷新页面,我们可以在右侧看到日志信息,配置消息推送的可以看到推送出的消息,我这里因为之前配置过所以显示ipv6未变化。当你的公网ip变化时它会实时更新,相比群晖自带的DDNS,它的更新速度会快很多。
然后别忘了在路由器中配置端口转发,将群晖的5000(http访问)、5001(https访问)端口转发出来。
我这里为方便演示将两个端口都转发了,如果你只需要http访问那你输入网址“http://域名:外部端口”就可以直接访问了,这种情况就不需要转发5001端口,如果你跟随下文成功配置ssl证书后,再将5000端口删除保证安全。
二、HTTPS访问(ssl泛域名证书)
1. 说明
由于本次使用的脚本会替换群晖默认证书,所以如果你之后需要用到群晖的默认证书(如QuickConnect服务,但我们都决定用公网ip了谁还用QuickConnect呢?),请在控制面板->安全性->证书中随意上传一份证书以供替换
2. 下载脚本
项目名称:andyzhshg/syno-acme
下载最新的项目压缩包,解压后上传到 NAS 的任意目录下,大概有如下文件。
3. 配置脚本参数
编辑脚本的配置文件 config
:
如图所示,需要编辑的我用箭头指出来了。
首先是 DOMAIN,也就是你的域名,由于是申请泛域名证书,所以你上文解析的是b.a.com,这里只需要填一级域名“a.com”即可,最后申请的证书包括所有*.a.com的域名。
然后是 DNS 的类型,根据服务商的不同,DNS 类型各不相同,比如阿里云(dns_ali),Dnspod(dns_dp),Godaddy(dns_gd)等,具体不多赘述与上文类似。
需要指出的是,我给出的配置文件模板并没有给出所有 acme.sh 支持的域名服务商,config
模板中没有的服务商,请大家自行完善。可点击这里查看有无你需要的域名服务商。一般情况下,这个页面每个文件对应一个域名服务商,比如 dns_ali.sh
就是对应阿里云,文件名去掉.sh
扩展名就是 DNS 类型,比如阿里云的 DNS 类型就是 dns_ali
。
4. 配置定时任务
首先查看脚本具体所在位置并复制
打开 控制面板->任务计划->新增->计划的任务->用户定义的脚本
设置任务名称和用户账户,需要注意的是用户账户要选择root
设置计划的时间和周期,由于Let’s Encrypt证书有效期为三个月,所以这里可以每个月执行一次
设置执行脚本,脚本路径是上文查看的,这里我们将脚本的输出重定向到了一个log.txt的文件中,是为了方便后期查看脚本的执行情况
/volume2/docker/syno-acme/cert-up.sh update >> /volume2/docker/syno-acme/log.txt 2>&1
可以在新建的任务上点击右键立即执行任务,这样脚本就会运行,自动更新证书,并重启 web 服务器加载新的脚本。以后,NAS会每隔一个月执行一次该脚本,自动更新证书。
最后在控制面板->登录门户->DSM中强制开启https
在地址栏输入“https://ipv4域名:5001对应的外部端口”或“https://ipv6域名:5001”访问成功并看到这样一个小锁的图形则说明配置成功
另外脚本里提供了回滚命令,可以通过 ssh 登录到 nas,定位到对应目录,执行如下命令回滚证书目录到备份的状态:
/volume2/docker/syno-acme/cert-up.sh revert