TheGreatAzizi/Secure-DNS-over-HTTPS-Cloudflare-Worker

GitHub: TheGreatAzizi/Secure-DNS-over-HTTPS-Cloudflare-Worker

部署于 Cloudflare Workers 的自建 DNS over HTTPS 解析器,通过并行竞速上游 resolver 提供快速、加密的 DNS 查询服务,帮助用户绕过 DNS 污染与运营商监控。

Stars: 168 | Forks: 22

# 🛡️ 安全 DNS over HTTPS (DoH) V2.2.0 ### **一个具备全池模式、解析器配置、更安全验证和并行竞速的 Cloudflare Worker DoH 解析器** [![Cloudflare Workers](https://img.shields.io/badge/Platform-Cloudflare_Workers-F38020?logo=cloudflare)](https://workers.cloudflare.com) [![架构](https://img.shields.io/badge/Architecture-Parallel_Racing_v7.0-emerald)](https://github.com/TheGreatAzizi/Secure-DNS-over-HTTPS-Cloudflare-Worker) [![安全性](https://img.shields.io/badge/Privacy-DNS_Encryption-teal)](https://x.com/the_azzi) [![界面](https://img.shields.io/badge/UI-English_Persian_Chinese-0ea5e9)](https://github.com/TheGreatAzizi/Secure-DNS-over-HTTPS-Cloudflare-Worker) [![中文](https://img.shields.io/badge/Readme-中文-red)](./README-Zh.md) [![波斯语](https://img.shields.io/badge/Readme-Farsi-green)](./README-Fa.md) ![Repository Views](https://komarev.com/ghpvc/?username=TheGreatAzizi&repo=Secure-DNS-over-HTTPS-Cloudflare-Worker&color=red) 一个高性能的 Cloudflare Worker,提供一个带有内置多语言仪表板的**自定义 DNS-over-HTTPS endpoint**。版本 **2.2.0** 保留了原有的视觉设计,同时升级了后端,包括更安全的请求验证、有界的内存使用、upstream 超时、resolver 评分,以及一个新的**默认全池模式**。 **演示:** [dns.theazizi.ir](https://dns.theazizi.ir) **默认 Endpoint:** `https://dns.theazizi.ir/dns-query` ## ✨ V2.2.0 的新功能 本 README 是针对 Worker **版本 2.2.0** 更新的。 关键的后端更改: - `DEFAULT_PROFILE: 'all'` - `/dns-query` 默认使用完整的 resolver 池 - 可选的配置:`default`、`security`、`family`、`adblock`、`dns64` - 安全的 GET base64url 解码 - Method/content-type/body-size 验证 - DNS 数据包验证:要求必须且仅有一个 DNS question - 使用 `AbortController` 为每个 upstream 设置超时 - `RACE_COUNT: 4` - 有界的内存内 cache 和 throttle 映射 - SHA-256 cache 键 - 针对从 host 派生的 endpoint,进行更安全的 HTML 转义 - 使用 Clipboard API 回退的更简洁的 UI JS - 更准确的隐私/安全措辞 ## ⚠ 重要通知 ### 1. Cloudflare Worker 子域可能会被过滤 默认的 Cloudflare Worker 域名(`*.workers.dev`)在某些网络环境中可能会被过滤或不可靠。为获得最佳效果,请将 Worker 绑定到一个**自定义域名**,例如: ``` dns.yourdomain.com ``` 在 Cloudflare DNS 中,确保该域名已启用橙色云朵图标进行 **Proxied**。 ### 2. 仅提供 DNS 服务,不是 VPN 此服务在客户端和您的 Worker endpoint 之间**加密 DNS 查询**。它**不会**更改您的公网 IP 地址,也**不会**隐藏您连接到的目标 IP。 要进行完整的流量隧道传输或 IP 掩码,请将其与 VPN、proxy、v2rayN、Hiddify、Nekoray、Clash 或其他隧道传输工具结合使用。 ### 3. 能绕过与不能绕过的限制 此服务可以帮助解决 DNS 污染、DNS 劫持、ISP DNS 操纵以及 DNS 层面的屏蔽。 它不保证能绕过 IP 屏蔽、SNI 过滤、TLS/HTTPS 屏蔽、QUIC 屏蔽、DPI 或网络级别的限速。 ## 🚀 架构:并行竞速引擎 传统的 DoH 服务通常依赖于单个 resolver。如果该提供商速度慢、被屏蔽或不可靠,整个服务就会变慢。此 Worker 使用了竞速引擎: - **Resolver 竞速:** 对于每次 DNS 查询,Worker 会选择评分最高的 upstream resolver。 - **并发请求:** 它会同时对多个 upstream 发起竞速请求。 - **最快有效响应获胜:** 第一个有效的 DNS 响应将被返回给用户。 - **自愈评分:** 成功的 resolver 会增加评分。失败或超时的 resolver 会扣除评分。 - **超时保护:** 响应缓慢的 upstream 会通过 `AbortController` 被中止。 - **安全 Cache:** 频繁请求的记录可以从有界的内存 cache 中提供。 重要常量: ``` DEFAULT_PROFILE: 'all' CACHE_TTL_SECONDS: 300 MAX_CACHE_ENTRIES: 5000 MAX_THROTTLE_ENTRIES: 20000 MAX_DNS_MESSAGE_BYTES: 4096 RATE_LIMIT_MAX_REQUESTS: 250 UPSTREAM_TIMEOUT_MS: 1800 RACE_COUNT: 4 ``` ## 🌐 Endpoint 和配置 ### 默认的全池 Endpoint ``` https://dns.theazizi.ir/dns-query ``` 默认 endpoint 使用: ``` DEFAULT_PROFILE: 'all' ``` 这意味着 `/dns-query` 使用完整的 resolver 池,而无需 query 参数。 ### 可选的配置 Endpoint ``` https://dns.theazizi.ir/dns-query?profile=default https://dns.theazizi.ir/dns-query?profile=security https://dns.theazizi.ir/dns-query?profile=family https://dns.theazizi.ir/dns-query?profile=adblock https://dns.theazizi.ir/dns-query?profile=dns64 ``` | 配置 | 用途 | |---|---| | `all` | 完整的混合 resolver 池。这是默认模式。 | | `default` | 平衡的公共 resolver,不混合 family/adblock/DNS64 策略。 | | `security` | 专注于安全的 resolver,具备恶意软件/威胁过滤功能。 | | `family` | 适合家庭安全过滤的 resolver。 | | `adblock` | 可屏蔽广告/追踪器的 resolver。 | | `dns64` | 适用于仅使用 IPv6/NAT64 网络的 DNS64 resolver。 | ## 📋 功能 - **✅ Cloudflare Worker 原生:** 完全运行在 Cloudflare Workers 上。 - **✅ 完整的 Resolver 池:** 包含大量的 DoH upstream。 - **✅ 默认常规查询:** `/dns-query` 默认使用完整的 resolver 池。 - **✅ 可选的分离配置:** 需要时可选择特定策略的 resolver 组。 - **✅ GET 和 POST DoH:** 支持标准的 DoH 请求方法。 - **✅ 更安全的 GET base64url 处理:** 拒绝无效的 GET query 数据。 - **✅ DNS 查询验证:** 验证消息大小、查询/响应标志位、QDCOUNT 和 question 格式。 - **✅ Upstream 验证:** 验证 DNS 响应 ID 和响应标志位。 - **✅ Resolver 评分:** 奖励健康的 resolver,并惩罚失败或超时的 resolver。 - **✅ 有界的 Cache 和 Throttle 映射:** 降低内存增长风险。 - **✅ 速率限制:** 基本的每 IP 250 个请求/分钟的限制。 - **✅ 多语言仪表板:** 支持英文、波斯文和中文界面。 - **✅ 健康检查 Endpoint:** `/health` 返回 resolver 评分和 runtime 状态。 ## 📖 部署 1. 创建一个新的 Cloudflare Worker。 2. 粘贴 `worker.js` 代码。 3. 部署 Worker。 4. 从 `Settings -> Domains & Routes` 添加自定义域名。 5. 在 Cloudflare DNS 中,确保该域名已 **Proxied**。 6. 使用您的 DoH endpoint: ``` https://dns.yourdomain.com/dns-query ``` ## 🔧 设置指南 ### Chrome / Edge / Brave 1. 前往 `Settings -> Privacy and security -> Security`。 2. 启用 **Use Secure DNS**。 3. 选择 **Custom**。 4. 粘贴您的 endpoint: ``` https://dns.yourdomain.com/dns-query ``` 如果浏览器提示提供商无效,请使用 DoH GET 请求测试 endpoint。即使 Worker 本身运行正常,某些网络或浏览器验证流程也可能会失败。 ### Firefox 1. 打开 `Settings -> Privacy & Security`。 2. 找到 **DNS over HTTPS**。 3. 选择 **Max Protection** 或 **Custom**。 4. 粘贴您的 DoH endpoint。 ### Android / iOS Android 原生 Private DNS 需要 **DoT**,而不是完整的 DoH URL。对于此 Worker,请使用支持自定义 DoH 的客户端: - Intra - RethinkDNS - Firefox Mobile - Brave Mobile ### Windows Windows 原生 DNS 设置通常不接受像此 Worker endpoint 一样的完整 DoH URL。推荐的选项: - 浏览器级别的 Secure DNS - YogaDNS - dnscrypt-proxy - v2rayN/Xray DNS 配置 - 任何支持自定义 DoH URL 的客户端 ## 🧪 快速测试 一个健康的 DoH GET 请求应该返回: ``` HTTP 200 Content-Type: application/dns-message ``` 响应可能会包含以下标头: ``` x-cache: HIT / MISS x-profile: all x-winner: x-winner-lat: ``` ## 🧩 关于 YouTube 及类似服务的说明 YouTube 依赖于多个域名,例如: ``` youtube.com www.youtube.com youtubei.googleapis.com youtube.googleapis.com googlevideo.com ytimg.com i.ytimg.com ggpht.com ``` 如果 DNS 查询解析正确,但网站仍然无法加载,说明网络可能屏蔽的不止是 DNS。在这种情况下,请使用基于 proxy/VPN/TUN 的客户端以进行完整的流量隧道传输。 ## 👤 致谢与链接 开发者:**TheGreatAzizi** Twitter/X: [@the_azzi](https://x.com/the_azzi)
标签:DNS, DNS over HTTPS, Docker 部署, Serverless, 数据可视化, 程序员工具, 网络基础设施, 网络安全, 网络运维, 自定义脚本, 隐私保护