外观
02 - 功能特性总览
功能实现状态矩阵
下表标注各功能在当前版本(v0.1.1)中的实现状态,以及对应的使用文档:
协议与传输
| 功能 | 状态 | 怎么用 | 文档 |
|---|---|---|---|
| DNS 报文编解码(RFC 1035) | ✅ 已实现 | 默认启用,无需配置 | — |
| UDP 查询处理 | ✅ 已实现 | 监听 53/udp,自动支持 | — |
| TCP 查询处理 | ✅ 已实现 | 监听 53/tcp,大报文自动降级 | — |
| EDNS0 扩展(RFC 6891) | ✅ 已实现 | 自动协商,无需配置 | — |
| DNS-over-TLS(RFC 7858) | ✅ 已实现 | 配 [tls] enabled = true + 证书 | 11-加密传输 |
| DNS-over-HTTPS(RFC 8484) | ✅ 已实现 | 配 [doh] enabled = true + 证书 | 11-加密传输 |
| DNS-over-QUIC(RFC 9250) | 📋 规划中 | 后续版本支持 | — |
运行模式
| 功能 | 状态 | 怎么用 | 文档 |
|---|---|---|---|
| 递归解析引擎 | ✅ 已实现 | mode = "recursive" + root.hints | 08-递归解析 |
| 查询缓存系统 | ✅ 已实现 | [cache] 段配置,默认启用 | 04-配置参考 |
| 上游转发 | ✅ 已实现 | mode = "forwarder" + [[forwarders]] | 09-转发服务 |
| 权威区域管理 | ✅ 已实现 | mode = "authoritative" + [[zones]] | 07-权威DNS |
记录类型
| 功能 | 状态 | 怎么用 |
|---|---|---|
| A / AAAA / NS / CNAME / SOA / PTR / MX / TXT / SRV / CAA | ✅ 已实现 | Zone 文件中直接写 |
| SVCB / HTTPS(RFC 9460) | ✅ 已实现 | Zone 文件或 REST API 添加 |
通过 REST API 支持的类型:A / AAAA / CNAME / NS / TXT / PTR / SVCB / HTTPS。MX / SOA / SRV / CAA 需通过 Zone 文件添加。
安全特性
| 功能 | 状态 | 怎么用 | 文档 |
|---|---|---|---|
| ACL 访问控制 | ✅ 已实现 | [acl.*] + [access-control] | 12-安全与访问控制 |
| RRL 速率限制 | ✅ 已实现 | [security.rrl],默认启用 | 12-安全与访问控制 |
| 缓存投毒防护 | ✅ 已实现 | 自动验证 TXID / 源 IP / 源端口 | — |
| 动态更新 DDNS(RFC 2136) | ✅ 已实现 | REST API 或 nsupdate + TSIG | 07-权威DNS |
| TSIG 认证(RFC 8945) | ✅ 已实现 | [[keys]] + allow-update | 12-安全与访问控制 |
管理与可观测性
| 功能 | 状态 | 怎么用 | 文档 |
|---|---|---|---|
| Prometheus 指标 | ✅ 已实现 | [metrics] enabled = true | 15-监控与可观测性 |
| RESTful API | ✅ 已实现 | [api] enabled = true + auth-token | 13-REST-API参考 |
| CLI 管理工具 | ✅ 已实现 | tdnsctl status/reload/flush/... | 14-CLI管理工具 |
| 配置热重载 | ✅ 已实现 | SIGHUP 或 POST /api/v1/reload | 16-运维操作手册 |
| 结构化日志 | ✅ 已实现 | log-format = "json" | 15-监控与可观测性 |
RFC 合规清单
| RFC | 标题 | 状态 |
|---|---|---|
| RFC 1035 | DNS 协议规范 | ✅ 已实现 |
| RFC 6891 | EDNS0 扩展机制 | ✅ 已实现 |
| RFC 7766 | DNS over TCP | ✅ 已实现 |
| RFC 7858 | DNS-over-TLS (DoT) | ✅ 已实现 |
| RFC 8484 | DNS-over-HTTPS (DoH) | ✅ 已实现 |
| RFC 8482 | ANY 查询拒绝 | ✅ 已实现 |
| RFC 8914 | 扩展 DNS 错误 (EDE) | ✅ 已实现 |
| RFC 8767 | Serving Stale Data | ✅ 已实现 |
| RFC 8945 | TSIG 事务签名 | ✅ 已实现(HMAC-SHA256) |
| RFC 2136 | 动态更新 (DDNS) | ✅ 已实现 |
| RFC 9460 | SVCB/HTTPS 记录 | ✅ 已实现 |
| RFC 2308 | 负缓存 | ✅ 已实现 |
| RFC 8310 | DoT ALPN 协商 | ✅ 已实现 |
内置安全防护清单
以下 18 项安全特性无需配置即默认生效:
| # | 防护项 | 机制 | 如何调整 |
|---|---|---|---|
| 1 | 开放递归防护 | 递归启用时强制要求 allow-recursion,否则拒绝启动 | 配 [access-control] allow-recursion |
| 2 | DNS 响应验证 | 验证上游响应 TXID、源 IP、源端口 | 自动生效,无需配置 |
| 3 | Opcode 验证 | 拒绝非标准 opcode(非 0),返回 NotImp | 自动生效 |
| 4 | UDP 并发限制 | Semaphore 限制最大并发 UDP 查询数 | 代码内置 |
| 5 | TCP 连接限制 | 最大并发 TCP 连接 1024 | 代码内置 |
| 6 | ANY 查询拒绝 | RFC 8482 拒绝 ANY 类型查询 | 自动生效 |
| 7 | CNAME 循环检测 | HashSet 跟踪已访问名称 | recursion.max-depth 调整深度 |
| 8 | 正缓存容量保护 | 插入时二次容量检查,防 OOM | cache.max-size |
| 9 | 负缓存容量限制 | 最大 50,000 条目 | cache.max-negative-entries |
| 10 | 负缓存 SOA 权威 | 负缓存响应携带 SOA 权威记录 | 自动生效 |
| 11 | API 强制认证 | API 启用时强制要求 auth-token | 配 [api] auth-token |
| 12 | CORS 安全默认 | 默认禁止跨域 | 配 api.cors-origins |
| 13 | 配置热重载一致性 | reload 后 ACL 等安全策略立即生效 | — |
| 14 | Response Rate Limiting | 按 (客户端前缀, qname) 限速 | [security.rrl] |
| 15 | Serving Stale | 上游故障时返回过期缓存 | cache.stale-ttl |
| 16 | DoT/DoH 并发控制 | Semaphore 限制最大并发加密连接数 | 代码内置 |
| 17 | DoH 请求体大小限制 | 限制 65 KB,防大请求 DoS | 代码内置 |
| 18 | Metrics 安全默认 | Prometheus 端点默认仅监听 127.0.0.1 | 配 [metrics] listen |
查询处理流水线
TDNS 接收到 DNS 查询后的处理流程,理解这条流水线有助于排查问题:
客户端查询 (UDP/TCP/DoT/DoH)
│
▼
1. ACL 检查 (allow-query) ← 不通过 → REFUSED
│
▼
2. 缓存查找 ← 命中 → 直接返回(含负缓存)
│
▼
3. 权威区域查找 (authoritative/hybrid) ← 命中 → 返回权威答案 (AA=1)
│
▼
4. RD 标志 + 递归 ACL 检查 ← 无 RD 或 ACL 拒绝 → REFUSED
│
▼
5. 转发器尝试 (有 [[forwarders]] 时) ← 成功 → 缓存 + 返回
│
▼
6. 递归解析器尝试 (有 root.hints 时) ← 成功 → 缓存 + 返回
│ ← 失败 → Serving Stale 或 SERVFAIL + EDE
▼
返回响应各模式差异:
recursive执行步骤 6;authoritative只执行步骤 3;forwarder执行步骤 5;hybrid全执行。
端口规划
| 端口 | 协议 | 用途 | 默认状态 | 启用方式 |
|---|---|---|---|---|
| 53 | UDP + TCP | 标准 DNS 查询 | ✅ 启用 | 默认 |
| 853 | TCP | DNS-over-TLS | ❌ 关闭 | [tls] enabled = true |
| 443 | TCP | DNS-over-HTTPS | ❌ 关闭 | [doh] enabled = true |
| 8080 | TCP | REST 管理 API | ❌ 关闭 | [api] enabled = true |
| 9090 | TCP | Prometheus 指标 | ❌ 关闭 | [metrics] enabled = true |
DoT 和 DoH 复用
[tls]段的证书和私钥,只需配置一次。