Commit Graph

14 Commits

Author SHA1 Message Date
767ada5e43 feat(blacklist): 支持国际化域名与 hosts 文件风格黑名单
- 引入 `golang.org/x/net/idna` 实现 Unicode 域名转 ASCII(Punycode)
- 黑名单加载支持通配符格式如 `*.example.com`
- 支持解析 hosts 风格的文件(每行首列为 IP 地址时,其余列为域名)
- 扩展 Scanner 缓冲区至 2MB 以适应大型 hosts 文件
- 注释处理优化,兼容 `#` 和 `;` 分隔符
- 加载后对规则排序并去重,提升匹配效率与一致性

fix(cache): 调整负面响应缓存逻辑与上游查询并发控制

- 明确区分 NXDOMAIN 与 NODATA 并正确处理 SOA 缺失情况
- 查询上游时引入更可靠的并发限制与超时机制
- UDP 截断时自动回退 TCP 查询
- 过滤无效 RCODE(如 SERVFAIL、REFUSED 等),防止污染结果
- 区分“全部失败”与“部分完成但无有效响应”,增强调试日志信息
2025-10-17 17:28:44 +08:00
1ab273e2a8 feat(blacklist): 支持 hosts 风格黑名单文件并优化热重载机制
- 支持解析 hosts 风格的黑名单文件,可识别以 IP 开头的行,并将后续字段作为域名处理
- 增加对行首及行内注释的支持(支持 `//`、`#`、`;` 符号)
- 使用 atomic.Pointer 管理黑名单匹配器,提升并发安全性
- 优化黑名单热重载逻辑,使用 time.Ticker 替代 time.After 提高稳定性
- 更新相关依赖引用路径,调整 sync 包导入位置
2025-10-17 10:46:48 +08:00
224f575e68 feat(dns): 引入 ECS 缓存键支持与并发查询合并
新增对 EDNS Client Subnet (ECS) 的缓存键支持,当未启用 strip-ecs 时,
将归一化后的 ECS 网络信息加入缓存 key。同时引入 singleflight 合并相同
查询请求,防止缓存击穿和上游负载突增。此外,修正了 DoT 服务的 TLS 版本
至 1.3,并开放读写超时配置选项。

- 添加 ecsKeyPart 函数用于生成 ECS 相关的缓存键片段
- 使用 singleflight.Group 避免重复并发查询
- 升级默认 TLS 最小版本到 VersionTLS13
- 增加 `-read-timeout` 和 `-write-timeout` 参数控制 DoT 连接超时
- 调整日志输出以包含新的超时参数
- 优化缓存写入逻辑,在 singleflight 回调中执行
2025-10-17 09:43:50 +08:00
20d0ddc18e docs(readme): 更新 README 中的构建命令和启动示例
- 移除 emoji 前缀,简化项目标题
- 将 `go build` 命令替换为 `bash build.sh bin`
- 重新格式化启动命令,使用反斜线换行提高可读性
- 更新上游 DNS 服务器列表及部分参数配置
- 添加 blacklist-file 参数说明

build(go): 升级 Go 版本至 1.25.3
2025-10-16 10:25:42 +08:00
75f90e4706 build(dot): 更新二进制文件
更新了 dot 二进制文件的内容
2025-10-15 16:01:02 +08:00
d5835a9716 build(go): 更新 golang.org/x 包依赖版本
升级了多个 golang.org/x 相关依赖包的版本,包括:
- golang.org/x/mod 从 v0.24.0 升级到 v0.29.0
- golang.org/x/net 从 v0.43.0 升级到 v0.46.0
- golang.org/x/sync 从 v0.14.0 升级到 v0.17.0
- golang.org/x/sys 从 v0.35.0 升级到 v0.37.0
- golang.org/x/tools 从 v0.33.0 升级到 v0.38.0

