DoH 代理
一键复制部署在 Cloudflare Worker 上的高性能 DNS over HTTPS (DoH) 服务。
核心特性
- 多节点竞速:同时向多个上游 DNS 发起请求,采用最快返回的结果(默认竞速 4 个节点)。
- 动态健康评分:根据上游节点的成功率、失败率和延迟动态调整分数,自动优先选择优质节点。
- 内存级缓存:内置 LRU 缓存机制,缓存有效 DNS 响应(默认 300 秒,最多 5000 条),降低上游请求压力。
- IP 限流保护:基于客户端 IP 的请求频率限制(默认 60 秒内最多 250 次),防止滥用。
- 多策略支持:内置多种 DNS 策略组(如去广告、家庭保护、安全防护等),可通过 URL 参数一键切换。
获取 DoH 服务地址
部署完成后,你的核心 DoH 接口地址为:
https://<你的Worker域名>/dns-query
示例:https://dns.example.com/dns-query 或 https://my-dns.my-account.workers.dev/dns-query
客户端配置指南
将上述 DoH 地址填入支持 DoH 协议的客户端中即可使用。
桌面浏览器
- Chrome / Edge:设置 -> 隐私和安全 -> 安全 -> 使用安全 DNS -> 选择“自定义” -> 填入 DoH 地址。
- Firefox:设置 -> 隐私与安全 -> DNS over HTTPS -> 启用并选择“自定义” -> 填入 DoH 地址。
操作系统
- Windows 11:设置 -> 网络和 Internet -> 选择当前网络 -> 编辑 DNS 服务器分配 -> 将加密类型改为“加密首选 (HTTPS)”或“仅加密” -> 填入 DoH 地址。
- macOS / iOS / Android:系统原生网络设置通常不直接支持输入 DoH URL。
- iOS/macOS:推荐使用 DNSCloak、NextDNS 或 Naka 等 App。
- Android:推荐使用 Intra、Nebulo 或 DNS66 等 App(系统自带的“私人 DNS”仅支持 DoT 域名)。
路由器 / OpenWrt
如果你使用 smartdns、PassWall 或 koolproxy 等插件,可在其 DoH 设置项中填入此地址。
高级功能:Profile 策略切换
服务内置了多个上游 DNS 策略组。你可以通过在 URL 后添加 ?profile=名称 参数来切换不同的解析策略。
| Profile 名称 | 说明 | 完整 URL 示例 |
|---|---|---|
| all (默认) | 使用所有上游节点进行竞速,速度最快。 | https://<域名>/dns-query |
| default | 常规公共 DNS 节点池。 | https://<域名>/dns-query?profile=default |
| adblock | 拦截广告和追踪器(如 AdGuard)。 | https://<域名>/dns-query?profile=adblock |
| family | 拦截成人内容和恶意软件。 | https://<域名>/dns-query?profile=family |
| security | 仅拦截恶意软件、钓鱼网站等安全威胁。 | https://<域名>/dns-query?profile=security |
| dns64 | 用于 IPv6-only 网络环境解析 IPv4 地址。 | https://<域名>/dns-query?profile=dns64 |
注:在客户端配置时,直接将带有 ?profile=xxx 的完整 URL 填入即可。
监控与健康检查
服务提供了一个 /health 端点,用于查看当前 Worker 实例的运行状态和节点健康度。
访问地址:
https://<你的Worker域名>/health
返回 JSON 字段说明:
cacheEntries:当前 DNS 缓存条数。throttleEntries:当前限流记录条数。profiles:各策略组下上游节点的详细状态,包含:url:节点地址。score:当前健康分数(0-100,分数越高越优先被选中)。ok/fail/timeout:历史成功、失败、超时次数。lastLatencyMs:最近一次请求的延迟(毫秒)。lastError:最近一次的错误信息。
开发者测试
你可以使用 curl 命令行工具发送标准的 DoH GET 请求来测试服务是否正常工作。
以下命令用于查询 www.example.com 的 A 记录(DNS 报文已做 base64url 编码):
curl -H "Accept: application/dns-message" "https://<你的Worker域名>/dns-query?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB"
如果服务正常,将返回 HTTP 200 状态码以及二进制的 DNS 响应数据。