# Changelog 所有对本项目的显著更改都将记录在此文件中。 ## [2.0.0] - 2026-01-18 ### 重大重构 - **核心查询逻辑重构**:移除了所有响应合并相关代码,简化了DNS查询处理流程 - **并行查询模式重设计**:改为返回第一个成功响应,提高响应速度 - **fast-ip模式优化**:只向一个预先测试出的最快服务器发送请求,降低资源消耗 - **代码结构优化**:移除了冗余的响应合并机制,减少了内存占用和CPU消耗 ### 移除 - 删除了 `mergeResponses` 函数:不再合并多个DNS响应 - 删除了 `recordKey` 结构体:不再需要唯一标识DNS记录 - 删除了 `getRecordKey` 函数:不再需要获取DNS记录的唯一标识 - 移除了所有响应合并相关的代码 ### 改进 - **parallel模式**:向多个上游服务器并行发送请求,返回第一个成功响应 - **fast-ip模式**:通过ping测试选择最快服务器,只向一个服务器发送请求 - **默认模式**:采用新的并行查询逻辑,返回第一个成功响应 - **资源管理**:优化了连接池使用,减少资源消耗 - **DNSSEC验证**:只对将要返回的响应进行验证,减少不必要的计算 ### 性能提升 - 减少了内存占用:不再存储多个响应进行合并 - 降低了CPU消耗:移除了复杂的响应合并算法 - 提高了响应速度:返回第一个成功响应,无需等待所有服务器响应 - 减少了网络流量:fast-ip模式只向一个服务器发送请求 ## [1.2.7] - 2026-01-17 ### 改进 - 实现服务器启动时远程屏蔽列表获取和DNS服务启动同时进行 - 新增`LoadLocalRulesOnly()`方法,只加载本地规则和hosts文件,确保服务器快速启动 - 在main.go中使用`LoadLocalRulesOnly()`替代`LoadRules()`,不再等待远程规则获取完成 - 添加异步加载远程规则的goroutine,服务器启动后在后台加载远程规则 - 优化缓存机制,本地有缓存时自动加载,服务器启动时只检查更新而不是重新获取 - 修改`fetchRemoteRules`方法,只有在缓存需要更新时才去远程获取规则,否则直接从缓存加载 - 完善错误处理,当从远程获取失败时,尝试使用过期的缓存 - 服务器和设置界面优化调整,增加缓存模式设置、缓存大小、缓存时间设置 ## [1.2.6] - 2025-12-30 ### 新增 - 实现查询日志详情的域名信息显示功能 - 实现GFWList功能,可以使用Steam++作为代理访问YouTube,谷歌等被屏蔽的网站 ## [1.2.5] - 2025-12-26 ### 新增 - 增加了对IPv6的支持配置项,默认关闭; - 增加跟踪器状态显示(匹配tracker/trackers.json数据库); - 全局UX改进,包括但不限于: - 增加了页面滚动时,菜单栏和顶部标题栏保持固定的功能; - 优化了页面适应窗口大小的改变,确保在所有设备上都能正确显示; - 增加点击解析记录后弹窗日志详情的UI/UX,使用现代化设计和动画效果; - 增加了查询日志详情界面的滚动条,方便查看长日志。 ### 改进 - 新增API接口,用于查询解析日志详情; - 支持EDNS,在web界面查询日志详情的请求列表区域增加了EDNS标记显示。 ### 修复 - 修复DNS服务器地址缺少端口号导致的Server Failed问题; - 修复查询日志详情接口返回的日志格式错误问题,现在返回的日志包含完整的解析记录和解析时间; - 修复查询日志详情接口返回的日志中,解析记录中缺少IP地址、类型、DNSSEC验证状态等信息的问题; - web界面系统设置加载后不获取数据和保存配置不生效的问题; - 修复了DNS查询超时设置过短导致的"Server failed"错误。 ### 更新 - 更新Swagger API文档。 ## [1.2.4] - 2025-12-25 ### 改进 - 修复DNS解析记录显示,现在显示完整格式:"A: 104.26.24.30 (ttl=193)" 而不仅仅是IP地址 - 移除了查询日志列表中的"屏蔽规则"列,但在详情弹窗中仍保留 - 在弹窗日志详情中,只有被屏蔽或者有自定义规则时才显示规则信息 - 改进了日志详情弹窗的UI/UX,使用现代化设计和动画效果 - 移除了右上角的服务器状态卡片(CPU、查询统计等) - 实现了页面滚动时,菜单栏和顶部标题栏保持固定 - 优化了页面适应窗口大小的改变,确保在所有设备上都能正确显示 ### 修复 - 修复了移动端侧边栏在打开时遮挡页面内容的问题 - 修复了侧边栏布局,分离了桌面端和移动端侧边栏,使用CSS媒体查询控制显示 ## [1.2.3] - 2025-12-25 ### 修复 - 修复DNS服务器地址缺少端口号导致的Server Failed问题 - 添加normalizeDNSServerAddress函数,确保DNS服务器地址始终包含端口号,默认添加53端口 - 修改所有resolver.Exchange()调用,确保传递的服务器地址包含端口号 - 优化DNSSEC服务器合并逻辑,确保DNSSEC服务器地址也包含端口号 ## [1.2.2] - 2025-12-25 ### 新增 - 增加查询日志详情界面点击域名列表,显示解析日志的详细信息。 - 增加DNSSEC上游服务器的配置项。 ### 修复 - web界面系统设置加载后不获取数据和保存配置不生效的问题。 ## [1.2.1] - 2025-12-25 ### 改进 - 增加IPv6支持配置项,默认关闭 ### 修复 - 修复了DNS查询超时设置过短导致的"Server failed"错误 - 将默认DNS请求超时时间从5毫秒调整为1000毫秒 ## [1.2.0] - 2025-12-24 ### 添加 - 在查询日志详情的域名左侧添加DNSSEC状态锁图标和跟踪器状态图标 - 实现跟踪器状态显示(匹配tracker/trackers.json数据库) - 添加跟踪器详情浮窗(鼠标悬停在眼睛图标上时显示跟踪器名称、类别、URL、来源等信息) - 实现日志页面页码跳转功能(输入框+"前往"按钮) - 实现日志页面显示数量选择功能(下拉框) ### 修改 - 异步加载跟踪器数据库并缓存,优化性能 - 将日志渲染逻辑改为支持异步操作的for...of循环 - 修复跟踪器浮窗CSS样式语法错误 - 在后端添加/tracker目录静态文件服务路由 ## [1.1.4] - 2025-12-21 ### 修复 - 修复规则优先级问题:确保自定义规则优先于远程规则 - 修复添加自定义规则后需要重启服务器的问题:通过在添加或删除规则后清空DNS缓存实现 ## [1.1.3] - 2025-12-19 ### 移除 - 移除search domain功能,不再支持自动添加域名前缀进行查询 - 移除DNSConfig结构体中的PrefixDomain字段 - 移除配置文件中的prefixDomain配置项 ## [1.1.2] - 2025-12-19 ### 添加 - 添加不验证DNSSEC的域名功能,支持通过配置文件指定需要跳过DNSSEC验证的域名模式 - 在DNSConfig结构体中增加NoDNSSECDomains字段,用于存储不验证DNSSEC的域名模式列表 ### 修改 - 在forwardDNSRequestWithCache函数中添加域名匹配逻辑,检查域名是否包含不验证DNSSEC的模式 - 在所有查询模式(parallel、fastest-ip、default)中实现跳过DNSSEC验证的功能 ## [1.1.1] - 2025-12-19 ### 修改 - 修复NXDOMAIN响应传播逻辑,确保上游DNS服务器返回的NXDOMAIN响应能正确传递给客户端 - 优化fastest-ip和parallel查询模式下的NXDOMAIN响应选择机制 - 确保不存在的域名能被正确识别并返回NXDOMAIN状态码 - 修复服务器绑定地址配置,确保IPv4兼容性 ## [1.0.0] - 2025-12-16 ### 添加 - 在web界面查询日志详情的请求列表区域增加了EDNS标记显示 - 后端QueryLog结构体扩展,新增EDNS字段以记录查询是否使用EDNS - 前端日志渲染逻辑支持EDNS标记的显示 ### 修改 - 更新了`addQueryLog`函数签名,增加edns参数 - 调整了所有`addQueryLog`调用,确保传递正确的EDNS值 - 优化了日志表格的状态显示格式,使EDNS标记与DNSSEC、缓存状态等标记一致显示 ## 格式说明 本CHANGELOG遵循[Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)格式。 版本号遵循[语义化版本](https://semver.org/lang/zh-CN/)规范。