KixDNS 是用 Rust 开发的高性能、可扩展 DNS 服务器，面向低延迟、高并发以及复杂路由场景。 ###主要特性 ####🚀 高性能 - 零拷贝网络：使用 BytesMut 实现 UDP 收包的零拷贝处理，尽量减少内存复制 - 延迟解析：实现"延迟请求解析"，普通转发场景避免对包进行完整反序列化，降低开销 - 轻量化响应解析：在不需要完整解析时快速扫描上游响应以提取 RCODE 与最小 TTL（零分配） - 快速哈希：内部数据结构采用 rustc-hash 以获得更快的哈希性能 - 高并发：基于 tokio 异步 IO，使用 DashMap / moka 等并发数据结构进行状态管理 - 自适应流控：基于上游延迟动态调整并发限制（PermitManager），防止上游过载 - SO_REUSEPORT：在 Unix 系统上支持多 worker 共享端口，充分利用多核 - 双 Socket 架构：IPv4/IPv6 分离 Socket，兼容 OpenBSD 等系统 ####🔧 灵活架构 - Pipeline 选择规则：支持基于监听器标签、客户端 IP、域名、QCLASS、EDNS、GeoSite 等多维路由 - 匹配器运算符：支持 AND、OR、AND_NOT、OR_NOT、NOT 逻辑组合 - 两阶段处理：请求阶段匹配 + 响应阶段匹配，支持二次决策和动作 - 监听器标签：同一实例可为不同标签提供不同 Pipeline - 上游传输选项：上游支持 UDP/TCP/DoH/DoT/DoQ 传输协议选择 - URL 协议前缀：支持 udp://、tcp://、doh://、dot://、doq:// 等前缀自动识别 ####💾 缓存与去重 - 内存缓存：集成高性能缓存（moka），支持可配置容量和最大 TTL - 智能 TTL：遵循上游 TTL，同步支持可配置的最小 TTL - Singleflight 去重：使用 tokio::watch::channel 实现零分配的并发去重，防止缓存击穿 - 后台刷新：TTL 即将过期时自动触发后台刷新，使用 AtomicU64 bitmap 去重 - Serve Stale (RFC 8767)：上游不可用时返回过期缓存，提升服务弹性 ####🌍 GeoIP 支持 - MaxMind GeoIP 数据库集成：支持 MMDB 格式的 GeoIP2/GeoLite2 数据库 - 国家代码匹配：根据客户端 IP 的国家代码进行路由（如 CN、US、JP） - 私有 IP 检测：自动识别内网/私有 IP 地址段 - 高性能缓存：可配置的查询结果缓存，减少数据库查询开销 - 数据库热重载：支持数据库文件更新后自动重新加载 - 懒加载机制：仅在配置中使用 GeoIP 匹配器时才加载数据库 ####🎯 GeoSite 支持 - 域名分类匹配：支持基于域名分类的路由决策（如 cn、google、category-ads） - V2Ray 格式支持：兼容 V2Ray domain-list-community 数据格式 - 多种匹配模式：完全匹配（domain:）、后缀匹配（.）、关键词匹配（keyword:）、正则匹配（regexp:） - 后缀索引优化：O(1) 查找性能，支持大规模域名列表 - 数据热重载：支持 GeoSite 数据文件更新后自动重新加载 - 正向和否定匹配：支持 geosite 和 geosite_not 两种匹配器 ####🔌 DNS-over-QUIC (DoQ) - 0-RTT 自动检测：首次连接尝试 0-RTT，服务器拒绝时自动禁用并缓存结果 - 零分配缓存：使用 AtomicBool 实现零开销的检测结果缓存 - 配置热加载兼容：配置重载时保留检测结果，连接池不会重建 - SNI 强制支持：IP 上游必须显式设置 sni 参数以满足 RFC 9250 - RFC 9250 合规：强制 message-id=0 并恢复客户端 transaction ID ####🛡️ DNS 污染响应过滤 - 响应阶段 IP 匹配：支持 response_answer_ip 匹配器检测污染 IP - 自动上游切换：检测到污染响应时自动切换到备用上游重新查询 - 灵活降级策略：支持 TCP fallback、多级上游兜底等策略 ####📊 监控与运维 - 配置热重载：使用 ArcSwap 实现无锁的配置热重载，notify 监控文件变化 - 结构化日志：基于 tracing 的 JSON 格式日志输出 - 自适应流控参数可配置：可根据上游特性调整流控策略 - WebSocket 诊断工具：内置 diagnose.html 工具用于测试 DNS 查询 - 可视化配置编辑器：内置 config_editor.html 用于生成和管理 Pipeline 配置 项目地址： ```csharp https://github.com/olicesx/kixdns ```