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。download、upgrade、http_request、forward upstream、outbound resolver、Webhook 等网络路径可以复用同一套出口策略,减少多处重复配置。feat(cli):新增oxidns probe upstream <addr>上游诊断命令,支持上游可达性检测、域名型 upstream 解析结果展示、协议握手检查、TCP / DoT pipeline 行为判断、并发行为分类,以及 human / JSON summary。适合在启用network.outbound、bootstrap、pipeline或多协议 upstream 前验证真实链路。feat(forward):并发上游新增response_selection,支持fastest、balanced、prefer_positive、consensus四种模式;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.outboundprofile,并展示 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)/docs:reject支持英文 RCODE 名称,例如reject NXDOMAIN、reject SERVFAIL;新增显式reject 0 soa;补充 DNS 编码速查表,统一说明常见 RCODE、QCLASS、QTYPE 的数字值和英文助记名。refactor/deps/ci:整理 upstream、transport、forward 内部模块边界;升级hotpath、jiff、bytes、h2、webpki-roots、syn等依赖;GitHub Actions 升级到actions/checkout@v7。
配置与升级说明
- 根 crate 版本号升级为
1.4.0;oxidns-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.outbound、bootstrap、pipeline、DoH / DoQ / DoH3 或代理出口的部署。 forward.response_selection、cache.min_positive_ttl、query_recorder.reader_concurrency均为可选配置,不设置时保持默认行为。
v1.3.0
版本定位
- Minor Release,核心变更是将
black_hole升级为覆盖全 qtype 的完整拦截器,并系统性加固 upstream 连接池、bootstrap、deadline / cancel safety 和 RouterOS 联动路径。同时完成 Rust 包结构重构:新增cli与infra层,core收敛为 DNS 执行核心。配置层面保持大体兼容,但black_hole的无参默认行为与非 A/AAAA 命中语义发生变化;Rust library embedders 需要迁移公开 module path。
主要变更
feat(executor):black_hole新增mode(nxdomain/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 上游请求补充Acceptheader。feat(executor):ros_address_list新增connect_timeout、send_timeout、receive_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/仅保留context与rule_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.0;oxidns-zoneparser同步升级到0.1.1;crates/macros、crates/proto、crates/ripset无需同步升级;release tag 应使用v1.3.0。 v1.2.3配置通常可直接升级。使用black_hole时请重点检查:旧的ips配置会自动保持custom语义;无参black_hole现在默认返回NXDOMAIN;null/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下的基础设施模块已移入infra;core::context和core::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/macros、crates/proto、crates/ripset、crates/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-upgradefeature)与 WebUI 实时更新通知,支持在 WebUI 内检测可用更新、比较版本并触发升级流程。同时修复${VAR}环境变量展开的 YAML 解析顺序问题(先解析 YAML 再展开占位符,防止 YAML 注释干扰展开),修复 WebUI 对${VAR}表单值的引号包裹处理,以及 H2/H3/DoQ 连接在远端关闭后的僵尸连接清理。不引入破坏性配置变更。
主要变更
feat(upgrade):新增 HTTP 升级 API(受plugin-upgradefeature 保护),WebUI 新增更新通知横幅,可检测 GitHub 最新版本、展示当前/可用版本对比,并在 WebUI 内触发升级流程。feat(webui):WebUI 升级面板适配后端 plugin-upgrade 能力,整合更新检测、升级状态展示与操作入口。fix(upgrade):修复 apply 状态生命周期管理,并改为通过 POST body 传递所有升级参数,提升参数传递的可靠性。fix(api):将 upgrade 模块路由注册限定在plugin-upgradefeature 开启时,避免未编译升级能力的构建暴露相关接口。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/macros、crates/proto、crates/ripset、crates/zoneparser均无改动,无需子 crate 同步升级;release tag 应使用v1.2.2。 v1.2.1配置可直接升级到v1.2.2,未引入新的必填配置字段。- HTTP 升级 API 受
plugin-upgradefeature 保护,仅在standard/fullbundle 中可用;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/macros、crates/proto、crates/ripset、crates/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 启动失败时的监听泄漏、upgradeWebUI 路径解析等问题,并完成多个 Cargo 依赖升级。 - 含一个破坏性变更:
env匹配器移除遗留的两参数"KEY" "VALUE"解析。使用旧写法做相等匹配的配置需要迁移到KEY=VALUE形式(见下方升级说明)。
主要变更
- 编译期特性体系:新增
minimal/standard(默认推荐)/full三个 bundle,覆盖server-doq/server-doh3/server-dot/server-doh、upstream-doq/upstream-doh3/upstream-dot/upstream-doh、api/webui/metrics,以及plugin-mikrotik/query-recorder/ipset/cron/script/download/http-request/reverse-lookup/upgrade/arbitrary/plugin-ip-selector/plugin-dynamic-domain、provider-protobuf/adguard-rule等细粒度 flag;禁用的协议/插件在配置引用时给出"未编译进来;请使用--features ...重新编译"的明确错误。最小构建的 release 二进制约 8.9 MB(full 约 21 MB,缩小约 58%)。 - 发行物构建调整:CI 与 release 产物按 bundle 切分,新增 Linux musl 的
minimal/standard归档(full名称保持不变),upgrade与安装脚本可显式选择目标 bundle。standardbundle 现已包含api、webui、query_recorder、upgrade等常用能力。 - 运行时能力反射:CLI 与
system/healthAPI 上报激活的 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-recordingfeature 控制,仅在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.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。 - 其它:
IpSelectorCacheConfig拒绝未知字段;修复运行时测试的序列化死锁;清理被取消的ip_selector探测;多项 CI 修复,覆盖 minimal / standard / full feature 组合与 Windows 测试;新增可复用的 custom build workflow 与最小化的build.config.yml范例。
配置与升级说明
- 根 crate 版本号升级为
1.2.0;本周期crates/macros、crates/proto、crates/ripset、crates/zoneparser均无改动,无需子 crate 同步升级;release tag 应使用v1.2.0。 v1.1.4配置在使用默认(full)或standardbundle 升级时无需修改即可直接启动;如选择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 minimal或standard自行构建;release 通道同时发布minimal/standard/full三套 Linux musl 归档,upgrade与安装脚本支持显式 bundle 选择。包含 WebUI、query_recorder、upgrade的部署建议使用standard或full。 - 缓存大容量(如
size > 200000)部署强烈建议升级:先前的大容量场景会预分配过大的 map,并在加载 API dump 时不强制按上限裁剪;本次修复后内存占用与上限严格对齐。 - 启用 DoH 且未启用 DoH3、或启用 DoH3 但缺少必需 TLS 配置的部署建议升级:先前在 HTTP/3 初始化失败时可能残留 HTTP/2 DoH 监听句柄;现在改为前置校验并清理已启动的任务。
dynamic_domain_set与learn_domain为可选plugin-dynamic-domain特性、ip_selector为plugin-ip-selector特性,二者均已包含在standard/fullbundle 中;最小化构建若需启用,请显式添加对应 feature。