Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Jun 15:27
· 209 commits to main since this release

OxiDNS v1.2.0

OxiDNS 1.2.0 是一个 Minor Release,本周期最大的变化是引入完整的编译期特性体系与三档预设 bundle,把 DoQ / DoH3、DoT / DoH、api / webui / metrics、可选插件以及 TLS / HTTP 依赖全部改为按需启用,并把"编译进来的能力"暴露给 CLI、API 与 WebUI。同步上线两个新插件 ip_selectordynamic_domain_set + learn_domain,扩展 env 匹配器为多条件表达式,并修复缓存、DoH 监听、upgrade 等关键问题。

⚠️ 本版本含一个破坏性变更:env 匹配器移除了遗留的两参数 ["KEY", "VALUE"] 解析,详见下方升级说明。

✨ 亮点

  • 编译期特性体系:新增 minimal / standard(推荐)/ full 三个 bundle,叠加 server-doq / server-doh3 / server-dot / server-doh、upstream-doq / upstream-doh3 / upstream-dot / upstream-doh、api / webui / metricsplugin-mikrotik / query-recorder / ipset / cron / script / download / http-request / reverse-lookup / upgrade / arbitrary / plugin-ip-selector / plugin-dynamic-domainprovider-protobuf / adguard-rule 等细粒度 flag。minimal 二进制约 8.9 MB(vs full 约 21 MB,缩小约 58%)
  • Release 产物按 bundle 切分:新增 Linux musl minimal / standard 归档(full 名称保持不变),upgrade 与安装脚本支持显式选择 bundle;standard 已包含 apiwebuiquery_recorderupgrade
  • 运行时能力反射:CLI 与 system/health 上报激活的 bundle 与支持的插件类型;WebUI 在新建、引用选择、卡片、详情视图中自动禁用未编译进来的插件类型。
  • 新插件 ip_selector(executor):A / AAAA 响应 IP 选优,支持带上限的 TCP / ping 探测、得分缓存、并发探测合并、DNSSEC 安全处理与失败兜底放行。
  • 新插件 dynamic_domain_set(provider)+ learn_domain(executor):可写、文件持久化、支持热快照与 API 规则管理的动态域名集;learn_domain 不依赖 SQLite、不触发整体 reload,即可把查询/响应按过滤条件写入动态集;WebUI 新增规则列表、添加 / 删除 / 清空管理面板。
  • env 匹配器多条件:每个参数都按独立表达式解析;推荐 KEY=VALUE 精确匹配,KEY:VALUE 作为别名,支持 value 中含分隔符。
  • WebUI 卡片拖拽排序:仪表盘与插件中心均支持拖拽。插件中心的排序写回配置文件的 plugins 顺序(暂存后由"应用更改"统一保存);仪表盘固定卡片顺序仅作为本地偏好持久化到 localStorage
  • 新增 dynamic_domain_set WebUI 规则管理面板learn_domain 字段级文档。

🐛 关键修复

  • cache:size 视为条目上限而非启动时 map 容量,避免大缓存配置的预分配开销;启动与 API dump 加载后立即按上限裁剪。修复 #147
  • server:DoH3 / TLS 前置条件不满足或 HTTP/3 初始化失败时,先回收已启动的 HTTP/2 监听任务,避免泄漏的 DoH 监听句柄。
  • upgrade:从运行时配置推断 WebUI 资源路径,修复与 --working-dir 组合使用时找不到 WebUI 资源的问题。
  • config:消除运行时占位符 {...}env 占位符的歧义。
  • dynamic_domain_set:序列化追加写入、分行写入新增规则、写文件前先校验、保持内存与文件状态一致。
  • perf(sequence):步骤记录改为受内部 _sequence-step-recording feature 控制,仅在 query_recorder 启用时编译进来。

💥 破坏性变更

env 匹配器移除遗留的两参数解析

  • 旧写法 env: ["KEY", "VALUE"] 之前等价于 $KEY == VALUE;现在表示"环境变量 KEYVALUE 都存在"
  • 迁移方法(任选其一):
    • env: ["KEY=VALUE"](推荐)
    • env: ["KEY:VALUE"]
  • 如果你确实想保留新语义(两个环境变量都存在),无需修改。
  • 详见 docs/migrate-from-mosdns 中的迁移说明。

⬆️ 升级说明

  • 根 crate 升级至 1.2.0;本周期 crates/macros / crates/proto / crates/ripset / crates/zoneparser 均无改动,子 crate 无需升级。Release tag:v1.2.0
  • 使用默认(full)或 standard bundle 时,v1.1.4 配置可直接升级;如选择 minimal 或自定义裁剪 feature,配置里引用未编译进来的插件 / 协议会在启动时报错 "not compiled in; rebuild with --features ..."。
  • 选择最小化部署:cargo build --release --no-default-features --features minimal(或 standard)。Release 通道同时发布 minimal / standard / full 三套 Linux musl 归档,upgrade 与安装脚本支持显式 bundle 选择。需要 WebUI、query_recorderupgrade 的部署建议使用 standardfull
  • 大缓存部署(如 size > 200000)强烈建议升级:先前会预分配过大 map,且 API dump 加载后未严格裁剪。
  • 启用 DoH 且未启用 DoH3、或启用 DoH3 但缺少必需 TLS 配置的部署建议升级:先前在 HTTP/3 初始化失败时可能残留 HTTP/2 DoH 监听句柄。
  • dynamic_domain_set / learn_domainplugin-dynamic-domain 控制,ip_selectorplugin-ip-selector 控制;二者均已包含在 standard / full bundle 中。

📦 依赖升级

  • socket2 0.6.3 → 0.6.4
  • jiff 0.2.24 → 0.2.28
  • wincode 0.5.4 → 0.5.5
  • http 1.4.0 → 1.4.1
  • hyper 1.9.0 → 1.10.1
  • rusqlite 0.39 → 0.40
  • windows-service 0.6 → 0.8.1

📚 文档

  • 新增 PLUGIN_DEV.md 插件开发与注册指南
  • 新增 SECURITY.md 安全策略
  • 新增自定义构建中文文档与 quickstart 预设能力矩阵
  • 新增 roadmap 时间线组件
  • 移除安装文档中的 GHCR 引用
  • 修复 TLS 配置文档格式

What's Changed

  • Feat/webui drag ordering by @svenshi in #145
  • fix(cache): avoid eager allocation for large cache limits by @svenshi in #148
  • feat(build): gate api/tls/http protocols behind Cargo features by @svenshi in #144
  • fix(upgrade): infer WebUI path from runtime config by @svenshi in #152
  • fix(config): disambiguate runtime and env placeholders by @svenshi in #151
  • feat(matcher): support multiple env conditions by @svenshi in #150
  • feat(executor): add ip_selector response IP selection by @svenshi in #154
  • feat(plugin): add dynamic domain learning by @svenshi in #153
  • deps: bump the cargo-major group with 2 updates by @dependabot[bot] in #156
  • deps: bump the cargo-patch-and-minor group with 5 updates by @dependabot[bot] in #155

Full Changelog: v1.1.4...v1.2.0