之前群晖的QuickConnect用的挺好:不用配置端口转发,不用折腾域名和证书,记住一个自定义别名/自选域名即可。但是最近几年情况急转直下,先是内置的几个免费用域名时常挂,QC除了提示必须绑定大陆手机号之外,也时常出现解析失败的问题。
本来买群晖图个省心,无奈之下还是得折腾。解决快速访问主要还是依赖ddns,思路有两个:固定IP或者自定义域名绑定。固定IP对于家庭宽带显然是不可能的。浮动IP的话,就要时不时更新域名指向的ip地址,参考之前的文章还是使用ddns-go。
有了域名,并配置好了ddns,对于群晖来说,就可以通过域名愉快访问了,响应速度是可以的。
但是作为折腾星人,既然涉及到域名,就会看到ssl证书(不是http不能用,而是https更有安全感)。
按着以往的网络经验,这个ssl证书一般自己签,或者干脆使用域名服务商提供的证书(之前一直是这么用的)。然后在群晖的“控制面板-安全性”的“证书”tab里新增证书即可。
证书的作用,是为了说明你提供的这个网站服务,是经过验证可信的,不是仿冒的网站。
证书3个月过期一次,所以每过一段时间就会看到“不安全”的提示,然后各种应用打不开,必须把上面的操作重新来一遍,很烦。
acme.sh,Let's Encrypt 域名证书申请续签
既然是自己的机器,跑个脚本或者加个docker服务来做这个事也是可以的。说干就干。
签证书依然是用acme.sh。他在目标域名和本地服务之间做校验,并生成证书。域名验证就是做一个可达的http落地请求,或者给域名加一个DNS校验,响应acme.sh指定的内容。
acme.sh 是域名证书申请续签程序。支持 http 和 DNS 两种域名验证方式。可同时申请合并多张单域名、泛域名证书,并自动续签证书和部署到项目。也支持Docker部署。
http校验很方便,在服务器操作即可。但是作为网络服务,起码需要一个nginx服务,并且需要定制返回内容。对于单独控制的服务来说不太方便。
DNS校验看起来很复杂,每次都去改DNS记录(添加一条txt),但是由于有了dnsapi,这个过程得以通过代码处理。目前100多个域名供应商都提供了dnsapi,可以通过列表查询。一般在docker里添加从服务商处生产的key和secret,作为启动参数即可。
完事具备。群晖的流程是:
docker独立启动一个acme.sh实例,用于在指定目录下生成证书;
另外启动一个定时任务,定时调用实例,并把生成的证书,复制到群晖的证书目录里。
定时任务启动脚本,设定每月重复。
bash /volume1/autoCert.sh
autoCert.sh文件内容如下:
#!/bin/bash
docker exec neilpang-acme-sh-1 acme.sh --force --log --issue --server letsencrypt --dns dns_dp --dnssleep 120 -d domain.name -d *.domain.name -k 4096
#sudo su root
docker exec neilpang-acme-sh-1 acme.sh --deploy -d domain.name -d *.domain.name --deploy-hook synology_dsm
详细流程参考 这里
jellyfin配置https
jellyfin在群晖下面体验挺好的。无论是播放还是刮削视频信息都很可靠。但是配置https很蛋疼,因为仅仅支持一种证书格式,就是"包含了证书和私钥的 PKCS #12 文件",所以不能直接使用上面生成的证书,需要单独做转换并重启docker。
这次整理的时候,顺便迂回找到一个办法:反向代理。具体配置方法可以看这里,或者自己启动一个nginx效果也一样。