SDNS:隐私优先的递归 DNS 解析器
用 Go 编写的高性能递归 DNS 解析器,带 DNSSEC 验证和 DoT/DoH/DoQ 加密传输。
- 浏览
- 2
- 访问
- 0
- 下载
- 0
- 版本
- v1.9.1
- 平台
- Windows、macOS、Linux
详细介绍
项目简介
SDNS 是一个用 Go 编写的递归 DNS 解析器。它从根服务器开始解析,使用 DNSSEC 信任锚验证应答并缓存结果。它同时提供 UDP、TCP 明文 DNS,以及 DNS over TLS、DNS over HTTPS(含 HTTP/3)和 DNS over QUIC 加密传输,重点关注解析过程的隐私保护。完整文档位于 sdns.dev。
主要功能
解析:从根开始的递归解析与 DNSSEC 验证、QNAME 最小化(RFC 9156)、积极使用 NSEC(RFC 8198)、NXDOMAIN 子树裁剪(RFC 8020)、失败缓存(RFC 9520)、扩展 DNS 错误(RFC 8914);可选使用经 ZONEMD 校验的本地根区副本(RFC 8806)或过期应答(RFC 8767)。
后量子:支持使用 ML-DSA-44 签名(算法 18)的 DNSSEC 验证;所有 TLS 传输默认提供 X25519MLKEM768 混合密钥交换。
传输:UDP、TCP、DoT(RFC 7858)、DoH(RFC 8484)、DoQ(RFC 9250);[ddr] 下的指定解析器发现(RFC 9462);DNS Cookie(RFC 7873、RFC 9018);加密传输上的填充应答(RFC 8467);Linux 下批量 recvmmsg/sendmmsg。
策略:响应策略区(RPZ)、黑名单、按客户端视图、访问列表、速率限制、反射攻击检测。
其他命名空间:按区条件转发、整机转发模式、Kubernetes 集群 DNS、DNS64(RFC 6147)、EDNS Client Subnet(RFC 7871)、本地服务区(RFC 6303)。
运维:Prometheus 指标、HTTP API、dnstap、限制单请求工作量的递归防火墙、启动时按机器规格推导服务上限、一次性报告所有配置问题的校验环节;cache_persist 支持热重启时保存与加载缓存。
安装与使用
go install github.com/semihalev/sdns@latest # 需要 Go 1.27 或更新
官方还为 Linux、macOS、Windows 和 BSD 提供预编译二进制,为 Linux amd64 提供 .deb / .rpm 包;也可通过 Homebrew、Snap 安装,或使用 Docker 镜像 ghcr.io/semihalev/sdns。
生成配置并校验、启动:
sdns -t -c sdns.conf
sdns -c sdns.conf &
向它发起查询:
dig @127.0.0.1 -p 5354 example.com A +dnssec
应答中出现 ad 标志表示已通过验证。首次查询需要预热根区并获取信任锚,会比较慢,之后由缓存提供。
注意事项
默认生成的配置监听所有接口的 53 端口,并允许所有客户端查询,建议先在本地高位端口试跑,并调整 accesslist。v1.9.1 调整了 ratelimit 与 SIGHUP 的行为,升级前建议先阅读该版本的更新说明。项目以 MIT 许可证开源。
本作品整理自 GitHub 开源项目 semihalev/sdns,原作者 @semihalev,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v1.9.1当前版本
SIGHUP 现在重新加载整份配置而非仅 TLS 证书;限速改为按缓存答案生效并返回截断应答;新增 AAAA 抑制、owner 权威视图、hosts 文件过滤三项可选功能,修复浏览器 DoH 问题。
评论