Commit Graph

5 Commits

Author SHA1 Message Date
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