跳到主要内容

2026 年 6 月版本

本页归档 2026 年 6 月发布记录。

2026-06

v1.4.0

版本定位

  • Minor Release。v1.4.0 的核心是补齐复杂网络环境下的“出口控制、上游诊断和并发裁决”能力:新增 network.outbound 统一出口层,新增 oxidns probe upstream 上游诊断命令,增强 forward 多上游并发结果选择,并优化缓存、DoH 入站、WebUI 升级体验和查询记录读取性能。
  • 未配置 network.outbound.default 的旧配置通常可以直接升级。若配置了默认 outbound profile,未显式设置 outbound 的 upstream 会继承该默认 profile;SOCKS5 仅作用于 TCP、DoT 和 DoH2,UDP、DoQ、DoH3 会忽略 SOCKS5 proxy。

主要变更

  • feat(network):新增 network.outbound 统一出口配置,支持集中管理 resolver nameserver、默认出口 profile 和 SOCKS5 proxy。downloadupgradehttp_request、forward upstream、outbound resolver、Webhook 等网络路径可以复用同一套出口策略,减少多处重复配置。
  • feat(cli):新增 oxidns probe upstream <addr> 上游诊断命令,支持上游可达性检测、域名型 upstream 解析结果展示、协议握手检查、TCP / DoT pipeline 行为判断、并发行为分类,以及 human / JSON summary。适合在启用 network.outboundbootstrappipeline 或多协议 upstream 前验证真实链路。
  • feat(forward):并发上游新增 response_selection,支持 fastestbalancedprefer_positiveconsensus 四种模式;forward.concurrent 上限提升到 1..=32,并按实际 upstream 数量自动裁剪。该能力用于在速度、正向答案优先、负向答案置信度和多上游一致性之间取舍。
  • feat(cache) / perf(cache):新增 cache.min_positive_ttl,可跳过低有效 TTL 的正响应入缓存;同时优化 cache hit 与 TTL rewrite 热路径,降低高命中场景下的写竞争和记录复制开销,并修复 lazy refresh 低 TTL 场景下可能误删新缓存项的问题。
  • feat(server):DoH 入站支持 HTTP/1.1 与 HTTP/2 自动协商,并新增入口级 json_api,可在 http_server.entries[] 上开启 RFC8484 风格以外的 name / type 查询参数支持。
  • feat(webui) / fix(webui):WebUI 支持配置 network.outbound profile,并展示 outbound 相关运行时指标;升级流程新增状态展示与 Overlay,重启 / 升级检测改为识别新的 backend instance,减少快速 handoff 场景下的误判;HTML 入口改为 no-cache,避免升级后浏览器缓存旧页面壳。
  • feat(query_recorder):query recorder 新增派生 questions 索引表和 reader_concurrency,优化 qname / qtype 过滤、top qname / qtype / latency 等 SQLite 读路径,降低大库场景下 WebUI / API 查询压力。
  • feat(sequence) / docsreject 支持英文 RCODE 名称,例如 reject NXDOMAINreject SERVFAIL;新增显式 reject 0 soa;补充 DNS 编码速查表,统一说明常见 RCODE、QCLASS、QTYPE 的数字值和英文助记名。
  • refactor / deps / ci:整理 upstream、transport、forward 内部模块边界;升级 hotpathjiffbytesh2webpki-rootssyn 等依赖;GitHub Actions 升级到 actions/checkout@v7

配置与升级说明

  • 根 crate 版本号升级为 1.4.0oxidns-proto 升级为 0.1.3;release tag 应使用 v1.4.0
  • v1.3.0 升级时,未配置 network.outbound.default 的旧配置通常可以直接升级。
  • 如果配置了 network.outbound.default,请检查所有未显式设置 outbound 的 upstream,因为它们会继承默认 profile。
  • SOCKS5 proxy 仅作用于 TCP、DoT、DoH2;UDP、DoQ、DoH3 upstream 会忽略 SOCKS5 proxy。
  • 使用自定义编译时,如需 outbound resolver 的 DoT / DoH / DoQ / DoH3 能力,请确认启用了对应 resolver-* feature。
  • 建议升级后对关键上游执行 oxidns probe upstream <addr>,尤其是使用 network.outboundbootstrappipeline、DoH / DoQ / DoH3 或代理出口的部署。
  • forward.response_selectioncache.min_positive_ttlquery_recorder.reader_concurrency 均为可选配置,不设置时保持默认行为。

