DNS 模块
范围与目标
DNS 模块决定在策略路由之前如何解析域名。在 Clash 家族客户端中,DNS 行为会显著影响规则命中精度、延迟以及抗污染能力。
本页以 clash-rs 和 Mihomo 的行为作为参考,同时标注当前 chimera_client 的成熟度。
为什么 DNS 设计很重要
- 域名规则要求查询结果与连接流之间保持稳定映射。
- 即使应用后续按 IP 建连,fake-IP 模式仍可保留域名语义。
- 解析器选择会影响抗封锁能力、启动可靠性和隐私泄露风险。
配置要点
- 上游:UDP / DoH / DoT 端点及其顺序。
- 模式:fake-IP 与 real-IP。
- 基于 DNS 的策略路由:nameserver-policy 与 fallback 策略。
- 缓存策略:容量、TTL 边界与预取行为。
- 安全控制:fake-IP 过滤、hosts 覆盖与 ECS 处理。
- 引导:用于解析加密 DNS 端点的明文 DNS。
模式对比
| 模式 | 优势 | 取舍 | 典型用途 |
|---|---|---|---|
fake-ip | 建连后能更好保留域名规则语义 | 需要仔细维护过滤列表 | TUN / 透明代理部署 |
redir-host / real-IP 风格 | 更简单的应用兼容性 | 以 IP 建连后可能丢失域名语义 | 面向保守 DNS 目标的应用层代理 |
解析器选择流程(参考)
- 检查 hosts 覆盖和缓存。
- 按策略(基于域名 / 集合)或默认列表选择解析器。
- 查询主解析器。
- 当校验 / 延迟条件失败时,执行回退路径。
- 缓存并返回结果。
兼容性状态
| 能力 | chimera_client 当前状态 | clash-rs / Mihomo 参考 |
|---|---|---|
| 系统解析器透传 | 主要路径 | 也支持 |
| Clash 风格本地 DNS 服务器 | 开发中 | 成熟 |
| Fake-IP 工作流 | 目标状态 | 成熟 |
| Nameserver 策略 / fallback 过滤 | 目标状态 | 成熟 |
配置参考
chimera_client(当前保守配置)
dns:
enable: false
ipv6: false
与 Clash/Mihomo 对齐的目标结构
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "*.local"
default-nameserver:
- 1.1.1.1
- 8.8.8.8
nameserver:
- https://dns.alidns.com/dns-query
- tls://1.1.1.1:853
fallback:
- 9.9.9.9
fallback-filter:
geoip: true
geoip-code: CN
实践建议
- 从 real-IP / 系统解析器行为起步以确保稳定性。
- 仅在端到端验证完域名规则工作流后再启用 fake-IP。
- 保持 fake-IP 排除项尽量精确且可审计。
- 跟踪 fallback 命中率;突然升高通常意味着上游退化或被阻断。
故障排查清单
- 确认本地 DNS 监听器可达(例如:
dig @127.0.0.1 -p 1053 example.com)。 - 确认系统解析器或 TUN 协议栈确实指向客户端监听器。
- 检查日志中是否存在上游超时、TLS 握手错误或污染响应。
- 可临时强制使用单一 UDP 解析器,以隔离 DoH/DoT 连通性问题。
对齐参考
- clash-rs:
clash-lib/src/config及 DNS 运行时模块中的 DNS 结构与运行时行为。 - Mihomo:enhanced-mode、nameserver-policy 与 fallback-filter 语义的生产参考。