最近看到一些关于 DNS 泄露的科普,也在很久之前使用过 Cloudflare 的 DoH,但这次使用 Cloudflare 的 DoH 时发现不用工具直接没法用,觉得很惊讶,于是更觉得有必有使用 DoH 了。后来找到了阿里云的 DoH 服务,每个月免费 1000w 次 DoH 解析。对于一个人确实够用了,但是在我实际使用才发现,阿里云的 DoH 屏蔽了国外的一些网站,即使你使用了网络工具也是无法解析出来对应的地址的,(明明是 DoH,但也算是被污染了),后来找到了下面这个项目,让我眼前一亮。
开始之前#
首先你需要以下工具:
- 一个 Cloudflare 账号
- 一个域名并且已经托管于 Cloudflare(不是必要)
- 一个可以稳定访问 GitHub 的网络环境(也不是必要,可以使用这个 jsDelivr 的加速地址)
开始搭建#
首先打开本文开头提到的 GitHub 仓库,下载或全篇复制其中的 _worker.js。
打开你的 Cloudflare 创建一个 Worker,如果你是下载了js文件就选择「拖放文件」,如果你是通篇复制就选择「从 Hello World! 开始」。

自己对 Worker 进行命名,拖放文件将_worker.js上传再点击「部署」就直接完成了基本的步骤,通篇复制的还需要一步,部署后顶部右上角「编辑代码」,进入编辑器,将_worker.js的内容粘贴到worker.js再点击右上角部署即可。

其他配置#
到上一步其实属于你的自己的 DoH 就已经可以使用了,你的 DoH 地址就是在 Worker 概述右侧的workers.dev地址,如果你想使用自己的域名作为 DoH 地址,或者有其他需求,例如自定义查询的路径,而不使用统一的dns-query防止被盗用请继续向下看。

首先是如何添加自己的域名作为 DoH 地址。进入 Workers 顶部的「设置」在「域和路由」部分点击右侧的「添加」,选择「自定义域」,将期望的 DoH 地址填入点击「添加域」就行。
想要使用非统一的查询地址其实很简单,还是在 Worker 的「设置」中,添加一个环境变量,名称为TOKEN;类型为密钥或者文本都行;值就为你期望的 URL 地址,例如我的 DoH 地址为doh.xxx.com/hetong-dns,那么我的TOKEN就为hetong-dns。
当然,这个js还提供了一个伪装 DoH 的方式,防止别人无意间访问到这个地址。还是在环境变量,添加一个文本类型,名称为URL,值为nginx即可,当然你还可以使用URL302,值填想要跳转到的地址。
其它食用方法可以看看官方文档。
使用#
这里我就只演示在 Firefox 中使用,其他的使用方法可以参考阿里云的 DoH 使用手册。
在浏览器地址栏输入about:preferences#privacy回车,翻到最底部,找到「“基于 HTTPS 的 DNS”启用策略」,选择「最大保护」,提供方选择「自定义」,填入你的 DoH 地址,例如我的doh.xxx.com/hetong-dns就行了。

本文作者: 褐瞳さん
本文链接: https://www.hetong-re4per.com/posts/how-to-have-your-own-doh/
版权声明: 本文文字在未特别注明下默认使用 CC BY-NC-SA 4.0 许可协议。