v1.3.0

版本定位

  • Minor Release,核心变更是将 black_hole 升级为覆盖全 qtype 的完整拦截器,并系统性加固 upstream 连接池、bootstrap、deadline / cancel safety 和 RouterOS 联动路径。同时完成 Rust 包结构重构:新增 cliinfra 层,core 收敛为 DNS 执行核心。配置层面保持大体兼容,但 black_hole 的无参默认行为与非 A/AAAA 命中语义发生变化;Rust library embedders 需要迁移公开 module path。

主要变更

  • feat(executor)black_hole 新增 modenxdomain / nodata / null / custom / refused),覆盖所有 qtype;无 ips 时默认 nxdomain,旧的 ips 写法自动按 custom 兼容处理。
  • feat(upstream):上游连接池新增 min_conns,可按需保持预热连接;max_conns 增加明确范围校验,文档和 WebUI 配置表单同步补齐。
  • fix(upstream):加固 pipeline / reuse 连接池的 deadline、取消安全、slot 回收和不可用连接裁剪逻辑,降低连接关闭、超时、替换连接失败或上游恢复期间的请求悬挂与忙等风险。
  • fix(upstream):bootstrap 要求引导服务器使用字面量 IP,按 CNAME 链选择合法 A/AAAA 结果,并纳入查询 deadline;HTTP 上游请求补充 Accept header。
  • feat(executor)ros_address_list 新增 connect_timeoutsend_timeoutreceive_timeout;启动阶段的 RouterOS 扫描和常驻项同步后台化,避免慢 address-list 阻塞 DNS 服务启动,并在清理前重新校验行状态。
  • fix(matcher):规则文件按行解析时保留逗号,修复包含逗号的 domain / matcher 表达式被错误切分的问题。
  • refactor:新增 src/cli/src/infra/,迁移 network、service、upgrade、build_info、error、task、cache、observability 等基础设施;src/core/ 仅保留 contextrule_matcher
  • zoneparser:扩展标准 RDATA 解析能力,覆盖 A/AAAA、名称类记录、MX/RT/AFSDB、TXT/SPF/AVC/RESINFO、SOA、SRV、CAA 等代表性记录,并保留 RFC3597 generic syntax 兜底。
  • query_recorder / 内部结构:抽出 RDATA JSON 序列化与存储辅助,降低复杂度并保持 recorder 输出路径可维护。
  • release:修复 GitHub Actions 上传 release 归档时的二次压缩问题,避免已打包产物被再次 archive。
  • docs(ai):维护者向 AI/agent 的说明集中到 ai/,发布流程新增中文 GitHub Release 模板,并明确 release prep 不自动 commit / tag / push。

配置与升级说明

  • 根 crate 版本号升级为 1.3.0oxidns-zoneparser 同步升级到 0.1.1crates/macroscrates/protocrates/ripset 无需同步升级;release tag 应使用 v1.3.0
  • v1.2.3 配置通常可直接升级。使用 black_hole 时请重点检查:旧的 ips 配置会自动保持 custom 语义;无参 black_hole 现在默认返回 NXDOMAINnull / custom 对非 A/AAAA 返回 NODATA,而不是继续透传。
  • 如配置了 upstream bootstrap,现在必须使用 IP:port,不要写域名;新字段 min_conns 默认 0,未配置时仍保持懒加载。
  • ros_address_list 新增的三个 timeout 字段均为可选,默认值兼容旧配置。大型共享 address-list 仍建议拆分为 OxiDNS 专用列表,避免 RouterOS 管理面扫描成本过高。
  • Rust library embedders 需要迁移公开 module path:旧顶层 network / build_info / upgrade / service 以及 core 下的基础设施模块已移入 infracore::contextcore::rule_matcher 保持不变。