此变更同步更新了 go.mod 和 go.sum 文件中的依赖记录。
2025-10-15 15:53:50 +08:00
5236dbe790 build(go): 更新依赖模块并清理无用依赖
移除多个间接依赖项,包括 github.com/beorn7/perks、github.com/cespare/xxhash/v2、
github.com/prometheus/* 系列依赖等。同时更新了 golang.org/x/net 和 golang.org/x/sys
至新版本,并引入新的间接依赖 github.com/google/go-cmp v0.7.0。
2025-10-15 15:50:30 +08:00
3cf657bb62 feat(docker): 支持通过构建参数注入编译时间
在 Dockerfile 中添加 BUILD_DATE 构建参数,并通过 ldflags 将编译时间注入到二进制文件中。
同时更新 build.sh 脚本,在构建镜像时传入当前时间作为 BUILD_DATE 参数。

refactor(build): 优化 build.sh 脚本结构与可读性

对 build.sh 脚本中的函数进行了缩进统一和结构调整,提高代码可读性和维护性。
新增 bin 命令用于直接编译并压缩二进制文件。

feat(main): 添加版本与构建信息显示功能

在 main.go 中增加 BuildDate 变量用于存储构建时间,并支持通过 -h 或 --help 参数查看帮助信息,
包括版本号、联系邮箱以及构建日期等元数据。

chore(blacklist): 移除默认黑名单条目

从 blacklist.txt 文件中移除默认的 *.baidu.com 黑名单规则。

docs(readme): 清理 README.md 文件末尾空行

删除 README.md 文件最后多余的空白行,保持文档整洁。
2025-10-15 15:16:09 +08:00
4060e83686 ```
docs(readme): 重构 README 文档结构与内容以提升可读性

- 更新项目标题图标并优化描述语句
- 重新组织特性列表为表格形式,增加 ECS 剥离、黑名单过滤等功能说明
- 补充快速开始章节,细化源码构建与 Docker 使用方式
- 调整参数说明表,新增黑名单相关配置项及缓存条目限制
- 增加缓存机制详解、黑名单功能使用示例与架构图
- 更新开发依赖信息与推荐编译参数
- 修正作者信息展示格式并添加仓库链接

feat(cache): 改进缓存键生成逻辑与 EDNS 元数据处理

- 使用 dns.CanonicalName 规范化域名避免重复缓存键
- 缓存条目中保存 EDNS 扩展信息(version, rcode, EDE)
- 修复缓存读取函数返回值,传递完整缓存元数据
- 调整 TTL 计算优先级,仅在必要时检查 Extra 区域
- 黑名单匹配提前拦截请求,跳过上游查询
- 启动日志中显示黑名单规则数量与返回码设置
```
2025-10-15 14:19:55 +08:00
916a7c8127 ```
feat(cache): 引入 LRU 缓存并优化缓存清理与 TTL 处理

- 使用 github.com/hashicorp/golang-lru/v2 替代原生 sync.Map 实现 LRU 缓存
- 修复缓存读写过程中的并发安全问题,使用 RWMutex 保护共享状态
- 调整缓存键结构注释,明确支持 TTL 和 LRU 策略
- 优化负面缓存 TTL 计算逻辑,更准确识别 NODATA 场景
- 在缓存写入前统一剥离伪 RR(如 OPT、TSIG)
- 增加 cache-size 命令行参数,支持配置 LRU 缓存最大条目数
- 移除旧的缓存清理协程中不必要的全量遍历逻辑
- 更新日志输出内容,包含 cache-size 配置项
```
2025-10-14 16:37:39 +08:00
bcd0914b2f ```
feat(core): 改进 DNS 响应构造逻辑以支持扩展错误码和诊断信息

在 writeReply 函数中,增强对上游 EDNS 选项的处理:
- 继承上游的扩展 RCODE 与 EDNS 版本号
- 可选透传 EDE(Extended DNS Errors)记录,保留更多诊断信息
- 明确设置 UDPSize、DO 位及 EDNS 版本转换逻辑

这有助于提升调试能力与协议兼容性,同时保持客户端请求的一致性。
```
2025-10-14 13:55:01 +08:00
05d3be286e ```
feat(cache): 实现并发安全的 DNS 响应缓存机制

新增基于 sync.Map 的缓存结构,支持 TTL 管理与定时清理。
完善缓存键生成逻辑,包含 DO/CD 标志避免上下文污染。
增强缓存读写处理:
- 自动跳过伪 RR(OPT/TSIG)防止干扰 TTL 计算
- 写入前剥离传输层细节提升通用性
- 支持负面缓存(NXDOMAIN/NODATA)并遵循 RFC 2308
- 回填剩余 TTL 并确保对外不可变

优化上游查询模块:
- 并发向多个上游竞速,支持 UDP 截断后 TCP 回退
- 过滤不良 RCODE(SERVFAIL/REFUSED/FORMERR)提升稳定性
- 使用信号量控制最大并发数,改善资源利用率
- 快速失败机制减少无效等待

其他改进:
- 完善日志记录,区分缓存命中/未命中及响应内容
- 显式构建客户端兼容的 EDNS0 选项
- 增加注释说明关键设计决策和行为边界
```
2025-10-14 10:52:57 +08:00
d540b302f1 ```
feat(cache): 优化缓存键生成与缓存写入逻辑

- 引入更精确的缓存键计算方式,包含 QTYPE、QCLASS、DO 和 CD 标志
- 实现负面缓存(NXDOMAIN/NODATA)支持,遵循 RFC 2308 规范
- 改进缓存清理机制,在 TTL 为 0 时主动删除过期条目
- 添加日志初始化函数,支持 verbose 模式显示源码位置
- 重构上游查询逻辑,支持 context 控制超时和 TCP 回退
- 增加 ECS(EDNS Client Subnet)剥离选项以增强隐私保护
- 调整命令行参数默认值及日志输出格式,提升可读性与调试体验
```
2025-10-14 10:28:00 +08:00
0840090e5b init 2025-10-14 09:26:29 +08:00