打造您专属的高效DNS解析器:RethinkDNS
RethinkDNS: 自托管的 DNS 解析器
RethinkDNS 是一个使用 serverless-dns 构建的自托管 DNS 解析器,采用类似 Pi-Hole 的设计。它是一个无服务器的、可阻止内容的 DNS 解析器,支持 DNS-over-HTTPS (DoH) 和 DNS-over-TLS (DoT) 协议,适用于 Cloudflare Workers、Deno Deploy、Fastly 和 Fly.io 等云平台。使用这些服务的免费层足以满足 10 到 20 台设备的 DNS 流量需求。
RethinkDNS 的工作原理
RethinkDNS 在多个云平台上运行 serverless-dns,以下是主要的部署信息:
| 云平台 | 服务器位置 | 协议 | 域名 | 使用说明 |
|---|---|---|---|---|
| ⛅ Cloudflare Workers | 280+ Ping 检查 | DoH | sky.rethinkdns.com | 配置说明 |
| 🦕 Deno Deploy | 30+ Ping 检查 | DoH | 私有测试版 | |
| ⏱️ Fastly Compute@Edge | 80+ Ping 检查 | DoH | 私有测试版 | |
| 🪂 Fly.io | 30+ Ping 检查 | DoH 和 DoT | max.rethinkdns.com | 配置说明 |
在服务器端处理请求的时间为 0 毫秒到 2 毫秒(中位数),各区域和网络间的端到端延迟在 10 毫秒到 30 毫秒(中位数)。

Rethink DNS 解析器在 Fly.io 上得到了 FOSS United 的支持。
自托管配置
在 Cloudflare Workers 上设置 serverless-dns 是最简单的方式:
以下是根据不同平台的分步指导:
| 平台 | 难度 | 运行时 | 文档 |
|---|---|---|---|
| ⛅ Cloudflare | 简单 | v8 Isolates | 在 Cloudflare Workers 上托管 |
| 🦕 Deno.com | 中等 | Deno Isolates | 在 Deno.com 上托管 |
| ⏱️ Fastly Compute@Edge | 简单 | Fastly JS | 在 Fastly Compute@Edge 上托管 |
| 🪂 Fly.io | 难 | Node MicroVM | 在 Fly.io 上托管 |
要设置阻止列表,只需在浏览器中访问 https://.tld/configure(它应该加载类似于 RethinkDNS 的配置页面 的内容)。
如果需要帮助或需要支持,请随时 打开问题 或 提交补丁。
开发指南
# 进入工作目录
cd /my/work/dir# 克隆这个仓库
git clone https://github.com/serverless-dns/serverless-dns.git# 进入 serverless-dns 目录
cd ./serverless-dns
Node.js 环境设置
如果需要,可通过 nvm 安装 Node v22+:
# 安装 Node v22+,如有需要
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install --lts# 下载依赖
npm i# (可选)更新依赖
npm update# 在 Node 上运行 serverless-dns
./run n
Deno 环境设置
# 安装 Deno v2+
curl -fsSL https://deno.land/install.sh | sh# 在 Deno 上运行 serverless-dns
./run d
Fastly 环境设置
# 安装 Node v22+,如有需要
# 安装 Fastly CLI
# https://developer.fastly.com/learning/tools/cli# 在 Fastly Compute@Edge 上运行 serverless-dns
./run f
Cloudflare Workers 设置
# 安装 Cloudflare Workers (cli) aka Wrangler
npm i wrangler --save-dev# 在 Cloudflare Workers (cli) 上运行 serverless-dns
./run w
环境变量配置
在 Cloudflare Workers 上配置环境变量以调整默认值,具体请参考 env.js。
请求流程
请求/响应流程如下:
- 客户端 <->
src/server-[node|workers|deno]<->doh.js<->plugin.js
身份验证
serverless-dns 支持使用一个 字母数字 的承载令牌进行身份验证,支持 DoH 和 DoT 协议。配置步骤较为复杂,主要通过设置环境变量实现,具体请参考官方文档。
日志与分析
serverless-dns 可以设置为通过 Cloudflare 的 Logpush 上传日志,具体设置步骤在官方文档中有详细说明。
阻止列表
serverless-dns 利用压缩的 Succinct Radix Trie 存储超过 190 个阻止列表,按周生成并托管在 Cloudflare R2 上。它可支持大约 1300 万个条目(截至2023年1月)。
对于希望使用自托管 DNS 的用户,RethinkDNS 提供了一种资源节省、高效、安全的解决方案。如果您对该项目感兴趣或想要提供反馈,请访问 RethinkDNS GitHub 页面。
同类项目介绍
除了 RethinkDNS,市场上还有其他一些开放源代码的 DNS 解析器项目,例如:
- Pi-hole: 这是一个强大的网络广告拦截器,旨在为家庭网络提供 DNS 解析服务,同时具有广告拦截功能。
- AdGuard Home: 提供广告拦截和隐私保护服务,支持各种设备,可以轻松配置和管理。
- Unbound: 是一个高性能的递归 DNS 解析器,支持 DNSSEC 和 DoH,适用于更复杂的 DNS 需求。
这些项目各有千秋,可以根据不同的需求来选择使用。
