无服务器自建DOH全攻略:Cloudflare托管方案选型与实操
无服务器自建DOH全攻略:Cloudflare托管方案选型与实操
在这个网络隐私日益受到重视的时代,拥有一把属于自己的“网络钥匙”显得尤为重要。很多朋友都想折腾自建 DOH(DNS over HTTPS)服务,既能防止 DNS 劫持,又能避免被运营商记录浏览痕迹。
提到服务器,大家的脑海里可能立刻浮现出每月几美元的 VPS 账单。其实,如果你只是想搭建一个小众自用或小范围分享的 DOH 服务,根本不需要租用传统服务器。利用 Cloudflare 强大的无服务器生态,我们完全可以实现“白嫖”搭建,既稳定又不怕被墙。
今天,我们就来聊聊在 Cloudflare 上无服务器自建 DOH,到底该选哪个项目,以及如何从零开始落地。
为什么选择 Cloudflare 无服务器方案?
传统的 DOH 搭建方式通常需要一个 24 小时在线的 VPS,安装 Nginx、Go 或 Python 等环境,配置证书,不仅成本高,维护起来也挺麻烦。
而 Cloudflare 的无服务器架构主要有两大优势:
- 零成本或低成本:Cloudflare Workers 和 Pages 都有非常慷慨的免费额度。对于个人或小团队使用,几乎不可能跑超。
- 全球边缘节点:你的 DOH 服务实际上运行在 Cloudflare 遍布全球的数百个边缘节点上。这意味着你的 DNS 解析延迟极低,无论你在哪里,响应速度都比单一节点的 VPS 快得多。
主流开源项目选型分析
GitHub 上有很多优秀的项目支持在 Cloudflare Workers 上运行 DOH。面对琳琅满目的仓库,该选哪一个呢?这里我为大家筛选并对比了几个最热门的方案。
1. Cloudflare DoH Worker (基于 Go)
这是一类比较传统的方案,主要利用 Go 语言编写,然后编译成 WebAssembly (Wasm) 在 Workers 环境中运行。
- 优点:性能最强,Go 语言的并发处理能力在处理大量 DNS 请求时表现优异。
- 缺点:配置相对繁琐,需要本地搭建 Go 环境进行编译,部署步骤较多。对于非技术人员来说,上手难度稍大。
- 适用场景:对性能有极高要求,愿意折腾编译环境的极客。
2. DoH-server (基于 Node.js/Workers)
这类项目通常直接使用 JavaScript 或 TypeScript 编写,专门针对 Cloudflare Workers 的 runtime 进行了优化。
- 优点:部署简单,通常只需要
npm install甚至直接复制粘贴代码到 Workers 编辑器即可。社区活跃度高,很多项目针对中文环境做了优化(如支持 DoH/DoH3 混合)。 - 缺点:在极端高并发下的性能略逊于 Wasm 方案,但对于个人使用完全富富有余。
- 适用场景:大多数普通用户,追求“一键部署”和快速见效。
3. 基于 Cloudflare Pages 的 Function 方案
这是目前最推荐的新风向。利用 Cloudflare Pages 的 Functions 功能,可以直接在项目中部署后端逻辑。
- 优点:不仅托管服务端代码,还能顺便托管一个漂亮的前端控制面板。支持 Git 集成,更新代码极其方便,支持自定义域名配置非常顺滑。
- 缺点:相比纯 Workers,部署概念稍微多了一层(涉及仓库概念)。
- 适用场景:既想要 DOH 服务,又想要一个美观的 Web 管理界面的用户。
手把手实操:推荐方案部署
综合考虑上手难度和功能完整性,我推荐大家使用 基于 Cloudflare Workers/Pages 的 JavaScript 方案(类似 cloudflare-doh-server 类项目)。下面以这类通用方案为例,讲讲核心配置步骤。
第一步:准备上游 DNS
你的 DOH 服务只是一个“转发器”,它本身不解析域名,而是把请求转发给上游的 DNS 服务器。
你可以选择:
- Cloudflare DNS:速度最快,支持 1.1.1.1,但隐私方面毕竟是人家的服务。
- Google DNS:老牌,稳定。
- AdGuard / NextDNS:自带广告过滤功能,推荐用于手机或电脑端直接使用,作为上游也不错。
- 自建权威 DNS:如果你有自己的域名服务。
第二步:获取 Cloudflare API Token
- 登录 Cloudflare Dashboard,进入 “My Profile”。
- 找到 “API Tokens”,点击 “Create Token”。
- 选择模板或自定义权限,为了保证 Workers 脚本能顺利编辑和部署,建议给予
Account - Cloudflare Workers - Edit权限。
第三步:部署代码 (以 Wrangler CLI 为例)
虽然 Web 界面也能操作,但我强烈建议安装官方 CLI 工具 Wrangler,这样管理起来更专业。
# 安装
npm install -g wrangler
# 登录
wrangler login
# 初始化项目 (找一个心仪的开源项目 clone 下来)
cd your-doh-project
npm install
# 发布
wrangler publish
``

