阿里云DDNS动态域名解析自动化脚本

本文最后更新于 2023年9月18日 上午

阿里云DDNS动态域名解析自动化脚本

此脚本将指定的域名和当前设备的公网 IP 地址一起提交给域名解析服务器,使外网设备可以通过域名访问当前设备。

脚本同时支持 IPv4 和 IPv6。没有公网 IPv4 地址,运营商已支持 IPv6,以下就以 IPv6 为例。

1 测试是否已接入 IPv6 网络

IPv6 测试,成功接入 IPv6 网络显示如下:

test-ipv6

如果没接入 IPv6 网络,参考中国电信IPv6地址获取教程

2 准备域名

去阿里云万网购买一个域名。需要实名认证,购买域名时要填真实信息。

域名购买成功后,登录阿里云,进入控制台,RAM 访问控制。用户 ➡️ 创建用户:

createuser

图中勾选了编程访问,会生成 AccessKey IDAccessKey Secret

idsecret

为新加的用户添加权限 AliyunDNSFullAccess

dnsfullaccess

3 下载脚本

直接在用脚本的设备运行

1
git clone https://gitee.com/tyasky/aliddns6

4 修改配置

修改配置文件 config.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
AccessKeyID=阿里云API的ID
AccessKeySecret=阿里云API的密匙
DomainName=你的要解析的域名的根域

[IPv4]
# 格式:子域名前缀=IP地址或者获取IP地址的命令
#win104=netsh interface ipv4 show addresses "以太网"|grep IP|awk '{print $NF}'
#linux4=ip -4 addr|grep global|head -1|awk -F/ '{print $1}'|awk '{print $NF}'

[IPv6]
# 获取公网IP地址的命令:https://github.com/chubin/awesome-console-services#IP-Address
#win106=netsh interface ipv6 show addresses "以太网"|grep Address|head -1|awk '{print $2}'
#linux6=ip -6 addr|grep global|head -1|awk -F/ '{print $1}'|awk '{print $NF}'
# 据 MAC 地址获取局域网邻居 IPv6 地址
#neighbor6=ip -f inet6 neighbor show|grep MAC地址|grep -v fe80|head -1|awk '{print $1}'

3hrhhcentosbash

例如:

1
2
3
4
5
6
7
8
9
10
[common]
AccessKeyID=LTAI5t68L2xxxxxxxxxxxxxxxxx
AccessKeySecret=QQQGJIfnOfLGxxxxxxxxxxxxxxxxx
DomainName=example.com

[IPv4]
linux4=ip -4 addr|grep global|head -1|awk -F/ '{print $1}'|awk '{print $NF}'

[IPv6]
linux6=ip -6 addr|grep global|head -1|awk -F/ '{print $1}'|awk '{print $NF}'

上面配置文件的含义是将域名 linux4.example.com 解析到本机的 IPV4 地址以及域名 linux6.example.com 解析到本机的 IPV6 地址。

5 手动执行

1
./aliddns.sh

6 自动运行

  1. Windows
    若配置文件为脚本所在目录的 config.ini,双击 createSchTask.vbs,创建计划任务。
    其他情况,将配置文件拖放到 createSchTask.vbs 上,创建计划任务。

  2. Linux
    创建定时任务

1
crontab -e

最后边添加如下内容:

1
*/5 * * * * /path/to/aliddns.sh -f /path/to/config.ini

命令中的路径都为绝对路径。如上是每 5 分钟执行一次。

  1. 华硕路由器梅林
    1. 安装 Entware,然后安装 bash,gawk。
      Opkg update && opkg install bash gawk
    2. 复制 aliddns. Sh 到 /jffs/scripts/ 路径下,改名为 ddns-start。
      Cp aliddns 6/aliddns. Sh /jffs/scripts/ddns-start
    3. 复制 config. Ini 到 /jffs/scripts/ 路径下,修改配置。
      cp aliddns6/config.ini /jffs/scripts/

7 问题解决

  1. 脚本报错,检查终端
    用命令 whereis bashecho $0 确认系统中有没有 bash,没有则安装上。

  1. 脚本运行报错,未获取到阿里云查询结果
    原因:跨系统传脚本文件会存在换行符不同导致运行报错的问题。
    解决:只在运行脚本的地方编辑脚本。

3hrhh

3hrhhcentosbash

  1. crontab 设置了计划任务,”没有” 自动执行
    原因: crontab 没有加载 PATH 全部路径,脚本里的命令找不到。
    解决:在 kk.txt 第一行加上下面这句

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

crontabPATH

  1. 手动删除解析记录
    主域名是 xx.com,删除 test.xx.com 的解析记录
    ./aliddns.sh -f conf.txt -d test

参考

  1. aliddns6: 阿里云动态域名解析脚本 (gitee.com)
  2. 阿里云云解析 DNS API 文档
  3. 检查域名解析情况

阿里云DDNS动态域名解析自动化脚本
https://hexo.leelurker.com/posts/47649
作者
LeeLurker
发布于
2023年9月15日
许可协议