使用Cloudflare Workers搭建反代Google DoH

2025年3月7日 20:43:01

转自Nodeseek--使用Workers搭建反代加密DNS,仅作备份

代码如下

export default {
  async fetch(request) {
    let url = new URL(request.url);

    // 仅允许 /doh, /dns-query特征明显,换成别的
    if (url.pathname !== "/doh") {
      return new Response("Not Found", { status: 404 });
    }

    // 目标 DoH 服务器
    let targetURL = "https://dns.google/dns-query" + url.search;

    let modifiedRequest = new Request(targetURL, {
      method: request.method,
      headers: new Headers(request.headers),
      body: request.body,
      redirect: "follow"
    });

    // 设置正确的 Host 头,避免 Google 拒绝请求
    modifiedRequest.headers.set("Host", "dns.google");
    modifiedRequest.headers.set("Accept", "application/dns-message");

    let response = await fetch(modifiedRequest);

    let newHeaders = new Headers(response.headers);
    newHeaders.set("Access-Control-Allow-Origin", "*"); // 允许 CORS

    return new Response(response.body, {
      status: response.status,
      headers: newHeaders
    });
  }
}

最好将默认路径/dns-query换成别的,或许更不容易被阻断

部署之后绑定自定域名,使用https://your.domain/doh即可进行加密DNS查询