v1.2.3

版本定位

  • Patch Release,核心变更为修复 /api/reload 后 TCP / DoT 写响应任务可能空转导致的高 CPU 问题,并降低上游连接池在上游不可用或重启期间的忙等重试开销。同时补齐 WebUI 英文界面 i18n,新增升级流程中的 GitHub token 控制,并继续收敛测试与 CLI / 插件文档细节。不引入破坏性配置变更。

主要变更

  • fix(server):TCP / DoT 响应写入任务在连接响应通道关闭时立即退出,避免 /api/reload 取消连接 handler 后遗留 writer 任务持续空转;新增回归测试覆盖该路径。
  • fix(upstream):pipeline / reuse 上游连接池在创建替代连接失败时加入短暂退避,避免上游故障或服务重启期间只 yield 不等待的重试循环造成 CPU 尖峰。
  • fix(upstream):保持 pipeline 池仅饱和时的即时让出调度重试,避免把退避错误套用到有连接槽位即将释放的正常高并发路径。
  • feat(webui):新增英文 i18n 资源与本地化 provider,控制台页面、插件定义、帮助文档和主要组件文案接入中英文资源。
  • feat(webui):升级检查和应用请求支持可选 GitHub token;WebUI 新增 token 持久化控制与风险提示,并在 CLI 预览中避免暴露 token。
  • fix(webui):升级入口在空闲状态下不再显示无意义的 header action。
  • docs(cli):补充 build-info 命令文档,说明 JSON 输出、能力矩阵字段与发布排查用途。
  • docs(plugin):修正插件文档中的默认值说明,保持中英文文档一致。
  • test:替换固定等待为确定性同步;修复 cron Windows 计时波动;在 query recorder top clients 断言前刷新 writer,降低测试偶发失败。

配置与升级说明

  • 根 crate 版本号升级为 1.2.3;本周期 crates/macroscrates/protocrates/ripsetcrates/zoneparser 均无改动,无需子 crate 同步升级;release tag 应使用 v1.2.3
  • v1.2.2 配置可直接升级到 v1.2.3,未引入新的必填配置字段或 YAML 配置迁移。
  • 长期运行且依赖 TCP / DoT 入站、频繁使用 /api/reload,或在上游 DNS 重启 / 不可用时观察到高 CPU 的部署,建议升级。
  • WebUI 的 GitHub token 仅用于升级检查 / 应用流程的 GitHub 请求,可选择仅本次使用或持久化保存;不配置 token 时仍沿用匿名请求行为。

v1.2.2

版本定位

  • Patch Release,核心变更为新增 HTTP 升级 API(plugin-upgrade feature)与 WebUI 实时更新通知,支持在 WebUI 内检测可用更新、比较版本并触发升级流程。同时修复 ${VAR} 环境变量展开的 YAML 解析顺序问题(先解析 YAML 再展开占位符,防止 YAML 注释干扰展开),修复 WebUI 对 ${VAR} 表单值的引号包裹处理,以及 H2/H3/DoQ 连接在远端关闭后的僵尸连接清理。不引入破坏性配置变更。

主要变更

  • feat(upgrade):新增 HTTP 升级 API(受 plugin-upgrade feature 保护),WebUI 新增更新通知横幅,可检测 GitHub 最新版本、展示当前/可用版本对比,并在 WebUI 内触发升级流程。
  • feat(webui):WebUI 升级面板适配后端 plugin-upgrade 能力,整合更新检测、升级状态展示与操作入口。
  • fix(upgrade):修复 apply 状态生命周期管理,并改为通过 POST body 传递所有升级参数,提升参数传递的可靠性。
  • fix(api):将 upgrade 模块路由注册限定在 plugin-upgrade feature 开启时,避免未编译升级能力的构建暴露相关接口。
  • fix(config)${VAR} 占位符展开改为在 YAML 解析后进行(而非之前),修复 YAML 特殊字符和注释可能干扰展开逻辑的问题;同时防止 YAML 注释文本被误作展开内容处理。
  • fix(config):将 expand_env_in_value_with_lookup 函数提升为公开可见,供外部代码复用。
  • fix(webui):修复 WebUI 在 ${VAR} 表单字段值两端错误剥除/保留引号包裹的问题(两处相关修复)。
  • fix(upstream):修复 H2(DoH)、H3(DoH3)、DoQ 连接在远端关闭后未可靠释放的僵尸连接问题,防止连接泄漏。
  • fix(tests):将集成测试中的固定 sleep 等待替换为轮询等待,提升测试可靠性。
  • fix(doc):修正 ${qname} 文档注释格式。

配置与升级说明

  • 根 crate 版本号升级为 1.2.2;本周期 crates/macroscrates/protocrates/ripsetcrates/zoneparser 均无改动,无需子 crate 同步升级;release tag 应使用 v1.2.2
  • v1.2.1 配置可直接升级到 v1.2.2,未引入新的必填配置字段。
  • HTTP 升级 API 受 plugin-upgrade feature 保护,仅在 standard / full bundle 中可用;minimal 构建不受影响。
  • 部署中使用 ${VAR} 占位符且配置文件含 YAML 注释的场景,建议升级以确保展开行为正确;旧写法无需修改,升级后行为自动改善。
  • 使用 H2/H3/DoQ 上游且长期运行的部署,建议升级以修复僵尸连接可能导致的连接泄漏。

v1.2.1

版本定位

  • Patch Release,包含 WebUI Basic Auth 登录流程与统一鉴权管理、插件画布可拖拽布局,以及多项 WebUI 交互修复(未应用插件警告、select 字段数值类型保留、查询记录流程图显示全部序列规则)。同时修复上游连接池在网络中断后的死锁问题、${VAR} 替换的 YAML 引号感知逻辑,并提升 ros_address_list 并发写入性能。不引入破坏性配置变更。

主要变更

  • ros_address_list 性能优化:将 ROS API 写入操作并行流水化,并移除新增条目后的重查询步骤,降低大批量地址列表更新的延迟。
  • 修复 upstream 连接池:网络中断恢复后连接池可能进入死锁状态,本次修复避免了中断后的连接获取阻塞。
  • feat(webui):新增 Basic Auth 登录流程,统一管理鉴权配置入口;登录态持久化到 localStorage,支持登出与会话恢复。
  • 修复 webui:插件未被应用时在 UI 上给出明确警告提示;抑制 404 错误噪音。
  • 修复 config${VAR} 环境变量替换现可正确处理被 YAML 引号包裹的占位符,与裸占位符行为保持一致。
  • 修复 webui:select 字段在保存时保留数值类型(number),避免被隐式转换为字符串导致配置校验失败。
  • feat(webui):插件画布支持按内容键控的拖拽布局,画布位置跟随内容标识持久化。
  • 修复 webui:查询记录流程图(query record flow canvas)现在显示全部序列规则,不再仅展示部分规则。
  • 依赖:Cargo patch-and-minor 组批量升级(2 个包)。
  • CI:构建环境升级到 Ubuntu 24.04;新增 release 产物收集步骤。

