# MoonDNS RFC 范围与非目标规范 (Scope & Non-Goals)

本文档明确 MoonDNS 的技术实现边界、所支持的 RFC 规范范围及非目标。

---

## 1. 支持范围 (In-Scope Features)

MoonDNS 是一个基于 MoonBit 从零实现的**权威 DNS 服务器 (Authoritative DNS Server)**，遵循 RFC 1035 核心规范与相关演进标准。

### 1.1 报文与域名编解码 (RFC 1035 Section 4.1)
- **Header 编解码**：
  - 12 字节标准头部，支持所有标志位：ID, QR, Opcode, AA, TC, RD, RA, Z, RCODE, QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT。
- **Question 编解码**：QNAME, QTYPE, QCLASS。
- **域名编解码**：
  - 标签长度前缀序列化与反序列化。
  - 压缩指针解析（Compression Pointer, `0xC000` 格式）。
  - **恶意指针安全防护**：
    - 指针自指检测（Self-loop pointer）。
    - 双向/多向环路检测（A ↔ B loop）。
    - 前向指针越界检测（Pointer out-of-bounds / forward pointer）。
    - 跳转跳数硬限制（≤ 128 跳）。
    - 遭遇畸形输入一律返回 `Result::Err`，绝不发生 panic、死循环或栈溢出。
  - 压缩指针生成：在序列化消息时自适应复用标签前缀/后缀，压缩报文大小。

### 1.2 资源记录类型 (Resource Record Types)
- **A** (Type 1, RFC 1035)：IPv4 地址（4 字节）。
- **NS** (Type 2, RFC 1035)：权威域名服务器（域名，支持压缩）。
- **CNAME** (Type 5, RFC 1035)：规范名称别名（域名，支持压缩）。
- **SOA** (Type 6, RFC 1035)：区授权起始记录（MNAME, RNAME, SERIAL, REFRESH, RETRY, EXPIRE, MINIMUM）。
- **MX** (Type 15, RFC 1035)：邮件交换记录（2 字节 preference + 域名）。
- **TXT** (Type 16, RFC 1035)：文本记录（支持 1 个或多个 character-string 连续存储）。
- **AAAA** (Type 28, RFC 3596)：IPv6 地址（16 字节）。
- **OPT** (Type 41, RFC 6891 / EDNS0)：EDNS0 伪记录支持，协商最大 UDP payload 尺寸。

### 1.3 权威解析语义 (RFC 1035 Section 4.3)
- **权威标志**：所有成功或区内未命中应答置位 `AA=1`。
- **不递归声明**：作为纯权威服务器，置位 `RA=0`（Recursion Available = 0）。
- **大小写不敏感**：域名查询与匹配严格遵循 ASCII 大小写不敏感规范。
- **NXDOMAIN**：查询域名在区内不存在，返回 `RCODE=3 (NXDOMAIN)`，`ANCOUNT=0`，在 Authority 节携带该区的 SOA 记录。
- **NODATA**：查询域名存在但不存在请求的 RR 类型，返回 `RCODE=0 (NOERROR)`，`ANCOUNT=0`，在 Authority 节携带 SOA 记录。
- **截断机制 (TC=1)**：当 UDP 报文超出尺寸限制（无 EDNS0 时为 512 字节，有 EDNS0 时按客户端声明缓冲大小）时，自动置位 `TC=1` 并安全裁剪。

### 1.4 传输层支持
- **UDP**：默认端口 53（可配置演示端口如 5353）。
- **TCP**：支持带 2 字节长度前缀的标准 DNS over TCP，用于 TC 截断后的重试查询及大应答传输。

### 1.5 CLI 与运维能力
- `moondns serve`：指定 zone 文件和端口启动服务端。
- `moondns query`：内置轻量级 dig 客户端，支持 UDP / TCP 查询与结果格式化。

---

## 2. 非目标 (Explicit Non-Goals)

为了保持代码库精简、专注权威服务器核心语义并防范安全面发散，以下功能明确**不在本项目范围内**：

1. **递归解析 (Recursive Resolution / Caching Resolver)**：
   - MoonDNS 专注作为权威 DNS 服务器（Authoritative Only），不作为递归转发器或全网递归解析器。
2. **DNSSEC 签名与验证 (RFC 4033 / 4034 / 4035)**：
   - 不实现 RRSIG, DNSKEY, DS, NSEC 等加密签名与链条校验。
3. **动态更新 (Dynamic Updates, RFC 2136)**：
   - 区数据为静态加载或配置文件驱动，不支持在线动态 UPDATE 报文修改。
4. **真实 AXFR / IXFR 区传送 (RFC 5936 / RFC 1995)**：
   - 收到 AXFR 请求时，遵循安全规范返回 `REFUSED` 或 `NOTIMP`，不进行全量区域数据倾倒。
5. **DoH / DoT 加密传输 (DNS over HTTPS / DNS over TLS)**：
   - 标准 RFC 1035 UDP 与 TCP 是权威 DNS 服务的核心，不引入外部 TLS / HTTP 复杂栈。
