peterzen/goresolver

GitHub: peterzen/goresolver

一个基于 Go 的 DNSSEC 验证解析器库,通过验证 DNS 响应的数字签名和信任链来防止 DNS 欺骗攻击。

Stars: 25 | Forks: 5

# go-resolver [![Go CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/2354ea552c231933.svg)](https://github.com/peterzen/goresolver/actions/workflows/go-ci.yml) 一个基于 [miekg/dns](https://github.com/miekg/dns) 实现的 Golang DNSSEC 验证解析器库。 本包实现了执行 DNSSEC 验证的 DNS 查找函数。 ## 实现说明 在查询启用了 DNSSEC 的区域时,它会全面验证响应中包含的资源记录,并验证信任链: * 请求所需的 RRset(连同相应的 `RRSIG` 记录) * 请求包含公共 ZSK 和公共 KSK 的 `DNSKEY` 记录(连同 `DNSKEY` RRset 的 `RRSIG`) * 使用公共 ZSK 对请求的 RRset 的 `RRSIG` 进行加密验证 * 使用公共 KSK 对 `DNSKEY` RRset 的 `RRSIG` 进行加密验证 * 检查 `RRSIG` 记录的有效期 完成这些加密验证后,本包会向上遍历委派链,将公共 `DNSKEY` RR 与每个父区域中的 `DS` 记录进行比对,直到根区域,以此来验证身份验证链。 ### 根区域信任锚点 该库包含官方 IANA 根区域信任锚点(KSK-2017,密钥标签 20326),用于验证根区域的 DNSKEY。这确保了整个信任链都能被验证直至根区域,从而防止行为异常的服务器伪造 DNS 层次结构。 根区域验证遵循用于 DNSSEC 验证的 [RFC 4033](https://tools.ietf.org/html/rfc4033) 和 [RFC 4034](https://tools.ietf.org/html/rfc4034) 规范。 (有关 DNSSEC 如何工作的更深入说明,请参阅[此指南](https://www.cloudflare.com/dns/dnssec/how-dnssec-works/)。) 如果出现任何验证错误,该方法将返回一个非空的 `err` 值以及一个空的结果集。 `goresolver` 尚未实现使用 `NSEC` 或 `NSEC3` 记录的否认存在验证。 ## 文档 ``` import "github.com/peterzen/goresolver" result, err := resolver.StrictNSQuery("example.com.", dns.TypeMX) if err != nil { // handle validation errors } ``` `goresolver.LookupIP` 可用作 [net.LookupIP](https://golang.org/pkg/net/#LookupIP) 的直接替代品: ``` import "github.com/peterzen/goresolver" ips, err := goresolver.LookupIP("www.example.com") if err != nil { // handle validation errors } ``` ## 安装说明 ``` $ go get -u github.com/peterzen/goresolver ``` 欢迎并非常感谢提交针对涵盖较少见 DNSSEC 配置的额外测试用例的 PR。 ## 更多信息 * DNS 安全简介和要求 [RFC4033](https://tools.ietf.org/html/rfc4033)
标签:DNS, DNSSEC, DNS欺骗防护, EVTX分析, Golang, Go语言, KSK, miekg/dns, RFC 4033, RFC 4034, UDP扫描, ZSK, 中间人攻击防护, 信任链, 公钥验证, 域名系统安全, 安全编程, 安全解析, 密码学验证, 开发库, 数据完整性验证, 日志审计, 根区信任锚, 程序破解, 网络安全, 网络库, 解析器, 隐私保护