V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jqknono
V2EX  ›  分享创造

利用免费的 Cloudflare Worker 代理 DoH 请求

  •  1
     
  •   jqknono · 14 天前 · 1113 次点击

    开源地址: https://github.com/jqknono/cloudflare-doh

    Cloudflare DoH 转发代理

    使用演示

    这是一个基于 Cloudflare Workers 的 DNS over HTTPS (DoH) 转发代理服务。本服务可以根据路径将请求转发到不同的 DoH 提供商,同时保留查询参数。

    功能特点

    • 基于路径的请求转发:根据请求路径将请求转发到对应的 DoH 服务提供商
    • 自定义路径映射:可以通过 Cloudflare Worker 的环境变量配置路径映射
    • 保留查询参数:转发时会保留原始请求中的查询参数
    • 轻量级实现:简单高效的实现方式,易于部署和维护

    工作原理

    该 Worker 根据请求的路径前缀确定转发目标,然后将请求转发到相应的 DoH 服务提供商。例如,当访问 doh.example.com/google/query-dns?name=example.com 时,该请求会被转发到 dns.google/dns-query?name=example.com

    默认路径映射

    Worker 内置了以下默认映射规则:

    • /google/query-dnsdns.google/dns-query( Google 的 DoH 服务)
    • /cloudflare/query-dnsone.one.one.one/dns-query( Cloudflare 的 DoH 服务)

    配置说明

    基础配置

    Worker 可以使用默认配置直接部署使用。

    自定义配置

    可以在 Cloudflare Workers 控制台中添加名为 DOMAIN_MAPPINGS 的环境变量来自定义路径映射规则。该变量接受符合以下格式的 JSON 字符串:

    {
      "/path-prefix": {
        "targetDomain": "target.domain.com",
        "pathMapping": {
          "/source-path": "/target-path"
        }
      }
    }
    

    例如,若要添加对 Quad9 DoH 服务的支持,配置可能如下:

    {
      "/google": {
        "targetDomain": "dns.google",
        "pathMapping": {
          "/query-dns": "/dns-query"
        }
      },
      "/cloudflare": {
        "targetDomain": "one.one.one.one",
        "pathMapping": {
          "/query-dns": "/dns-query"
        }
      },
      "/quad9": {
        "targetDomain": "dns.quad9.net",
        "pathMapping": {
          "/query-dns": "/dns-query"
        }
      }
    }
    

    部署方法

    方法一:使用 Cloudflare Workers

    1. 登录到 Cloudflare 控制台
    2. 进入 Workers and Pages, 点击"创建"
    3. 选择 Worker, 输入服务名称并选择"Hello World"模板
    4. _worker.js 中的代码粘贴到编辑器中
    5. (可选) 在"变量和机密"部分添加 DOMAIN_MAPPINGS 变量来自定义路径映射
    6. 点击"部署"按钮

    方法二:使用 Cloudflare Pages

    1. Fork 本库
    2. 登录到 Cloudflare 控制台
    3. 进入 Workers and Pages, 点击"创建"
    4. 选择 Pages, "连接到 Git",并连接到您的 Fork 库
    5. (可选)在"变量和机密"部分添加 DOMAIN_MAPPINGS 变量来自定义路径映射
    6. 点击"保存并部署"

    部署完成后,Cloudflare Pages 会自动检测 _worker.js 文件并将其用作 Worker 函数。

    使用示例

    假设您已将此 Worker 部署到 doh-proxy.workers.dev,您可以通过以下方式使用:

    • 使用 Google 的 DoH 服务:

      https://doh-proxy.workers.dev/google/query-dns?name=example.com
      
    • 使用 Cloudflare 的 DoH 服务:

      https://doh-proxy.workers.dev/cloudflare/query-dns?name=example.com
      

    注意事项

    • 该服务仅转发请求,不会修改或存储您的 DNS 查询内容
    • 请确保遵守各 DoH 服务提供商的使用政策
    • 此服务适合个人或小规模使用,对于大规模部署,请考虑各提供商的使用限制
    • Cloudflare 免费版用户每日的免费请求数量为 10w 次, 仅够个人使用, 注意避免暴漏 DoH 连接
    • 关闭 Cloudflare 代理可以大幅降低延迟, DoH 服务通常不需要代理

    许可协议

    本项目采用 MIT 许可协议。您可以自由地使用、修改和分发本代码,但需要在您的项目中包含原始许可证和版权声明。

    4 条回复    2025-03-14 09:49:38 +08:00
    oneisall8955
        1
    oneisall8955  
       14 天前
    打开网站,查询 dns 会慢很多吧,个人观感体验有影响吗?
    jqknono
        2
    jqknono  
    OP
       14 天前
    @oneisall8955 http3 协议下 500ms 上下, 具体要看 cloudflare 使用了哪个节点. 这是解决一些域名无正确解析的问题, 客户端最好做个分流.
    molezznet
        3
    molezznet  
       12 天前
    手机上用 doh 还不成熟, 系统只支持 dot
    jqknono
        4
    jqknono  
    OP
       12 天前
    @molezznet 是的, 安卓系统目前原生只支持 DoT, 主要是分流时使用.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:39 · PVG 00:39 · LAX 09:39 · JFK 12:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.