61个版本
0.23.2 | 2023年10月23日 |
---|---|
0.23.0 | 2023年8月22日 |
0.23.0-alpha.4 | 2023年6月11日 |
0.22.0 | 2022年9月2日 |
0.2.0 | 2017年7月7日 |
#985 in 网络编程
1,021,595每月下载量
用于1,077个crate(178直接)
2MB
34K SLoC
注意 此项目已更名为Hickory DNS,并已移动到 https://github.com/hickory-dns/hickory-dns 组织和仓库,此crate/二进制文件已移动到 hickory-resolver,从 0.24
版本起。
概述
Trust-DNS Resolver是一个库,它使用Trust-DNS Proto库实现DNS解析器。
此库包含IPv4(A)和IPv6(AAAA)解析的实现,更多功能正在开发中。它建立在tokio异步I/O项目之上,这使得它可以通过tokio和futures库集成到其他系统中。Trust-DNS 项目包含其他DNS库:用于原始协议使用的客户端库,用于托管区域的服务器库,以及基于rustls和native-tls的TLS实现。
功能
- 各种IPv4和IPv6查找策略
- 基于Unix/Posix系统的
/etc/resolv.conf
配置 - 基于性能的优先级使用的NameServer池
- 查询结果的缓存
- NxDomain/NoData缓存(负缓存)
- DNSSEC验证
- 通用记录类型查找
- CNAME链解析
- 实验性 mDNS支持(使用
mdns
功能启用) - DNS over TLS(利用
native-tls
、rustls
和openssl;建议使用
native-tls
或rustls
) - DNS over HTTPS(目前仅支持
rustls
)
示例
use std::net::*;
use trust_dns_resolver::Resolver;
use trust_dns_resolver::config::*;
// Construct a new Resolver with default configuration options
let mut resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap();
// On Unix/Posix systems, this will read the /etc/resolv.conf
// let mut resolver = Resolver::from_system_conf().unwrap();
// Lookup the IP addresses associated with a name.
let mut response = resolver.lookup_ip("www.example.com.").unwrap();
// There can be many addresses associated with the name,
// this can return IPv4 and/or IPv6 addresses
let address = response.iter().next().expect("no addresses returned!");
if address.is_ipv4() {
assert_eq!(address, IpAddr::V4(Ipv4Addr::new(93, 184, 216, 34)));
} else {
assert_eq!(address, IpAddr::V6(Ipv6Addr::new(0x2606, 0x2800, 0x220, 0x1, 0x248, 0x1893, 0x25c8, 0x1946)));
}
DNS-over-TLS 和 DNS-over-HTTPS
支持DoT和DoH。这是通过使用以下之一实现的:`native-tls
`、`openssl
` 或 `rustls
`(目前仅支持 `rustls
` 用于DoH)。解析器只需要注册有效的DoT或DoH解析器才能使用。
要与 `Client
` 一起使用,应使用 `TlsClientConnection
` 或 `HttpsClientConnection
`。同样,要使用tokio的 `AsyncClient
`,应使用 `TlsClientStream
` 或 `HttpsClientStream
`。目前不支持ClientAuth、mTLS,还有一些问题正在解决中。TLS对于服务器身份验证和连接隐私很有用。
要启用DoT,必须启用以下功能之一:`dns-over-native-tls
`、`dns-over-openssl
` 或 `dns-over-rustls
`,`dns-over-https-rustls
` 用于DoH。
示例
通过依赖 `trust-dns-resolver
` 启用TLS库
trust-dns-resolver = { version = "*", features = ["dns-over-rustls"] }
为Cloudflare的DNS服务(包括Quad9)提供默认TLS配置的版本是 1.1.11
// Construct a new Resolver with default configuration options
let mut resolver = Resolver::new(ResolverConfig::cloudflare_tls(), ResolverOpts::default()).unwrap();
/// see example above...
DNSSEC状态
当前根密钥是硬编码到系统中的。这为DNSKEY和DS记录的验证提供了回根的验证。实现了NSEC,但没有实现NSEC3。由于尚未启用缓存,已注意到一些DNS服务器似乎限制了连接速率,验证RRSIG记录回根可能需要对这些记录进行大量的额外查询。
通过动态DNS对任何记录更新进行重新签名。要启用DNSSEC,必须启用以下功能之一:`dnssec-openssl
` 或 `dnssec-ring
`。
通过resolve CLI测试解析器
用于通过独立的CLI测试trust-dns-resolver及其功能。
cargo install --bin resolve trust-dns-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.216.34
最小Rust版本
此项目的当前最小rustc版本是 1.64
版本控制
Trust-DNS尽最大努力遵循semver。在公开的API稳定后,Trust-DNS将升级到1.0。这并不意味着Trust-DNS在0.x更新之间升级时一定会破坏。尽可能情况下,旧API将弃用,并注明替换了哪些弃用。Trust-DNS将尽力确保由于API更改而不会破坏依赖于它的软件,尽管不能保证。弃用的接口将在弃用后的至少一个主要版本中保持(尽可能),1.0升级除外,其中所有弃用的接口都将计划删除。
依赖项
~3–19MB
~295K SLoC