什么是DNS污染?

DNS 是 Domain Name Server 的意思,也就是域名解析服务的意思,DNS污染,又称为域名服务器缓存污染(DNS cache pollution)或者域名服务器快照侵害(DNS cache poisoning)。 DNS污染是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址。它是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。DNS污染是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。

上面的说明太复杂了,通俗点说就是:你访问 google.com 因为谷歌服务器在国外,你的DNS过去解析,肯定要走国际带宽的出口,然后就被GFW逮住了。因为DNS 走的是UDP协议,且UDP又没有什么校验机制,只管发送。所以这时候,GFW就假装成DNS服务器回应你了,而此时真正的请求可能正在被真正的DNS服务器处理,假的已经返回给你了,浏览器就选择了最快返回的那个地址去解析了。当然是一个不可用的地址啦。

什么是 DNS-over-HTTPS (DoH)

DNS over HTTPS(DoH)是谷歌推出的加密 DNS 服务,其意义在于以加密的HTTPS协议进行DNS解析请求,避免原始DNS协议中用户的DNS解析请求被窃听或者修改的问题来达到保护用户隐私的目的。Google及Mozilla基金会正在测试这一协议,作为其提高网络安全性的努力的一部分。(太复杂了,知道是这么个意思就行了,知道这个原理不是本文的重点)

开启 DNS-over-HTTPS (DoH)

1. Chrome
打开谷歌浏览器地址栏输入 chrome://flags/#dns-over-https ,然后在将该选项修改为 Enabled 再重启浏览器。浏览器部分修改完成后还需要修改操作系统的公共 DNS 服务器,转到 Windows 10 控制面板的网络和共享中心。然后点击左侧的更改适配器设置找到正在使用的网卡,右键点击网卡选择属性,然后在 IPv4 / IPv6 里配置DNS。

可选 DoH 服务器包括:

Google:
8.8.8.8 / 8.8.4.4 / 2001:4860:4860::8888 
CloudFlare:
1.1.1.1 / 1.0.0.1 / 2606:4700:4700::1111
OpenDNS:
9.9.9.9 / 9.9.9.11 / 2620:fe::fe / 2620:fe::9 / 2620:fe::11
DNSSB:
185.222.222.222 / 185.184.222.222 / 2a09:: / 2a09::1

基本上开启了 DoH 就能打开被 DNS 污染的网站,但是可能会出现丢包现象,请自行测试后使用。
2. Firefox
在浏览器地址栏输入 about:config ,点击“我了解此风险”。在新打开的页面顶部搜索框,搜索 network.trr ,双击 network.trr.mode ,将值从默认的0改为2(0表示关闭,2表示使用DoH,3表示任何情况下都使用DoH功能,5表示任何情况下都不使用DoH功能)双击 network.trr.uri ,将值改为支持DoH的未污染服务器地址,可以输入一些公共服务器如:

https://mozilla.cloudflare-dns.com/dns-query
https://1.1.1.1/dns-query
https://dns.google.com/experimental

此外,你还可以在地址栏输入about:networking选择DNS选项,查看DNS查询状态。