Skip to content

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.hints08-递归解析
查询缓存系统✅ 已实现[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 + TSIG07-权威DNS
TSIG 认证(RFC 8945)✅ 已实现[[keys]] + allow-update12-安全与访问控制

管理与可观测性 ​

功能状态怎么用文档
Prometheus 指标✅ 已实现[metrics] enabled = true15-监控与可观测性
RESTful API✅ 已实现[api] enabled = true + auth-token13-REST-API参考
CLI 管理工具✅ 已实现tdnsctl status/reload/flush/...14-CLI管理工具
配置热重载✅ 已实现SIGHUP 或 POST /api/v1/reload16-运维操作手册
结构化日志✅ 已实现log-format = "json"15-监控与可观测性

RFC 合规清单 ​

RFC标题状态
RFC 1035DNS 协议规范✅ 已实现
RFC 6891EDNS0 扩展机制✅ 已实现
RFC 7766DNS over TCP✅ 已实现
RFC 7858DNS-over-TLS (DoT)✅ 已实现
RFC 8484DNS-over-HTTPS (DoH)✅ 已实现
RFC 8482ANY 查询拒绝✅ 已实现
RFC 8914扩展 DNS 错误 (EDE)✅ 已实现
RFC 8767Serving Stale Data✅ 已实现
RFC 8945TSIG 事务签名✅ 已实现(HMAC-SHA256)
RFC 2136动态更新 (DDNS)✅ 已实现
RFC 9460SVCB/HTTPS 记录✅ 已实现
RFC 2308负缓存✅ 已实现
RFC 8310DoT ALPN 协商✅ 已实现

内置安全防护清单 ​

以下 18 项安全特性无需配置即默认生效:

#防护项机制如何调整
1开放递归防护递归启用时强制要求 allow-recursion,否则拒绝启动配 [access-control] allow-recursion
2DNS 响应验证验证上游响应 TXID、源 IP、源端口自动生效,无需配置
3Opcode 验证拒绝非标准 opcode(非 0),返回 NotImp自动生效
4UDP 并发限制Semaphore 限制最大并发 UDP 查询数代码内置
5TCP 连接限制最大并发 TCP 连接 1024代码内置
6ANY 查询拒绝RFC 8482 拒绝 ANY 类型查询自动生效
7CNAME 循环检测HashSet 跟踪已访问名称recursion.max-depth 调整深度
8正缓存容量保护插入时二次容量检查,防 OOMcache.max-size
9负缓存容量限制最大 50,000 条目cache.max-negative-entries
10负缓存 SOA 权威负缓存响应携带 SOA 权威记录自动生效
11API 强制认证API 启用时强制要求 auth-token配 [api] auth-token
12CORS 安全默认默认禁止跨域配 api.cors-origins
13配置热重载一致性reload 后 ACL 等安全策略立即生效—
14Response Rate Limiting按 (客户端前缀, qname) 限速[security.rrl]
15Serving Stale上游故障时返回过期缓存cache.stale-ttl
16DoT/DoH 并发控制Semaphore 限制最大并发加密连接数代码内置
17DoH 请求体大小限制限制 65 KB,防大请求 DoS代码内置
18Metrics 安全默认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 全执行。


端口规划 ​

端口协议用途默认状态启用方式
53UDP + TCP标准 DNS 查询✅ 启用默认
853TCPDNS-over-TLS❌ 关闭[tls] enabled = true
443TCPDNS-over-HTTPS❌ 关闭[doh] enabled = true
8080TCPREST 管理 API❌ 关闭[api] enabled = true
9090TCPPrometheus 指标❌ 关闭[metrics] enabled = true

DoT 和 DoH 复用 [tls] 段的证书和私钥,只需配置一次。