无服务器自建DOH全攻略:Cloudflare托管方案选型与实操

在这个网络隐私日益受到重视的时代,拥有一把属于自己的“网络钥匙”显得尤为重要。很多朋友都想折腾自建 DOH(DNS over HTTPS)服务,既能防止 DNS 劫持,又能避免被运营商记录浏览痕迹。

提到服务器,大家的脑海里可能立刻浮现出每月几美元的 VPS 账单。其实,如果你只是想搭建一个小众自用或小范围分享的 DOH 服务,根本不需要租用传统服务器。利用 Cloudflare 强大的无服务器生态,我们完全可以实现“白嫖”搭建,既稳定又不怕被墙。

今天,我们就来聊聊在 Cloudflare 上无服务器自建 DOH,到底该选哪个项目,以及如何从零开始落地。

为什么选择 Cloudflare 无服务器方案?

传统的 DOH 搭建方式通常需要一个 24 小时在线的 VPS,安装 Nginx、Go 或 Python 等环境,配置证书,不仅成本高,维护起来也挺麻烦。

而 Cloudflare 的无服务器架构主要有两大优势:

  1. 零成本或低成本:Cloudflare Workers 和 Pages 都有非常慷慨的免费额度。对于个人或小团队使用,几乎不可能跑超。
  2. 全球边缘节点:你的 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

  1. 登录 Cloudflare Dashboard,进入 “My Profile”。
  2. 找到 “API Tokens”,点击 “Create Token”。
  3. 选择模板或自定义权限,为了保证 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
``

![Android 和 iOS 手动配置 DOH 界面示意图](/media-load/019f0d0b-f91d-7756-afc0-05eb08f947c2)

*在移动端设置中使用自定义 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 服务,这种安全感,懂的自然懂。快去试试吧!

标签: none

评论已关闭