DoT DoH 除了 DNSCrypt,你还可以了解一下更好的 DNS 加密方案

2018年11月02日 更新,切换到 DoT 一天后,所有 stubby 内置服务器运行异常缓慢,直到日常使用都难……只好放弃。

2018年11月01日 更新,使用了 5 天 DoH 后,由于目前提供此服务的服务器只有 1.1.1.1,这个地址在我这里被运营商屏蔽了。

 


 

三年前,我写了一篇文章《在 OS X 上 避免 DNS 泄露》来谈如何保护你的隐私,并避免 DNS 泄露,那时候主要用的技术是 dnscrypt——实际上后来我就放弃了这个方案,原因是公共服务器受干扰严重,配置复杂延迟高。现在三年过去了,我们来看看最新的 DoTDoH,实际上就是 DNS over TLSDNS over HTTPS

那些 DNS 加密方案

实际上我们早就已经谈过,DNS 是明文传输所有内容的,设计之初就没考虑安全这回事,甚至是抢答的,你问 A www.logcg.com 是哪个 IP 地址,A 还没来得及回复, B 抢答说 127.0.0.1 !于是,你就信了。

这也是如今 gfw 墙网站的常用手段,也是 DNS 污染的原理。总之,dnscrypt 出现了,但它使用了一个自定的协议,并配置需要互相交换密钥,这导致了很多麻烦。如今,又有了两个全新的 DNS 加密(显然也就反污染了),这次我们就来谈谈,他俩到底哪里不同。

DNS over TLS

TLS 加密实际上就是我们上网的 HTTPS 所用加密了,安全性得到了很好的保障——这东西如果失效了,那整个互联网估计也就完蛋了。

DoT 使用 853 端口,使用 TCP 进行传输——基本上可以理解为加密版本的普通 DNS 了。

现如今,DoT 已经有了相当成熟的客户端,使用 brew install stubby 即可安装,再使用 sudo brew services start stubby 就能启动了,stubby 推荐使用默认配置,已经集成了多个可信的 DoT 服务器。我这边测试查询速度为最慢 1 秒……是的,你还是需要一个前置的 DNS 缓存服务,比如 dnsmasq,这里我就直接用 Surge 充当了。

一些未来的疑惑

DoT 看起来很美妙,几乎是完成了我们对加密 DNS 的一切幻想,但有一点还是应当注意,在中国这样的国家,DoT 一旦流行起来,那么它对然不能再被污染,但却很容易被封禁——因为它有一个固定的独立端口,虽然别人不知道你在访问什么网站了,但却能够知道你在用 DoT ,干脆直接干扰你 TCP 包不就行了?

(当然,DoT 也是可以专门占用 443 端口就是了)

DNS over HTTPS

总之,混淆才是王道,虽然这样会让网管很头疼,但在严重审查的地区,还是值得一试的。尽管现在人们对于 DoH 的态度还颇有争议,但还是有很多互联网机构支持了它——直接使用 HTTP/2 或者 HTTPS 协议进行请求,这下你就很难专门把 DNS 流量单独分离出来进行干扰了。

尤其对于自建 DNS 服务器来说,甚至可以直接隐藏在网站之后!

要使用 DoH,使用 brew install cloudflare/cloudflare/cloudflared 即可安装,运行命令  sudo cloudflared proxy-dns 来临时启动它进行测试,你可以看到它使用了两个上游服务器:

待服务启动后就可以尝试查询,第一次测试的时候我遇到了大量明显的报错:

但结果还是正常返回了,第一次查询时间稳定在 300ms 以内,服务本身自带了缓存功能,第二次查询之类的自然就是 0ms 了。

测试成功后,需要给 cloudflared 进行配置,这样它才能以服务的形式自动启动:

你可以看到,在 /usr/local/etc/cloudflared/config.yml 文件中我们给了这两个默认的上游服务器,你也可以在这里添加更多。

总之,在创建好配置文件之后,我们再来执行命令将服务安装到系统当中:

现在,你就可以按 ctrl + c 停掉刚刚测试用的临时服务了,然后用命令启动系统服务: sudo launchctl start com.cloudflare.cloudflared

 

系统配置

现在,不论是 DoT 还是 DoH,我们都已经启动了(注意,这两者你只能同时启动一个,因为 dns 都会占用本地的 53 端口)你只需要配置系统的 dns 解析到 127.0.0.1 即可。

额外的内容

如果你和我一样在使用 Surge,那么你可能会发现在开启了 Enhance Mode 之后似乎出现了 DNS 环路的问题,导致查询结果为空……似乎是 DNS 服务和 Surge 互相抢答了。这里我们要配置 Surge 不使用自定义 DNS,转而使用系统设置中的 DNS:

Surge 中设置使用系统 DNS 而不是自定义

 

结论

就目前来看,在中国使用 DoT 要相对稳定,但速度慢一点,使用 DoH 速度快些但干扰严重——这也可能和 DoH 公共服务器还不是很多有关(毕竟很容易就给你干掉 IP 了),总之,这两种手段都是自建服务器绝佳的选择,简单、快捷,还很轻松。

行文仓促,我目前已经在使用 argo tunnel ,也就是 cloudflared 了,自带 DNS 缓存,及时不使用前置 DNS 缓存也能很好的运行,过段时间我会来重新编辑这篇文章并附上效果体验。(希望不会因为频繁访问 1.1.1.1 而被禁掉)

 

参考文献:

  1. https://github.com/getdnsapi/stubby
  2. https://developers.cloudflare.com/argo-tunnel/reference/service/

本文由 落格博客 原创撰写:落格博客 » DoT DoH 除了 DNSCrypt,你还可以了解一下更好的 DNS 加密方案

转载请保留出处和原文链接:https://www.logcg.com/archives/3127.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

  1. 请问博主自建的dot在安卓手机私人DNS里填入域名能直接使用吗?我自建的Adguard_Home,dot端口853,手机显示无法连接。

    1. dns 这种东西,链式请求没毛病,你都套一层也ok,不过那样意义不大,这三种都是dns的加密解决方案,你只要使用其中一种就足够了,三种套在一起用,也ok,不过就是加密冗余罢了,同一个请求,要请求三次,加密三次,你说慢不慢。

        1. 系统或者浏览器都有DNS缓存,只是缓存的时间上比较短罢了。
          你使用一个国际邮箱就能正确收到邮件了。(大概
          我的发信服务其实就是 foxmail aka qq

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注