群晖自带的DDNS无法使用泛域名,我在NAS使用过程中需要把域名的所有子域名都通过DDNS指向本机,所以在这里采用装第三方DDNS服务的方法来使用DDNS。

DDNS其实就是动态的调整DNS服务器中的A记录,实现的前提就是域名服务商提供API来修改域名的A记录,我们在需要使用DDNS的地方通过脚本来获取可能动态会变动的公网IP,然后通过API告诉域名服务商修改A记录。

因此,实现DDNS需要做两件事:第一,获取DNSPod的API Token;第二,在本地用程序获取公网IP地址并使用DNSPod API更新A记录。

获取DNSPod Token

在DNSPOD的控制台中,如下图所示点击API密钥中。

点击DNSPod Token并创建密钥,记录下ID和Token。

动态更新DNS

我在威联通上通过docker-compose来实现DDNS。

在nas上合适的位置创建目录,并创建如下文件。

其中docker-compose文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
---
version: "3"
services:
ddns-go:
image: jeessy/ddns-go
container_name: ddns-go
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
network_mode: "host"
restart: unless-stopped

在ddns-go目录下执行命令docker-compose up -d命令来启动ddns-go,使用docker-compose logs -f来查看启动日志,如果启动没有问题,那么就可以使用浏览器访问http://192.168.31.206:9876来访问。ddns-go的配置界面如下:DNS服务商选择Dnspod;ID和Token设置为上面记录的值;Domains设置为*.dreamlyn.cn。

啰嗦一句,最开始的时候,我是将DDNS的域名设置为home.dreamlyn.cn,并将*.dreamlyn.cn的cname设置为home.dreamlyn.cn。但这样设置的话,后面在使用traefik进行DNS Challenge时会存在问题,不得已只好将DDNS直接设置为*.dreamlyn.cn。

在其他配置中,设置登录用户名、密码并保存。

查看右侧的日志并登录DNSPod的后台看*.dreamlyn.cn的A记录是否变更,如变更,则说明DDNS安装成功。

至此,我们便打通了从 外网到NAS的线路,也就是说访问*.dreamlyn.cn:880时会映射到NAS的80端口,访问*.dreamlyn.cn:8443则会映射到NAS的443端口。