*在移动端设置中使用自定义 DOH 地址*
如果你不想用命令行,也可以直接在 GitHub 上 Fork 一个喜欢的项目,然后在 Cloudflare Dashboard 中创建一个新的 Worker,直接将代码粘贴进去保存即可。
### 第四步:绑定自定义域名 (关键一步)
为了方便记忆和配置客户端,我们需要绑定自己的域名。
1. 在 Workers 设置中,点击 “Triggers” -> “Custom Domains”。
2. 输入你的子域名,例如 `doh.example.com`。
3. Cloudflare 会自动为你配置 SSL 证书。
现在,你的专属 DOH 地址就是 `https://doh.example.com/dns-query` 了。
## 进阶技巧与避坑指南
搞定了基础部署,再来聊聊一些进阶玩法和遇到问题的解决办法。
### 1. 如何实现分流?
很多朋友搭建 DOH 不仅是为了隐私,更是为了“分流”。你可以在 Worker 代码中修改逻辑,根据域名后缀(如 `.cn` 和 `.google.com`)将请求转发到不同的上游 DNS 服务器。
* **国内域名**:转发到国内 DNS(如阿里 DNS 223.5.5.5),解决国内网站打开慢的问题。
* **国外域名**:转发到 Cloudflare 或 Google,保证隐私和速度。
这需要你懂一点 JavaScript 逻辑去修改 `fetch` 的目标地址。
### 2. 防 CC 与限流
虽然 Cloudflare 自身有很强的防攻击能力,但如果不希望你的 DOH 被人滥用作为“公共 DNS”,建议在代码中加入简单的 Token 验证。
例如,在 Header 中增加一个 `Authorization: Bearer your-secret-token` 字段,只有客户端携带了正确的 Token 才能解析。这能有效防止羊毛党薅爆你的免费额度。
### 3. 遇到 522/523 错误怎么办?
如果你在某些网络环境下访问不通,出现 52x 错误,通常是因为 Cloudflare 的源站(也就是 Worker 脚本)响应超时。
* **排查**:检查你的上游 DNS 是否可达。如果你在国内 VPS 上自建了 DNS 作为上游,但在 Cloudflare Worker(国外节点)访问它,可能会有连通性问题。
* **解决**:上游 DNS 尽量选择公共的、全球通用的服务(如 1.1.1.1),或者使用支持 DoH 的上游,Worker 侧直接发起 HTTPS 请求会更稳定。
### 4. 客户端怎么配置?
搭好后得用起来。在手机或电脑上配置非常简单:
* **Android 9+**:进入“网络和互联网”->“私人 DNS”,选择“私人 DNS 提供商主机名”,填入你的 `doh.example.com`。
* **iOS (macOS)**:下载支持 DOH 的描述文件。网上有很多工具可以将你的 DOH 地址转换为 iOS 配置描述文件,安装即可。
* **Chrome/Edge**:在设置中开启“安全 DNS”,填入 `https://doh.example.com/dns-query`。
### 5. 免费额度够用吗?
Cloudflare Workers 免费版每天有 100,000 次请求额度。对于 DOH 这种轻量级请求,普通人一个月手机加电脑产生的 DNS 查询量根本不会超过这个数。除非你公开分享给几千人一起用,否则完全不用担心跑超。
## 总结
抛弃沉重的 VPS,拥抱 Cloudflare 无服务器架构,是自建 DOH 的最佳入门路径。它不仅降低了技术门槛,更降低了金钱成本。
如果你是第一次尝试,建议先从 **JavaScript 版本的 Worker 项目** 入手,直接粘贴代码,跑通 Hello World,再慢慢研究代码修改实现分流逻辑。
拥有一个完全自己掌控、速度快且不用花钱的 DNS 服务,这种安全感,懂的自然懂。快去试试吧!
评论已关闭