Skip to content
svenshiPublic

About

A high-performance, programmable DNS engine in Rust with flexible pipeline-based routing.

Topics

Resources

Contributing

Security policy

Stars

553 stars

Watchers

2 watching

Forks

Repository files navigation

OxiDNS Banner

oxidns downloads latest release license Rust CI WebUI CI

中文 | English · 文档 · 快速开始 · 插件参考

OxiDNS

面向复杂网络的高性能 DNS 策略编排引擎。

OxiDNS 是一个使用 Rust 构建、面向软路由、OpenWrt、Homelab 和高级自建网络的插件化 DNS 引擎。它通过声明式策略组合匹配、缓存、转发、回退、改写、本地应答和系统联动,并提供 WebUI、管理 API、查询记录、Prometheus 指标和实时日志。

项目受 mosdns 启发,但不止于规则分流:OxiDNS 将 DNS 请求、上游响应和网络副作用放进同一条可组合、可解释的策略管线,让复杂行为仍然能够被配置、验证和追踪。

快速开始 · 配置总览 · 常见场景 · 性能与基准

为什么选择 OxiDNS

  • 策略可编排:sequence 将 matcher、executor 和 provider 组合成可复用的条件分支、跳转和回退链。
  • 决策可解释:查询记录、执行路径、结构化日志和指标可以回答一次查询匹配了什么、执行了什么、为何选择当前结果。
  • 接入与出口统一:同一策略可服务 UDP、TCP、DoT、DoQ 和 DoH,并统一管理上游解析、连接复用、并发裁决与代理出口。
  • DNS 驱动网络行为:解析结果可以直接联动 Linux ipset / nftset、RouterOS 地址列表与静态路由、HTTP webhook 和外部脚本。

OxiDNS 使用自有 DNS 消息模型与 wire 编解码层,并把规则编译、依赖分析和连接初始化尽可能移出请求热路径;设计方法和历史测试结果见性能与基准。

核心请求路径保持清晰:

client -> server -> sequence (matcher + executor + provider)
                         |-> upstream / local answer -> response
                         `-> side effects

策略配置是什么样的

下面的配置把 corp.lan 交给内网 DNS,其余域名使用加密上游。Provider、matcher、executor 和 server 通过 tag 组合,不需要把策略写进协议入口:

plugins:
  - tag: internal_domains
    type: domain_set
    args:
      exps: ["domain:corp.lan"]

  - tag: forward_internal
    type: forward
    args:
      upstreams:
        - addr: "udp://192.168.1.1:53"

  - tag: forward_public
    type: forward
    args:
      upstreams:
        - addr: "tls://dns.quad9.net:853"
          bootstrap: "9.9.9.9:53"

  - tag: main
    type: sequence
    args:
      - matches: "qname $internal_domains"
        exec: "$forward_internal"
      - matches: "!has_resp"
        exec: "$forward_public"
      - exec: accept

  - tag: dns_server
    type: udp_server
    args:
      entry: main
      listen: ":5335"

完整配置结构、复用规则和更多部署模板见配置总览与常见场景。


核心能力

类别 能力
协议接入 UDP、TCP、DoT、DoQ、DoH(HTTP/1.1、HTTP/2、HTTP/3)
策略编排 sequence、条件匹配、执行器组合、跳转与回退链
上游与出口 多协议上游、并发响应裁决、连接复用、bootstrap、SOCKS5、统一 network.outbound
响应处理 TTL 感知缓存与负缓存、ECS 与 ECS 客户端地址映射、本地记录、重定向、响应构造、双栈与 IP 优选
规则数据 域名与 IP 集、GeoIP、GeoSite、AdGuard 规则、动态域名学习
系统联动 Linux ipset / nftset、RouterOS address-list / static route、HTTP webhook、外部脚本
可观测性 查询审计与执行路径、实时日志、Prometheus 指标、上游探测、健康检查
运行时管理 配置校验与热重载、matcher 基础结果固定、provider 定向重载、缓存与升级管理
部署能力 多平台构建、Debian 包、OpenWrt LuCI 插件、内置 WebUI 与管理 API、服务化安装

完整的内置组件和配置字段见插件参考。


快速开始

一条命令安装最新 release,并默认注册和启动为系统服务:

curl -fsSL https://oxidns.org/install.sh | sudo sh

Windows 管理员 PowerShell:

irm https://oxidns.org/install.ps1 | iex

默认情况下,安装脚本会下载对应平台的 release、安装 WebUI,并注册和启动系统服务。

安装完成后,可以验证管理端和默认 DNS 服务:

curl -fsS http://127.0.0.1:9199/api/health
dig @127.0.0.1 example.com
dig @127.0.0.1 example.com +tcp

WebUI 默认地址为 http://服务器IP:9199/。允许其他设备访问前,请启用 api.http.auth 并通过防火墙或反向代理限制来源。修改配置后,请先使用 oxidns check 校验。

OpenWrt 会通过同一个安装脚本安装 luci-app-oxidns。完成首次查询见快速开始;手动下载、Docker、Debian 包、便携安装和卸载见文档中的“安装与部署”;按需裁剪协议和插件见自定义编译。

适合谁

OxiDNS 适合需要长期运行、精细控制和完整可观测性的 DNS 环境,例如:

  • 家庭网关、旁路由、OpenWrt、NAS 和 Homelab
  • 按域名、客户端、查询类型或响应结果进行策略路由
  • 多上游并发、主备回退、加密 DNS 与自定义出口
  • 广告过滤、本地覆盖、双栈偏好、ECS 和动态规则学习
  • 由 DNS 结果驱动防火墙集合、地址列表或策略路由

它不是权威 DNS 服务,也不是无需理解配置模型的一键广告过滤面板。如果你的首要需求是开箱即用的图形化管理,其他面向该场景的产品可能更合适;OxiDNS 更适合愿意用一定配置复杂度换取控制力和可解释性的用户。


文档

项目状态

OxiDNS 仍在持续开发,适合高级家庭网络、软路由、Homelab 和其他可控的自建网络环境。用于生产或关键网络前,请完成配置与回退验证、容量评估和监控建设。DNS 配置会直接影响网络可用性,请在变更前保留可恢复的配置和旁路方案。

欢迎提交 Issue、反馈真实场景、改进文档或贡献插件。


维护者

OxiDNS 主要由 Sven Shi 创建和维护。

我目前正在关注新的职业机会,方向包括 后端工程、基础设施、网络系统, 以及涉及 Rust 的工程岗位。

如果你所在的团队正在解决类似 OxiDNS 所涉及的系统、网络或基础设施问题, 并认为我的经验可能适合,欢迎通过 Email 与我联系。


社区交流

欢迎加入 Telegram 群与作者和其他用户交流:@OXIDNS · https://t.me/oxidns

OxiDNS Telegram 群二维码

支持项目开发

如果 OxiDNS 对你有帮助,可以通过微信或支付宝支持项目的持续开发与维护。支持完全自愿,感谢每一份认可。

微信支付 支付宝
支持 OxiDNS 项目开发的微信支付收款码 支持 OxiDNS 项目开发的支付宝收款码

资金支持不会建立商业服务关系,也不会影响功能规划或问题处理的优先级。其他支持方式请参阅贡献指南。


许可证

本项目基于 GNU General Public License v3.0 or later 开源。

About

A high-performance, programmable DNS engine in Rust with flexible pipeline-based routing.

Topics

Resources

Contributing

Security policy

Stars

553 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages