Skip to content

svenshi/oxidns

Repository files navigation

OxiDNS Banner

oxidns downloads Rust CI WebUI CI

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

OxiDNS

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

OxiDNS 是一个使用 Rust 构建的现代 DNS 引擎,受 mosdns 启发,但不止于规则分流。

它关注的是 DNS 查询在真实网络环境中的完整生命周期:接入、匹配、缓存、转发、回退、改写、本地应答与系统联动,并内置查询记录、Prometheus 指标采集和实时日志能力。

OxiDNS 的核心不是“提供更多开关”,而是提供一套清晰、可组合、可调试的策略管线,让你能够用声明式配置描述复杂 DNS 行为。

server -> DnsContext -> matcher / executor / provider -> upstream

项目仍在持续开发中,适合需要精细化控制 DNS 行为,并愿意理解其策略模型的用户。


为什么是 OxiDNS

DNS 在复杂网络里往往不只是“查询一个域名”。

你可能需要:

  • 根据域名、客户端、查询类型、响应 IP、返回码选择不同上游
  • 为不同设备、网段或场景应用不同策略
  • 在多个上游之间并发、回退、兜底或按结果决策
  • 对响应进行 TTL 调整、ECS 处理、重写或本地应答
  • 将 DNS 结果同步到 ipsetnftset 或 MikroTik RouterOS
  • 记录查询过程,并通过日志、查询记录和 Prometheus 插件指标理解系统状态
  • 在不中断服务的情况下热更新配置、规则和 Provider

OxiDNS 为这些场景提供的是一套统一的编排模型,而不是分散的功能补丁。


设计原则

可组合

OxiDNS 将 DNS 处理过程拆分为 matcherexecutorprovidersequence

每个组件只负责一类明确职责,再通过管线组合成完整策略。

可调试

DNS 策略一旦复杂,最重要的问题不是“能不能跑”,而是“为什么这样跑”。

OxiDNS 提供查询记录(query_recorder)、查询摘要统计(query_summary)、Prometheus 插件指标(metrics_collector)、实时结构化日志和配置校验。用户可以明确了解一次查询经过了哪些匹配、执行了哪些动作、选择了哪个上游,以及为什么进入回退路径。

可演进

OxiDNS 面向长期运行的自建网络环境设计。

它支持全量热重载、Provider 级热重载、独立构建的 WebUI 托管,并保留面向插件化和运维能力继续演进的空间。

可控

OxiDNS 不试图替你隐藏复杂性。

它更适合希望明确掌控 DNS 行为的用户,而不是只想要一个一键安装面板的用户。


核心能力

类别 能力
协议 UDP、TCP、DoT、DoQ、DoH
策略模型 sequencematcherexecutorprovider
执行器 forwardcachefallbackhostsarbitraryredirectecs_handlerttlip_selectordownloadupgradereloadreload_providerscripthttp_requestlearn_domainquery_summaryquery_recordermetrics_collector
匹配器 qnamequestionqtypeqclassclient_ipresp_iprcoderate_limiter
数据集 domain_setdynamic_domain_setip_setgeoipgeositeadguard_rule
系统联动 ipsetnftsetros_address_listreverse_lookup
调试与运维 健康检查、配置校验、热重载、查询记录、Prometheus 插件指标、实时日志
部署能力 多平台构建、Debian 包、独立 WebUI 托管、服务化安装

适合的使用场景

OxiDNS 适合部署在需要长期运行、可调试、可扩展的 DNS 环境中。

典型场景包括:

  • 家庭网关、旁路由、OpenWrt、NAS、Homelab
  • 多上游并发查询、主备回退、协议混合接入
  • 基于域名、客户端、响应结果的精细化策略路由
  • DNS 结果驱动的 ipset / nftset / MikroTik 地址列表同步
  • 广告过滤、域名分流、本地覆盖、双栈偏好和 ECS 控制
  • 自建可控、可调试的 DNS 基础设施
  • 需要通过同一管理端口托管独立 WebUI 的轻量部署

不适合的场景

OxiDNS 不是一个面向所有人的一键 DNS 面板。

如果你主要需要:

  • 简单、开箱即用的家庭广告过滤
  • 完整的图形化 DNS 管理体验
  • 权威 DNS 托管服务
  • Kubernetes Service Discovery 插件框架
  • 不需要理解配置模型的即装即用工具

那么 AdGuard Home、Pi-hole、Technitium DNS Server 或 CoreDNS 可能更合适。

OxiDNS 更适合希望以配置方式明确描述 DNS 行为,并愿意为控制力承担一定复杂度的用户。


与其他项目的关系

OxiDNS 不试图替代所有 DNS 工具:

项目 更适合的方向
AdGuard Home 开箱即用的家庭广告过滤和 DNS 管理
Pi-hole 简单、成熟、社区广泛的家庭 DNS 过滤
CoreDNS 云原生和服务发现插件框架
Technitium DNS Server 功能完整的通用 DNS 服务器
mosdns 灵活的 DNS 分流与策略处理
OxiDNS 高性能、可调试、可扩展的 DNS 策略编排引擎

下载

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

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

Windows 管理员 PowerShell:

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

默认情况下,Linux / macOS 会安装到 /opt/oxidns,在 /usr/local/bin 创建 oxidns 命令,并安装、启动系统服务。Windows 会安装到 %ProgramFiles%\OxiDNS,加入 Machine PATH,并安装、启动系统服务。仅需便携安装时,可设置 OXIDNS_INSTALL_SERVICE=0,详见快速开始。

卸载时默认保留 config.yaml

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

Windows 管理员 PowerShell:

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

如果安装时使用了 sudo 或自定义 OXIDNS_INSTALL_DIR,卸载时也请保持相同权限和目录变量。

如果你准备手动下载 GitHub Releases,可按系统选择:

系统 / 环境 推荐 release 文件
Linux x86_64 oxidns-x86_64-unknown-linux-musl.tar.gz
Linux ARM64 oxidns-aarch64-unknown-linux-musl.tar.gz
Debian / Ubuntu x86_64 服务安装 *_amd64.deb
Debian / Ubuntu ARM64 服务安装 *_arm64.deb
Alpine Linux x86_64 oxidns-x86_64-unknown-linux-musl.tar.gz
Alpine Linux ARM64 oxidns-aarch64-unknown-linux-musl.tar.gz
32 位 ARM Linux,如部分树莓派 oxidns-arm-unknown-linux-musleabihf.tar.gz
macOS Intel oxidns-x86_64-apple-darwin.tar.gz
macOS Apple Silicon oxidns-aarch64-apple-darwin.tar.gz
Windows x64 oxidns-x86_64-pc-windows-msvc.zip
Windows 32-bit oxidns-i686-pc-windows-msvc.zip
Windows ARM64 oxidns-aarch64-pc-windows-msvc.zip
FreeBSD x86_64 oxidns-x86_64-unknown-freebsd.tar.gz

Linux 下如果不确定兼容性,建议优先选择 musl 构建。

不确定当前系统和架构时,可执行:

uname -s && uname -m

Windows 可在 PowerShell 中执行:

(Get-CimInstance Win32_OperatingSystem).OSArchitecture

完整安装流程请参考 快速开始

按需裁剪

OxiDNS 支持通过 Cargo features 裁剪可选协议和插件。从源码构建时:

cargo build --release                                                  # 默认 = full
cargo build --release --no-default-features --features minimal         # 最小转发器
cargo build --release --no-default-features --features standard        # 家用 / 路由器

详见 自定义编译


文档


路线图

以下是当前规划中的开发方向,按顺序排列。详细说明请参考文档路线图

  1. 编译定制化:按功能模块拆分编译,用户 fork 后可自由组合插件,构建精简的定制版本,并通过自定义仓库实现自动更新
  2. IP 优选:对 DNS 响应中的多个 A/AAAA 地址并行测速,自动选出延迟最低的 IP 返回给客户端
  3. MikroTik 深度集成:新增从 RouterOS 拉取地址列表作为数据源,以及将本地 IP 集主动推送到 RouterOS 的能力
  4. OpenWrt 支持:通过 opkg 一键安装、服务自动托管,为 OpenWrt 用户提供原生部署体验
  5. WebUI 与指标增强:为各新增插件补充管理界面,扩展 Prometheus 指标覆盖范围

长期来看,计划探索 WebAssembly 插件和动态链接库插件两种扩展机制,支持第三方开发者独立开发和分发插件。


状态

OxiDNS 仍处于持续开发阶段。

当前版本适合高级用户、测试环境和自建网络场景试用。对于生产环境,请在充分理解配置、日志和回退策略后再部署。

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


免责声明

本项目按"现状"提供,不对其适用性、稳定性或安全性作出保证。

DNS 基础设施直接影响网络可用性、域名解析结果和访问行为。配置错误可能导致断网、DNS 泄漏或解析异常。在生产或关键环境中部署前,请充分理解配置模型、测试回退路径,并做好监控。

项目维护者不对因使用本软件造成的服务中断、数据损失或安全事件承担责任。使用者应自行确保部署和使用方式符合适用的法律法规及第三方服务条款。


社区交流

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

OxiDNS Telegram 群二维码

许可证

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

About

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

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors