# 智能 DNS

智能 DNS 用独立的权威调度节点，为业务服务器组的入口域名选择推荐地址。它按健康证据与配置权重调整后续解析的选择机会，不负责迁移已有连接，也不保证各入口的连接数和流量严格相等。

## 先理解三种资源

| 资源 | 作用 |
| --- | --- |
| 父区与 DNS API 配置 | 承载面板管理的 NS 主机记录、子区委派与入口记录 |
| 调度节点池 | 多台独立 worker 提供权威 DNS 应答，不承载被服务组的入口业务 |
| 业务服务器组与智能入口 | 业务 worker 提供实际端口服务，新域名通过智能入口指向该组 |

解析流程可以理解为：

```text
客户端查询入口域名 → 入口 CNAME → 调度节点池的权威应答 → 推荐的业务入口 IP
```

节点池会在所选父区下使用系统生成的调度名称并发布子区委派。这里配置的是子区委派，不是要求把整个域名在注册商处的 NS 改成业务服务器。

![智能 DNS 控制台：健康、权重、缓存和故障切换的适用边界](https://img.coderluny.com:444/uploads/zfc-tutorial-20261018-gslb-overview-5aa6c6eaf69d.png)

每次查询只返回一个推荐地址，共享递归缓存可能使大量用户短时集中到同一入口。所有成员异常时仍会尽力返回地址，不能把“有 DNS 答案”直接理解为服务健康，也不能用单地址应答隐藏全部入口 IP。

## 准备条件

1. 使用具备智能 DNS 管理权限的平台管理员账号。
2. 在 **系统设置 → DNS配置管理**准备已启用的 **Cloudflare** 配置，并确认父区域名可读取、相应 DNS 记录可写。当前智能 DNS 仅开放 Cloudflare，不等于普通 DDNS 支持的所有服务商都能使用本功能。
3. 准备至少两台、最多 64 台自有平台 worker 作为调度节点；组线路和导入的共享服务器不能直接充当候选。
4. 确认调度节点公网 **UDP / TCP 53**均可达、没有端口冲突，节点版本与状态上报支持该能力。
5. 准备平台所属的[业务服务器组](/docs/server-groups/)，为其成员部署统一端口并实际验证业务。每个被服务组最多 64 台成员。

调度节点必须与本池服务的业务组在 worker 身份和公网 IP 上隔离，还需人工核实宿主关系。不同 worker 或不同摘要都不能单独证明物理隔离。界面按 CPU 负载提供推荐，选择时也要考虑地区和厂商分散。

## 第一步：创建节点池

进入 **端口管理 → 智能 DNS → 创建节点池**。

![节点池向导第一步：名称、DNS API 配置与父区](https://img.coderluny.com:444/uploads/zfc-tutorial-20261018-gslb-pool-parent-6764c7ec833b.png)

1. 填写便于识别的池名称。
2. 选择已启用的 Cloudflare DNS API 配置。
3. 从列表选择父区，核对它确实是计划管理入口的域名区域。
4. 点击 **下一步**。

池名称用于管理展示，不是直接指定入口域名；调度子区名称由系统生成。

### 选择调度节点

![调度节点步骤：至少两台服务器及各自公网 IPv4 / IPv6](https://img.coderluny.com:444/uploads/zfc-tutorial-20261018-gslb-pool-members-bde3e4f544d3.png)

为每一行选择 worker，并填写它实际可达的公网 IPv4 或 IPv6，至少提供一种地址。不要填写业务组成员的地址，也不要把内网 IP、未映射的 NAT 出口或不支持公网 DNS 查询的机器当作权威节点。

候选显示版本过旧或状态过期时，先升级或恢复节点连接，等待新鲜上报；不能靠填写地址绕过节点能力检查。

进入 **核对与确认**后，再检查节点、地址与宿主隔离提示。只有实际核实后，才勾选对应确认项并点击 **确认执行**。

### 等待节点池发布

提交后在 **操作进度**查看各阶段：

1. 核实名称未被占用。
2. 等待节点配置落盘，并验证公网 UDP / TCP 查询。
3. 发布 NS 主机地址与父区委派。
4. 验证权威应答和公共递归。
5. 完成发布。

创建操作返回不代表节点池已经发布。节点池进入 **已发布**且当前没有阻塞操作后，再创建智能入口。

## 第二步：创建智能入口

在已发布节点池中点击 **创建智能入口**：

1. 选择平台所属的 **业务服务器组**。
2. 填写父区下一个尚未占用的新入口域名，例如父区为 `example.com` 时使用 `entry.example.com`。不能把父区本身或其他区域的域名直接填进来。
3. 按实际业务可达性选择 IPv4 / IPv6。
4. 配置 TTL 和 **分配窗口**，核对隔离条件，再确认执行。

| 参数 | 当前约束与含义 |
| --- | --- |
| TTL | 智能入口配置范围 15–300 秒；外部服务商记录仍可能受 DNS 配置最低 TTL 约束 |
| 分配窗口 | 60–600 秒，且至少为 TTL 的两倍；它是调度窗口，不是额外的缓存清理按钮 |
| 地址族 | 只发布业务成员实际具备入站能力的地址族，避免客户端选到不可达 IPv6 |

系统会先让调度节点落盘并验证答案，再发布入口 CNAME、验证公共递归，最后启用入口。不要提前把尚未完成验证的新域名批量交给客户端。

使用新的入口子域名，可以先独立验证，再安排客户端迁移。同一个名字已有 A / AAAA / CNAME 或被其他功能管理时，应先处理占用与归属，避免并行写入。

## 验证解析与端口服务

入口进入 **已启用**后：

1. 核对入口 CNAME、父区记录核实结果及当前操作状态。
2. 从多个实际客户端网络查询 A / AAAA，观察推荐地址。
3. 使用入口域名和统一端口进行真实业务访问。
4. 对比端口连接统计，确认实际连接到了预期业务入口。

例如在自己的终端查询：

```bash
dig entry.example.com CNAME
dig +short entry.example.com A
dig +short entry.example.com AAAA
```

这些是公共解析查询，不能替代对每台权威节点的 UDP / TCP 公网可达性检查。客户端已经缓存地址或持有长连接时，解析变化不会立即改变其现有业务路径。

## 查看健康、权重与统计

控制台分别展示 **控制器视角**、**国内观察点视角**和 **配置同步**。落盘确认、上报是否新鲜和查询验证需要一起看；“未知”或“未确认”不能按正常处理。

业务入口的健康层级还会结合端口配置是否应用、控制连接、出口与互测证据。节点在线不等于目标端口已经就绪。

- **编辑入口**：调整地址族、TTL、分配窗口，以及成员权重或“停止分配”。权重范围为 1–100，只影响后续解析选择机会。
- **国内观察点**：只能指定本池所服务业务组的成员，最多两台；留空时自动选择。它们与提供权威服务的调度节点不是同一角色。
- **近 1 小时 DNS 分配占比**：按实际发出的 DNS 答案计数。
- **近 1 小时实际流量占比**：业务节点最近一小时的全部上下行流量，包含其他入口，不能当成该域名独享的流量统计。

有节点离线、样本不足或计数达到上限时，会显示统计不完整。不要据此要求权重、DNS 分配和业务流量三个比例完全一致。

## 扩容、升级与退役

增加调度节点时，系统会验证新节点、更新 NS 集合并等待落盘与委派验证。单节点结果不能代表池已恢复冗余。

至少保留两台已发布调度节点；两节点池升级应逐台进行，期间只剩一台权威节点服务。业务组与调度节点仍须保持隔离。

删除入口、退役调度节点和拆除池都有顺序：先撤回对应 CNAME 或 NS，等待实际 TTL 与落盘条件满足，再停用或清理后续记录。拆池前需要先移除其智能入口。

**等待条件满足**是退役流程的一部分，不应直接当成卡死。强制推进会跳过部分未确认节点并留下“未确认排空”状态，不能把它描述为正常退役完成。

## 常见问题

| 提示或现象 | 优先检查 |
| --- | --- |
| DNS 配置不在选择列表 | 当前仅开放已启用的 Cloudflare 配置，以及账号权限 |
| 调度候选不可选 | 自有平台 worker、节点版本、新鲜上报和资源类型 |
| 公网查询验证失败 | 节点地址、UDP / TCP 53、监听冲突、安全组与系统防火墙 |
| 创建智能入口按钮禁用 | 节点池是否已发布，是否有未完成或阻塞操作 |
| 已有解析但业务不通 | 统一端口是否同步、真实入站可达性、客户端协议和业务组健康 |
| 单个地址被大量复用 | 公共递归缓存与客户端复用，不能只按查询次数推断流量均衡 |
| 快照历史冲突，下发暂停 | 核对数据库与节点版本、摘要和未上报成员，确认依据后再恢复下发 |
| Provider 写入结果未知 | 保留原操作，按页面暂停和核实流程处理；读回为空不等于从未写入 |

**父区记录核实结果**展示的是操作完成时的证据，不是持续刷新 DNS 服务商后的实时结果。面板外改过记录时，需要另行核对当前权威与公共解析。

继续阅读：[服务器组](/docs/server-groups/) · [动态域名与 DDNS](/docs/dynamic-dns/) · [多线路共同维护](/docs/multi-line-rule/)。