用阿里云 DNS 做 IPv6 DDNS,我写了个小脚本

IPv6

现在运营商基本都给公网 IPv6 了,电脑、手机、家里路由器基本都有。光猫拨号的话,下面设备拿到的也是公网 IPv6 地址。

这就意味着:你可以直接通过 IPv6 从外面访问家里的设备,不需要内网穿透,不需要 ngrok 之类的玩意。

但问题来了——运营商的 IPv6 前缀会变,设备地址也跟着变。我总不能每次变地址都去阿里云后台改解析吧?

所以就有了这个脚本。

怎么知道你有没有 IPv6

先确认你设备有 IPv6,省得折腾半天发现没有。

Windows:
打开 CMD 或 PowerShell,跑一下:

1
ipconfig

看有没有以 2408240e2409 开头的地址(移动是 2409,电信 240e,联通 2408)。有就说明你有公网 IPv6 了。

Mac / Linux:

1
ifconfig | grep inet6

或者

1
ip addr | grep inet6

最简单的方法:
浏览器打开 test-ipv6.com,它会告诉你有没有 IPv6,还会显示你的公网 IPv6 地址。

这脚本干啥的

简单说:定期检查你当前的公网 IPv6 地址,如果变了,自动调用阿里云 DNS API 把解析记录更新成新地址。

支持多个子域名,比如你可以同时更新 @.example.org(根域名)和 v6.example.org

目前支持:

  • 多个第三方 IPv6 获取接口(ipify、icanhazip、ident.me 等),一个不行自动换下一个
  • 如果外网接口都挂了,会 fallback 到本地 ipconfig 获取
  • IP 没变化的时候完全静默,不刷日志
  • IP 变化会记录变化前后地址,方便排查
  • 交互式控制台,可以手动触发更新或查看状态

安装

环境要求

  • Python 3.7 以上(建议 3.11,兼容性最好)
  • pip

下载代码

直接把 ipv6_clt.py 下载到本地就行,就一个文件,没有其他依赖项目录。


📥 点此下载脚本 → cloud.cuberliu.xyz

安装依赖

1
pip install aliyun-python-sdk-core aliyun-python-sdk-alidns requests

如果报错说 pyOpenSSL 有问题,试试:

1
pip install pyOpenSSL==24.1.0 cryptography==42.0.5

配置

打开 ipv6_clt.py,找到配置区域:

1
2
3
4
5
ACCESS_KEY_ID = '你的阿里云 AccessKey ID'
ACCESS_KEY_SECRET = '你的阿里云 AccessKey Secret'
REGION_ID = 'cn-guangzhou'
DOMAIN_NAME = 'example.org'
SUB_DOMAINS = ['@', 'v6']
  • AccessKey:去阿里云控制台 → 右上角头像 → AccessKey 管理,创建或查看已有的。建议用 RAM 子账号,只给 DNS 权限。
  • DOMAIN_NAME:你的主域名,必须是在阿里云 DNS 托管的。
  • SUB_DOMAINS:要更新的子域名列表。@ 代表根域名,ipv6 就是 ipv6.你的域名。支持通配符 *.xxx

注意:确保你的 AccessKey 有 DNS 管理权限(AliyunDNSFullAccess)。

运行

守护进程模式(默认)

直接跑:

1
python ipv6_clt.py

脚本会每隔 60 秒检查一次 IP 是否有变化,有变化就更新 DNS。

交互式控制台

1
python ipv6_clt.py console

进去之后可以:

  • status — 查看当前 IP、DNS 记录、统计信息
  • log — 看最近 20 条日志
  • log 50 — 看最近 50 条
  • update — 手动触发一次更新
  • quit — 退出

开机自启(Windows)

可以用任务计划程序创建一个任务,触发器选“启动时”,操作选运行 Python 脚本。

或者写个 .bat 文件扔到启动目录也行:

1
2
@echo off
D:\Python\.venv\Scripts\python.exe D:\Python\old\IPV6-SERVER\ipv6_clt.py

日志文件

脚本会生成三个日志文件:

  • ddns.log — 主日志,记录所有关键操作
  • ip_changes.log — IP 变化的详细记录,只记变化,不记没变的
  • ip_checks.log — IP 检查记录,也只记变化和错误

想看最近发生了什么,直接打开 ddns.log 就行。

几个常见问题

Q:我怎么知道脚本在正常工作?
A:你可以自己改一下子域名的 AAAA 记录值,等下一轮检查(60 秒内)脚本会自动改回来,日志里会有记录。

Q:更新频率能改吗?
A:可以,改 CHECK_INTERVAL = 60 这个值,单位是秒。

Q:支持多个域名吗?
A:支持,在 SUB_DOMAINS 列表里加就行。

Q:控制台显示 emoji 乱码?
A:Windows 的话用 Windows Terminal,或者 VS Code 的终端。普通 CMD 可能会显示乱码,但不影响功能,日志文件里是正常的。