hickory-dns/hickory-dns

GitHub: hickory-dns/hickory-dns

Hickory DNS 是一个基于 Rust 编写的 DNS 客户端、服务器及解析器库,致力于提供安全、高性能且符合现代标准的 DNS 服务。

Stars: 5126 | Forks: 573

[![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c183f2e0c9043600.svg)](https://github.com/hickory-dns/hickory-dns/actions?query=workflow%3Atest) [![codecov](https://codecov.io/gh/hickory-dns/hickory-dns/branch/main/graph/badge.svg)](https://codecov.io/gh/hickory-dns/hickory-dns) [![许可证: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE-MIT) [![许可证: Apache 2.0](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](LICENSE-APACHE) [![Discord](https://img.shields.io/discord/590067103822774272.svg)](https://discord.gg/89nxE4n)
![Hickory DNS](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d7fba6bb00043601.png) # Hickory DNS
一个基于 Rust 的 DNS 客户端、服务器和解析器,从底层开始构建, 致力于安全可靠。 此代码仓库由多个 crate 组成: | 库 | 描述 | | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [**Hickory DNS**](bin/) | [![](https://img.shields.io/crates/v/hickory-dns.svg)](https://crates.io/crates/hickory-dns) 提供 `hickory-dns` 二进制文件用于运行 DNS 服务器。 | | [**Proto**](crates/proto/) | [![](https://img.shields.io/crates/v/hickory-proto.svg)](https://crates.io/crates/hickory-proto) [![hickory-proto](https://docs.rs/hickory-proto/badge.svg)](https://docs.rs/hickory-proto) 底层 DNS 库,包括消息编码/解码和 DNS 传输。 | | [**Client**](crates/client/) | [![](https://img.shields.io/crates/v/hickory-client.svg)](https://crates.io/crates/hickory-client) [![hickory-client](https://docs.rs/hickory-client/badge.svg)](https://docs.rs/hickory-client) 用于直接向 DNS 服务器发送 `query`、`update` 和 `notify` 消息。 | | [**Server**](crates/server/) | [![](https://img.shields.io/crates/v/hickory-server.svg)](https://crates.io/crates/hickory-server) [![hickory-server](https://docs.rs/hickory-server/badge.svg)](https://docs.rs/hickory-server) 用于构建 DNS 服务器。`hickory-dns` 二进制文件使用了此库。 | | [**Resolver**](crates/resolver/) | [![](https://img.shields.io/crates/v/hickory-resolver.svg)](https://crates.io/crates/hickory-resolver) [![hickory-resolver](https://docs.rs/hickory-resolver/badge.svg)](https://docs.rs/hickory-resolver) 利用客户端库执行 DNS 解析。可用作标准操作系统解析设施的替代方案。 | | [**Recursor**](crates/recursor/) | [![](https://img.shields.io/crates/v/hickory-recursor.svg)](https://crates.io/crates/hickory-recursor) [![hickory-recursor](https://docs.rs/hickory-recursor/badge.svg)](https://docs.rs/hickory-recursor) 执行递归 DNS 解析,从权威名称服务器查找记录。 | **注意** 本项目已从 Trust-DNS 品牌重塑为 Hickory DNS,并已迁移至 https://github.com/hickory-dns/hickory-dns 组织和仓库。 # 目标 - 构建一个具有现代功能的安全可靠的 DNS 服务器和客户端。 - 没有崩溃(panic),所有代码都受到保护。 - 仅使用安全的 Rust,并通过适当的错误处理避免所有崩溃。 - 仅使用稳定版本的 Rust。 - 防护 DDOS 攻击(在一定程度上)。 - 支持全局负载均衡功能的选项。 - 使其操作极其简单。 # 密码学提供者 `hickory-dns` 应用程序和底层库 crate 支持在两个密码学提供者之间进行选择, 用于需要密码学的协议(DNSSEC, DNS-over-TLS 等): 1. [aws-lc-rs] 2. [ring] 需要密码学的功能标志以后缀形式标明所选的提供者。例如, 对于 DNS-over-TLS,该功能根据您希望使用 `aws-lc-rs` 还是 `ring`,分别提供为 `tls-aws-lc-rs` 或 `tls-ring`。 # 状态 ## DNSSEC 状态 当前根密钥已打包到系统中,并默认使用。这提供了 对 DNSKEY 和 DS 记录回溯到根的验证。NSEC 和 NSEC3 已 实现。 通过动态 DNS 更新记录时,Zone 将自动重新签名。要启用 DNSSEC,请启用 `dnssec-ring` 功能。 目前不支持记录/Zone 的离线签名。 ## 已实现的 RFC - [RFC 8499](https://tools.ietf.org/html/rfc8499): 不再使用主/从(master/slave)术语,以纪念 [Juneteenth](https://en.wikipedia.org/wiki/Juneteenth) ### 基本操作 - [RFC 1035](https://tools.ietf.org/html/rfc1035): 基础 DNS 规范(请参阅 Resolver 以了解缓存) - [RFC 2308](https://tools.ietf.org/html/rfc2308): DNS 查询的否定缓存(请参阅 Resolver) - [RFC 2782](https://tools.ietf.org/html/rfc2782): 服务位置 - [RFC 3596](https://tools.ietf.org/html/rfc3596): IPv6 - [RFC 6891](https://tools.ietf.org/html/rfc6891): DNS 扩展机制 - [RFC 6761](https://tools.ietf.org/html/rfc6761): 特殊用途域名(resolver) - [RFC 6762](https://tools.ietf.org/html/rfc6762): mDNS 多播 DNS(实验性功能:`mdns`) - [RFC 6763](https://tools.ietf.org/html/rfc6763): DNS-SD 服务发现(实验性功能:`mdns`) - [draft-ietf-dnsop-aname](https://tools.ietf.org/html/draft-ietf-dnsop-aname-04): 地址特定的 DNS 别名(`ANAME`) ### 更新操作 - [RFC 2136](https://tools.ietf.org/html/rfc2136): 动态更新 - [RFC 7477](https://tools.ietf.org/html/rfc7477): DNS 中的从子到父同步 ### 安全 DNS 操作 - [RFC 2931](https://datatracker.ietf.org/doc/html/rfc2931): SIG(0) - [RFC 3007](https://tools.ietf.org/html/rfc3007): 安全动态更新 - [RFC 4034](https://tools.ietf.org/html/rfc4034): DNSSEC 资源记录 - [RFC 4035](https://tools.ietf.org/html/rfc4035): DNSSEC 的协议修改 - [RFC 4509](https://tools.ietf.org/html/rfc4509): DNSSEC 委派签名者中的 SHA-256 - [RFC 5155](https://tools.ietf.org/html/rfc5155): DNSSEC 哈希认证拒绝存在 - [RFC 5702](https://tools.ietf.org/html/rfc5702): DNSSEC 中 DNSKEY 和 RRSIG 使用 RSA 的 SHA-2 算法 - [RFC 6844](https://tools.ietf.org/html/rfc6844): DNS 证书颁发机构授权 (CAA) 资源记录 - [RFC 6698](https://tools.ietf.org/html/rfc6698): 基于 DNS 的命名实体认证 (DANE) 传输层安全 (TLS) 协议:TLSA - [RFC 6840](https://tools.ietf.org/html/rfc6840): DNSSEC 的说明和实现注意事项 - [RFC 6844](https://tools.ietf.org/html/rfc6844): DNS 证书颁发机构授权资源记录 - [RFC 6944](https://tools.ietf.org/html/rfc6944): DNSKEY 算法实现状态 - [RFC 6975](https://tools.ietf.org/html/rfc6975): 密码算法理解信令 - [RFC 7858](https://tools.ietf.org/html/rfc7858): DNS over TLS(功能:`tls-aws-lc-rs`/`tls-ring`) - [RFC 8162](https://tools.ietf.org/html/rfc8162): 使用安全 DNS 将证书与 S/MIME 的域名关联 - [RFC 8484](https://tools.ietf.org/html/rfc8484): DNS over HTTPS,DoH(功能:`https-aws-lc-rs`/`https-ring`) ## 进行中或尚未实现的 RFC ### 基本操作 - [RFC 2317](https://tools.ietf.org/html/rfc2317): 无类别 IN-ADDR.ARPA 委派 ### 更新操作 - [RFC 1995](https://tools.ietf.org/html/rfc1995): 增量区域传输 - [RFC 1996](https://tools.ietf.org/html/rfc1996): 通知辅助服务器更新 - [更新租约](https://tools.ietf.org/html/draft-sekar-dns-ul-01): 动态 DNS 更新租约 - [RFC 8764](https://tools.ietf.org/html/rfc8764): 带通知的 Notify with bells ### 安全 DNS 操作 - [DNSCrypt](https://dnscrypt.org): 受信任的 DNS 查询 - [RFC 8162](https://tools.ietf.org/html/rfc8162): S/MIME 的域名 ## 测试 Hickory DNS 使用 `just` 进行构建工作流管理。虽然在项目根目录运行 `cargo test` 可以工作,但这并不全面。通过 `cargo install just` 安装 `just`。一些 `just` 配方需要安装 [`cargo-workspaces`](https://github.com/pksunkara/cargo-workspaces),这是一个优化 cargo 工作区工作流的插件。通过 `cargo install cargo-workspaces` 安装该插件。 - 默认测试 这些适合在本地系统上运行。它们将为本地测试创建套接字,但不会尝试访问远程系统。测试也可以从 crate 目录运行,例如 `client` 或 `server` 以及 `cargo test` ``` just default ``` - 默认功能测试 Hickory DNS 有很多功能,为了快速测试有这些功能或没有这些功能,支持三个目标,`default`、`no-default-features`、`all-features`: ``` just all-features ``` - 单个功能测试 Hickory DNS 有很多功能,每个单独的功能都可以独立测试。有关所有功能,请参阅各个 crate。 每个功能都可以通过 `just` 的任务目标与自身一起测试: ``` just tls-aws-lc-rs ``` - 基准测试 等待基准测试在 Rust 主线中稳定。 ## 构建 - 生产构建,从 `hickory-dns` 基础目录,要获取所有功能,只需传递 `--all-features` 标志。 ``` cargo build --release -p hickory-dns ``` ## 使用 hickory-resolver CLI 在 `0.20` 版本中可用 ``` cargo install --bin resolve hickory-util ``` 或者从源码,在 hickory-dns 目录中 ``` cargo install --bin resolve --path util ``` 示例: ``` $ resolve www.example.com. Querying for www.example.com. A from udp:8.8.8.8:53, tcp:8.8.8.8:53, udp:8.8.4.4:53, tcp:8.8.4.4:53, udp:[2001:4860:4860::8888]:53, tcp:[2001:4860:4860::8888]:53, udp:[2001:4860:4860::8844]:53, tcp:[2001:4860:4860::8844]:53 Success for query name: www.example.com. type: A class: IN www.example.com. 21063 IN A 93.184.215.14 ``` ## Docker 使用 包含预编译版本的 `hickory-dns` 的 Docker 镜像可在 https://github.com/hickory-dns/docker 获取。 ## FAQ - **为什么要构建另一个 DNS 服务器?** 为了提供用内存安全语言编写的 DNS 服务器。 使用 Rust 语义,应该可以开发出高性能且安全的 DNS 服务器,使其更能抵御攻击。 - **MSRV(最低稳定 Rust 版本)策略是什么?** Hickory DNS 将致力于支持向后兼容三个 Rust 版本。 例如,如果 `1.50` 是当前版本,那么 MSRV 将是 `1.47`。该版本仅在必要时增加,因此 MSRV 可能比此策略规定的更旧。此外,由于在依赖项上强制执行此策略是一个棘手的问题,因此 MSRV 仅支持 `no-default-features` 构建。 ## 社区 如需超出此仓库范围的实时讨论,请参阅此 [Discord](https://discord.gg/89nxE4n)。 ## 许可证 在以下任一许可下许可 - Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) 或 ) - MIT license ([LICENSE-MIT](LICENSE-MIT) 或 ) 由您选择。 ### 贡献 除非您明确说明,否则您按照 Apache-2.0 许可证定义有意提交 以包含在本作品中的任何贡献,均将按上述方式双重许可,而不附加任何额外条款或 条件。
标签:Apache协议, DNS, DNS协议, DNS客户端, DNS服务端, DNS解析, Hickory DNS, MIT协议, Rust, SYN扫描, 可视化界面, 域名解析, 开源项目, 网络安全, 网络流量审计, 网络编程, 解析器, 请求拦截, 通知系统, 隐私保护