# Ipv6 Ddns Aliyun

> 自动设置本机公网 IPv6 地址到阿里云云解析 DNS 的 DDNS 工具。流程：1) 检测本机公网 IPv6 地址；2) 检查并依赖 aliyun-domain-skill；3) 询问用户选择域名和主机记录；4) 验证域名归属；5) 查询现有 AAAA 记录；6) 如 IP 变化则更新或新增解析记录。配置保存在当前工作目录的 .aliyun-config.json。

- Skill: `shigzz/ipv6-ddns-aliyun` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add shigzz/ipv6-ddns-aliyun`
- Raw SKILL.md: https://api.skillmd.com/api/skills/shigzz/ipv6-ddns-aliyun/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: shigzz (https://skillmd.com/u/shigzz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/shigzz/ipv6-ddns-aliyun

---


## 能力概述

本 Skill 实现了一个完整的 IPv6 DDNS（动态域名解析）解决方案，自动将本机获取到的公网 IPv6 地址同步到阿里云云解析 DNS。

## 工作流程

```
┌─────────────────────────────────────────────────────────────┐
│ 1. 检测本机公网 IPv6 地址                                    │
│    - 过滤 fe80::/10 (链路本地)                               │
│    - 过滤 ::1/128 (回环地址)                                 │
│    - 筛选出公网可路由的 IPv6 地址                             │
│    - 验证公网可达性：                                         │
│      * 通过 curl 6.ipw.cn 获取出口 IPv6 地址                 │
│      * 与本机网卡 IPv6 地址比对                               │
│      * 如匹配成功，确认为公网地址                             │
│    - 如无公网 IPv6，报错退出                                 │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. 检查 aliyun-domain-skill 依赖                             │
│    - 检查本地是否存在 domain/SKILL.md                       │
│    - 如不存在，执行安装命令：                                 │
│      npx skills add shigzz/aliyun-skills --skill aliyun-domain-skill
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. 读取或询问 DDNS 配置                                       │
│    - 检查当前目录 .aliyun-config.json                       │
│    - 如有配置且用户确认，直接使用                            │
│    - 如无配置，交互式询问：                                   │
│      * 根域名 (如 example.com)                               │
│      * 主机记录 (如 ddns 或 @)                                │
│      * TTL (默认 60 秒)                                      │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. 验证域名归属                                               │
│    - 通过 aliyun-domain-skill 查询账号域名列表                │
│    - 确认用户指定的根域名在列表中                             │
│    - 如不存在，提示用户先去阿里云注册域名                      │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│ 5. 查询现有 AAAA 记录                                         │
│    - 通过 aliyun-domain-skill 查询域名解析记录                │
│    - 筛选 Type=AAAA, RR=主机记录 的记录                       │
│    - 获取记录 ID 和当前 IP 值                                 │
└─────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────┐
│ 6. 更新或新增解析记录                                         │
│    - 如现有记录 IP == 本机 IPv6：提示无需更新，退出           │
│    - 如存在记录但 IP 不同：更新记录                           │
│    - 如不存在记录：新增 AAAA 记录                             │
│    - 更新成功后保存配置到 .aliyun-config.json                │
└─────────────────────────────────────────────────────────────┘
```

## 依赖说明

本 Skill 依赖 **aliyun-domain-skill** 提供的域名管理能力：
- 查询账号域名列表
- 管理 DNS 解析记录（查询、新增、修改 AAAA 记录）

如未安装，请执行：
```bash
npx skills add shigzz/aliyun-skills --skill aliyun-domain-skill
```

## 配置存储

DDNS 配置保存在**当前工作目录**的 `.aliyun-config.json`，支持两种格式：

### 单项目配置（对象格式）

```json
{
  "version": 1,
  "ddns": {
    "domain_name": "example.com",
    "rr": "ddns",
    "ttl": 60,
    "record_id": "12345678901234567",
    "last_ip": "2408:4002:1c2f:8d00::1",
    "last_update": "2026-03-28T15:30:00+08:00"
  }
}
```

### 多项目配置（数组格式）

支持在同一仓库中管理多个 DDNS 配置（如多域名或多主机）：

```json
[
  {
    "project": "nas-home",
    "version": 1,
    "ddns": {
      "domain_name": "example.com",
      "rr": "nas",
      "ttl": 60,
      "record_id": "12345678901234567",
      "last_ip": "2408:4002:1c2f:8d00::1",
      "last_update": "2026-03-28T15:30:00+08:00"
    }
  },
  {
    "project": "router-office",
    "version": 1,
    "ddns": {
      "domain_name": "company.com",
      "rr": "router",
      "ttl": 60,
      "record_id": "98765432109876543",
      "last_ip": "2408:4002:1c2f:8e00::1",
      "last_update": "2026-03-28T10:00:00+08:00"
    }
  }
]
```

**字段说明**：

| 字段 | 类型 | 必需 | 说明 |
|------|------|------|------|
| `project` | string | **多项目时必需** | 项目标识名，用于区分不同配置 |
| `version` | int | 是 | 配置格式版本，当前为 1 |
| `ddns.domain_name` | string | 是 | 根域名，用于 DNS 解析 |
| `ddns.rr` | string | 是 | 主机记录，如 `ddns` 或 `@` |
| `ddns.ttl` | int | 否 | DNS 记录 TTL，默认 60 秒 |
| `ddns.record_id` | string | 否 | 阿里云 DNS 记录 ID |
| `ddns.last_ip` | string | 否 | 上次更新的 IP 地址 |
| `ddns.last_update` | string | 否 | ISO 8601 格式最后更新时间 |

### 配置复用

- **对象格式**：若配置存在且字段完整，本次可直接复用，无需再次询问
- **数组格式**：提示用户选择要使用的项目（按 `project` 字段区分），选定后仅更新该项目配置

若用户要求更换域名或主机记录，或新增项目配置，则重新交互确认。

## 前置检查

### 1. 阿里云凭证

需要阿里云 AccessKey，配置方式见 aliyun-domain-skill：

**环境变量方式（推荐）：**
```bash
export ALIBABA_CLOUD_ACCESS_KEY_ID="your-access-key-id"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your-access-key-secret"
```

**.env 文件方式：**
```bash
cp .env.example .env
# 编辑 .env 填入凭证
```

## 使用方法

### 作为 Claude Code Skill 调用

```
设置本机的 IPv6 DDNS
更新我的 DDNS 记录
```

## 错误处理

| 错误场景 | 处理方式 |
|----------|----------|
| 无公网 IPv6 | 退出并提示用户检查网络配置 |
| aliyun-domain-skill 未安装 | 提示用户安装依赖 skill |
| 域名不存在于账号 | 提示用户去阿里云注册域名 |
| DNS 操作权限不足 | 提示用户配置 RAM 权限后重试 |

## 注意事项

1. **IPv6 要求**：本机必须有公网可路由的 IPv6 地址（非 fe80:: 开头的链路本地地址）
2. **公网验证**：通过 `curl 6.ipw.cn` 获取出口 IPv6，与本机网卡地址比对，确认地址为公网可达
3. **TTL 设置**：建议设置为 60 秒，以便 IP 变化时快速生效
4. **域名归属**：域名必须在当前阿里云账号下，且使用阿里云云解析 DNS
5. **首次配置**：首次运行需要交互式输入域名和主机记录，后续可从 `.aliyun-config.json` 读取
6. **多 IPv6 地址**：如本机有多个公网 IPv6，默认使用第一个

