NiceLeeのBlog 用爱发电 bilibili~

使用CF-workers打造私人加密DNS

2021-08-22
nIceLee

阅读:


许多支持DoH加密公共DNS在国内基本无法使用。
在此,我们考虑使用CF workers进行转发,搭建个人使用的DoH服务。

2023/02/25更新

先不考虑速度,下面实现的实际上是DNS转发,最终实际上是以CF Worker的IP为基准返回的结果。

我们可以考虑Cloudflare的定制DNS(不是域名cloudflare-dns.com或者1.1.1.1,在国内会被卡)。

Cloudflare控制面板 -> Cloudflare Zero Trust -> Gateway -> DNS Locations

添加当前的ip对应的location,可以获得对应的ipv4/ipv6 DNS服务器以及DoH/DoT地址。

IPv4
172.64.36.1
172.64.36.2

IPv6
2a06:98c1:54::3:828a

DNS over HTTPS
https://xxx.cloudflare-gateway.com/dns-query

DNS over TLS
xxx.cloudflare-gateway.com

前言

DoH与普通DNS的比较

  • 普通DNS的传播是基于UDP的,其内容对转发者是透明的,故而消息容易伪造。
    具体可参考RFC1035

  • DoH(DNS over HTTPS), 即利用HTTPS协议建立通道传播DNS信息,其内容对转发者是保密的,故而有一定安全性。
    具体可参考RFC8484

  • 二者比较,仅仅是DNS报文由UDP改为了HTTPS传输。
    具体来说,假设DNS报文数据为发送data_query,接收data_answer,那么:

    • 普通DNS的UDP报文就是data_query去,data_answer
    • DoH则有两种方式:
      • 使用HTTP GET方法,在参数末尾加上base64后的数据,例如:
        https://cloudflare-dns.com/dns-query?dns={base64(data_query)}

      • 使用HTTP POST方法,同普通HTTP POST请求一样,直接上传data_query
      • 返回的数据均是data_answer

实现原理

  • 我们知道:
    • 像谷歌、Cloudflare这些公共DNS并不是停摆了,只是在某些区域无法使用罢了。
    • Cloudflare Workers部署的机器是可以流畅访问这些公共加密DNS的。
    • 我们是可以通过Cloudflare Workers提供的域名,或者自己的域名访问Cloudflare Workers的。
    • DoH和访问网页类似,都是进行一个HTTPS请求
    • Cloudflare Workers免费版每天有 10 万次免费请求,对于个人通常足够。
  • 我们只需要使用Cloudflare Workers代理HTTP请求即可。

具体实现

比较简单,源代码可以使用tina-hello/doh-cf-workers
你可以直接点击ReadMe里面的Deploy with Workers图标,一步一步来。
或者,也可以:

  1. 首页:https://workers.cloudflare.com
  2. 注册,登入,Start building,取一个子域名,Create a Worker。
  3. 复制 index.js 到左侧代码框,Save and deploy。如果正常,右侧应显示首页。
  4. 收藏地址框中的 https://xxxx.子域名.workers.dev,以后可直接访问。

其它

  • 服务默认使用的是Cloudflare的公共DNS,如有需要,可对index.js第8行进行替换。
    公共DNS可参考这篇文章
  • 如果你有自定义域名托管在Cloudflare,你可以将 如果你想使用的链接是 https://xxx.com/aaaaa/dns-query?dns=xxxxx 在添加路由时,建议匹配xxx.com/aaaaa/dns-query*


相似文章

内容
隐藏