基于阿里云官方SDK的动态域名解析脚本,自动获取公网IP并更新阿里云DNS解析记录。
功能特点
- 支持 IPv4 和 IPv6 解析
- 多接口自动切换,提高IP获取成功率
- 支持多个子域名前缀(如
*,www,mc) - 获取失败自动重试机制
- 时间戳日志,方便定时任务排查
- 私有IP过滤,避免错误更新
环境要求
- Python >= 3.7
- 阿里云账号及AccessKey
安装步骤
1. 安装依赖
pip install alibabacloud_alidns20150109==4.4.1 alibabacloud_tea_openapi alibabacloud_tea_util2. 获取阿里云AccessKey
- 登录阿里云控制台
- 点击右上角头像 → AccessKey管理
- 创建AccessKey,记录
AccessKey ID和AccessKey Secret
3. 配置脚本
github地址:https://github.com/tianlingzi/aliyunddns
本站下载:阿里云云解析脚本
编辑 aliyunddns.py,修改以下配置:
# 必填配置
access_key_id = "你的AccessKey ID"
access_key_secret = "你的AccessKey Secret"
domain = "你的主域名" # 如:example.com
# IPv4配置
ipv4_flag = 1 # 1=开启,0=关闭
name1_ipv4 = "*,www,@" # 多个前缀用逗号分隔
# IPv6配置
ipv6_flag = 1 # 1=开启,0=关闭
name1_ipv6 = "*,www,@" # 多个前缀用逗号分隔参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
access_key_id | 阿里云AccessKey ID | LTxxxxxxxxxxxx |
access_key_secret | 阿里云AccessKey Secret | 8xZxxxxxxxxxxxxxxxxxxxx |
domain | 主域名 | example.com |
ipv4_flag | 是否开启IPv4解析 | 1=开启,0=关闭 |
name1_ipv4 | IPv4子域名前缀,多个用逗号分隔 | "*" 或 "*,www,@" |
ipv4_endpoints | IPv4公网IP获取接口列表 | 可自行添加或替换 |
ipv4_repetition | IPv4获取失败后重试次数 | 0=不重试 |
ipv6_flag | 是否开启IPv6解析 | 1=开启,0=关闭 |
name1_ipv6 | IPv6子域名前缀,多个用逗号分隔 | "*" 或 "*,www,@" |
ipv6_endpoints | IPv6公网IP获取接口列表 | 可自行添加或替换 |
ipv6_repetition | IPv6获取失败后重试次数 | 0=不重试 |
使用方法
直接运行
python3 aliyunddns.py设置定时任务(推荐)
在Linux系统中,可以通过crontab设置定时任务,自动更新DNS解析:
# 编辑crontab
crontab -e
# 添加以下内容,每5分钟执行一次
*/5 * * * * /usr/bin/python3 aliyunddns.py >> /var/log/ddns.log 2>&1输出示例
[2026-06-26 10:30:00] 开始解析主域名:example.com
[2026-06-26 10:30:00] 进行ipv4解析
[2026-06-26 10:30:01] 获取ipv4成功:192.168.1.100
[2026-06-26 10:30:01] 正在解析域名:*.example.com
[2026-06-26 10:30:02] IPv4地址没变
[2026-06-26 10:30:02] 进行ipv6解析
[2026-06-26 10:30:03] 获取ipv6成功:2409:8a5c:67e:2660::1
[2026-06-26 10:30:03] 正在解析域名:*.example.com
[2026-06-26 10:30:04] 修改域名解析成功
[2026-06-26 10:30:04] 完成注意事项
- 安全提示:请妥善保管你的AccessKey,不要泄露给他人
- 域名要求:确保域名已添加到阿里云云解析DNS控制台
- IPv6支持:确保你的网络环境支持IPv6,否则IPv6解析会失败
- 权限设置:AccessKey需要具有云解析DNS的读写权限
- 日志查看:建议开启定时任务日志,方便排查问题
常见问题
Q: 运行时提示"access_key_id或access_key_secret为空"
A: 请检查脚本中 access_key_id 和 access_key_secret 是否填写正确。
Q: 获取IPv6失败
A: 请检查网络环境是否支持IPv6,或更换IPv6获取接口。
Q: 修改域名解析失败
A: 请检查AccessKey权限是否足够,或域名是否已添加到阿里云解析控制台。