Cloudflare Worker 反代 Google DoH
风险提示
本方法使用 Cloudflare Workers 的免费或付费资源做 DoH Relay。不要把免费额度理解成无限公共 DNS。 如果完整 DoH 地址被公开、收录或扫描滥用,可能快速消耗额度,并增加限流、滥用处置或账号 / 项目风控风险。Cloudflare 的额度和政策也可能变化,请以部署时官方规则为准。
这套方案只做一件事:
DoH 客户端
↓
Cloudflare Worker
↓
https://dns.google/dns-query不做:
- ECS 地区伪装;
- 香港 / 日本 / 新加坡强选;
- Cloudflare IP 优选;
- DNS 数据包重写;
- Steam HTTPS 代理;
- VPN;
- CDN 反代。
它不会代理 Steam 流量
DNS:
Monica → Worker → dns.googleSteam 业务:
Monica ─────────→ Steam / CDN因此 Worker 只参与 DNS 查询,不会把 Steam 登录出口直接改成 Cloudflare Worker 的 IP。
创建 Worker
整个过程可以直接在 Cloudflare 网页后台完成:
Workers & Pages
→ Create Worker
→ Edit code不需要 VPS、Docker、GCP、AWS 或其他服务器。
最简单的纯反代代码
下面这版保持“透明转发”的思路,同时将上游固定为 Google DoH,避免把 Worker 变成任意网站反代。
点击展开完整 Worker 代码
const UPSTREAM = "https://dns.google/dns-query";
export default {
async fetch(request, env) {
const incoming = new URL(request.url);
// 可选 TOKEN。
// 未设置 TOKEN:/dns-query
// 设置 TOKEN:/<TOKEN>/dns-query
const token = (env.TOKEN || "").trim();
const expectedPath = token
? `/${token}/dns-query`
: "/dns-query";
if (incoming.pathname !== expectedPath) {
return new Response("Not Found", { status: 404 });
}
if (request.method !== "GET" && request.method !== "POST") {
return new Response("Method Not Allowed", {
status: 405,
headers: { Allow: "GET, POST" },
});
}
const upstream = new URL(UPSTREAM);
upstream.search = incoming.search;
const proxyRequest = new Request(
upstream.toString(),
request
);
return fetch(proxyRequest);
},
};不设置 TOKEN
不配置 TOKEN 环境变量时:
https://你的Worker域名/dns-queryWorker 会反代:
https://dns.google/dns-queryRFC 8484 GET 的 ?dns=... 查询参数和 POST Body 会随请求转发。
使用 TOKEN
更推荐自用时设置一个随机、足够长的 TOKEN。
Cloudflare Worker:
Settings
→ Variables and Secrets
→ Add
→ TOKEN例如生成 32 字节以上随机值,而不是使用昵称、生日或简单单词。
设置后地址变成:
https://你的Worker域名/<TOKEN>/dns-query而裸:
/dns-query会返回 404。
TOKEN 的真实作用
TOKEN 主要是:
隐藏路径 + 降低被随手扫到和滥用的概率。
它不是完整身份认证系统。如果你把完整 URL 公开到论坛、GitHub、截图或日志里,拿到 URL 的人仍然可以使用。
为什么不做地区优选
对于这种 DNS Relay,手动设计“香港 / 日本 / 新加坡”会显著增加复杂度,而且:
DNS 响应快
≠
DNS 返回的 Steam CDN 一定最快Monica Steam 的动态网络优化也不会再把“DNS 返回了公网 IP”直接视为最终成功。缓存 miss 时,动态模式会继续验证返回候选是否能以原始 Steam hostname 完成 HTTPS / SNI / 证书校验。
因此这里更应该保持 Worker 简单透明,让 DNS Relay 只负责解析,不把 CDN 选择、HTTPS 验证和 Steam 业务代理揉成一套系统。
同时不建议直接访问所谓 Cloudflare 优选 IP。Worker 应通过正常 hostname 访问,由 Cloudflare 自己处理网络入口;上游 dns.google 也由 Google 自己处理其 Anycast / 网络调度。
不要公开成公共 DoH
公开地址可能导致:
- 第三方持续调用;
- 免费额度被快速消耗;
- Worker 可用性下降;
- 上游 Google 返回限流;
- Cloudflare 侧出现异常流量;
- 增加被限制或处置的风险。
因此推荐:
随机 TOKEN
+
仅自己使用
+
不要公开完整 URL添加到 Monica Steam
在 Monica Steam:
设置
→ 网络优化
→ 动态网络优化
→ 添加解析服务器输入完整 HTTPS DoH 地址,例如:
https://你的Worker域名/<TOKEN>/dns-queryMonica Steam 会根据 https:// 自动识别为 DoH,不需要再手动切换 DNS / DoH 类型。
保存后,它进入统一的动态解析来源列表,可以用于:
- 动态网络优化;
- 单独测速;
- 全部测速;
- 静态 Hosts 扫描。
是否需要 Bootstrap IP
对于 workers.dev 或绑定到 Cloudflare 的自定义域名,通常可以先不填写 Bootstrap,直接测试 DoH 是否可达。
如果你有明确可用的 DoH 服务端入口 IP,也可以在 Monica Steam 中填写多个 Bootstrap IPv4 / IPv6。Bootstrap 只用于帮助应用找到 DoH hostname:
- URL 仍然保持原 DoH hostname;
- TLS SNI 仍然使用 hostname;
- 证书仍必须匹配 hostname。
修改 Bootstrap 后,Monica Steam 会清理旧 DoH resolver 的连接状态,避免旧 TLS keep-alive 继续复用原地址。
WARNING
不要把任意 Cloudflare 边缘 IP 当成“Worker Bootstrap IP”硬填进去。Cloudflare 的边缘路由和证书服务依赖 hostname / Anycast 调度,错误固定 IP 反而可能降低可用性。
动态解析中的失败回退
即使 Worker 本身能返回 DNS 结果,也不代表该结果中的 Steam CDN IP 在当前网络一定可用。
动态网络优化会继续做轻量 HTTPS 验证:
Worker / Google DoH 返回候选
↓
验证目标 Steam hostname 的 HTTPS
↓
可用 → 短期缓存
不可用 → 尝试其他动态来源 / 候选
全部失败 → System DNS fallback(若开启)因此建议保留 System DNS fallback,尤其是在自建 DoH 仍处于测试阶段时。
隐私边界
采用这套链路后:
- Cloudflare Worker 能看到经过它的 DoH 请求;
- Google Public DNS 作为上游解析器处理 DNS 查询;
- Steam HTTPS 内容本身不会因为这套配置自动经过 Worker。
因此它属于 DNS Relay,不是 Steam Proxy。
更多网络优化原理与静态 Hosts 优先级请阅读:
