Commit Graph

6 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
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
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
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
0840090e5b init 2025-10-14 09:26:29 +08:00