配置与升级说明

  • 根 crate 版本号升级为 1.2.1;本周期 crates/macroscrates/protocrates/ripsetcrates/zoneparser 均无改动,无需子 crate 同步升级;release tag 应使用 v1.2.1
  • v1.2.0 配置可直接升级到 v1.2.1,未引入新的必填配置字段。
  • 启用了管理 API 鉴权(auth)的部署,WebUI 登录流程会自动使用已配置的 Basic Auth 凭据;无需调整配置,升级后刷新 WebUI 页面即可看到登录界面。
  • 使用 ros_address_list 且有大批量地址写入需求的部署,升级后并发写入性能有所提升,无需修改配置。
  • ${VAR} 占位符周围添加了 YAML 引号(如 value: "${MY_VAR}")的部署,升级后展开行为与裸占位符一致;如果此前为绕过解析问题而添加了额外引号,升级后可按需简化写法,但旧写法仍然有效。

v1.2.0

版本定位

  • Minor Release,本周期最重要的变更是引入完整的编译期特性体系(minimal / standard / full 三个 bundle + 细粒度 flag),将 DoQ / DoH3、DoT / DoH、api / webui / metrics、可选插件以及 TLS / HTTP 依赖全部改为按需启用,并把"编译进来的能力"暴露给 CLI、API 与 WebUI。同步上线两个新插件 ip_selector(响应 IP 选优)与 dynamic_domain_set + learn_domain(可写动态域名集与在线学习),扩展 env 匹配器为多条件表达式,新增 WebUI 插件卡片拖拽排序与 dynamic_domain_set 规则管理界面。同时修复缓存大容量场景的内存与持久化问题、DoH/DoH3 启动失败时的监听泄漏、upgrade WebUI 路径解析等问题,并完成多个 Cargo 依赖升级。
  • 含一个破坏性变更:env 匹配器移除遗留的两参数 "KEY" "VALUE" 解析。使用旧写法做相等匹配的配置需要迁移到 KEY=VALUE 形式(见下方升级说明)。

主要变更

  • 编译期特性体系:新增 minimal / standard(默认推荐)/ full 三个 bundle,覆盖 server-doq / server-doh3 / server-dot / server-dohupstream-doq / upstream-doh3 / upstream-dot / upstream-dohapi / webui / metrics,以及 plugin-mikrotik / query-recorder / ipset / cron / script / download / http-request / reverse-lookup / upgrade / arbitrary / plugin-ip-selector / plugin-dynamic-domainprovider-protobuf / adguard-rule 等细粒度 flag;禁用的协议/插件在配置引用时给出"未编译进来;请使用 --features ... 重新编译"的明确错误。最小构建的 release 二进制约 8.9 MB(full 约 21 MB,缩小约 58%)。
  • 发行物构建调整:CI 与 release 产物按 bundle 切分,新增 Linux musl 的 minimal / standard 归档(full 名称保持不变),upgrade 与安装脚本可显式选择目标 bundle。standard bundle 现已包含 apiwebuiquery_recorderupgrade 等常用能力。
  • 运行时能力反射:CLI 与 system/health API 上报激活的 bundle 与支持的插件类型;WebUI 在新建、引用选择、卡片、详情视图中禁用未编译进来的插件类型。
  • 新插件 ip_selector(执行器):A / AAAA 响应 IP 选优,支持 TCP / ping 带上限的探测、得分缓存、并发探测合并、DNSSEC 安全处理与失败兜底放行;拒绝兼容别名与未知字段,仅暴露 OxiDNS 原生配置项。
  • 新插件 dynamic_domain_set(provider)+ learn_domain(执行器):基于文件的可写 provider,支持热快照、去重、API 规则管理与显式 reload;learn_domain 在不依赖 SQLite 与不触发整体 reload 的前提下,按过滤条件把查询/响应写入动态域名集;WebUI 新增 dynamic_domain_set 的规则列表、添加 / 删除 / 清空管理面板。
  • env 匹配器:支持在一次匹配中传入多个独立条件,每个参数都按独立表达式解析;推荐 KEY=VALUE 作为精确匹配语法,KEY:VALUE 作为别名;保留对带分隔符的 value 的兼容解析。破坏性:旧的两参数形式 ["KEY", "VALUE"] 现在表示"KEY 和 VALUE 两个环境变量都存在",不再等价于 KEY == VALUE
  • WebUI 插件卡片拖拽排序:仪表盘与插件中心均支持拖拽排序。插件中心的排序会写回配置文件的 plugins 顺序(暂存后由"应用更改"统一保存),在当前类型 tab 内做子集排序、保留其它类型相对位置;搜索查询激活时禁用。仪表盘固定卡片顺序仅作为本地偏好持久化到 localStorage,不修改配置文件。
  • WebUI ConfigField 新增 fullWidth 选项并应用到 dynamic_domain_set.path 等长文件路径字段;修复 @container 查询无法样式化自身容器导致的配置表单分栏不均问题。
  • sequence 步骤记录改为受内部 _sequence-step-recording feature 控制,仅在 query_recorder 启用时编译进来,未启用 recorder 的构建省去对应字段与上报开销。
  • 修复 cache:将 size 视为条目上限而非启动时的 map 容量,避免大缓存配置下的预分配开销;启动与 API dump 加载后立即按上限裁剪,并增加大容量回归覆盖。
  • 修复 server:DoH3 / TLS 前置条件不满足或 HTTP/3 初始化失败时,先回收已启动的 HTTP/2 监听任务,避免泄漏的 DoH 监听句柄。
  • 修复 upgrade:从运行时配置推断 WebUI 资源路径,避免与 working-dir 切换组合时找不到 WebUI 资源的问题。
  • 修复 config:区分运行时占位符({...})与 env 占位符的展开规则,消除歧义。
  • 修复 dynamic_domain_set:序列化追加写入、分行写入新增规则、写文件前先校验规则、保持动态域名结构变更与文件状态一致;api 关闭时跳过对应管理接口注册。
  • 文档:新增 PLUGIN_DEV.md 插件开发与注册指南、SECURITY.md 安全策略、自定义构建中文文档与 quickstart 中的预设能力矩阵;新增 roadmap 时间线组件;移除安装文档中的 GHCR 引用;修复 TLS 配置文档格式。
  • 依赖:升级 socket2 0.6.3 → 0.6.4jiff 0.2.24 → 0.2.28wincode 0.5.4 → 0.5.5http 1.4.0 → 1.4.1hyper 1.9.0 → 1.10.1rusqlite 0.39 → 0.40windows-service 0.6 → 0.8.1
  • 其它:IpSelectorCacheConfig 拒绝未知字段;修复运行时测试的序列化死锁;清理被取消的 ip_selector 探测;多项 CI 修复,覆盖 minimal / standard / full feature 组合与 Windows 测试;新增可复用的 custom build workflow 与最小化的 build.config.yml 范例。

配置与升级说明

  • 根 crate 版本号升级为 1.2.0;本周期 crates/macroscrates/protocrates/ripsetcrates/zoneparser 均无改动,无需子 crate 同步升级;release tag 应使用 v1.2.0
  • v1.1.4 配置在使用默认(full)或 standard bundle 升级时无需修改即可直接启动;如选择 minimal 或自定义裁剪 feature,配置里引用未编译进来的插件 / 协议会在启动时报错"未编译进来;请使用 --features ... 重新编译",可据此添加缺失 feature 或移除对应配置项。
  • 破坏性 — env 匹配器:旧的两参数写法 env: ["KEY", "VALUE"](语义:$KEY == VALUE)需要迁移为 env: ["KEY=VALUE"]env: ["KEY:VALUE"]。若刻意保留两参数语义,请确认你确实是想匹配"两个环境变量都存在"。详见 docs/docs/migrate-from-mosdns.mdx 中的迁移说明。
  • 选择最小化部署的用户可通过 --no-default-features --features minimalstandard 自行构建;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_setlearn_domain 为可选 plugin-dynamic-domain 特性、ip_selectorplugin-ip-selector 特性,二者均已包含在 standard / full bundle 中;最小化构建若需启用,请显式添加对应 feature。

返回版本更新索引