F**k GFW
什么是DNS
我们都知道,互联网上的主机之间依靠数字IP地址进行通讯,但人类对这种毫无意义的纯数字的IP很不敏感,因为太难记了。于是就有了 “域名” 这个概念,它由具有一定意义的英文字母组成,比如qq.com。现在问题来了,人类能读懂的域名机器不懂,机器懂的数字IP人类又记不住,那就需要一个媒介将两者的关系绑定起来,这个媒介就叫做DNS服务器。
当我们在浏览器输入qq.com的时候,电脑并不会立刻和腾讯服务器连接上,而是先询问DNS服务器(请注意,所有的DNS服务器自身一定是以数字IP示人),请告诉我qq.com的IP地址是多少,DNS服务器回答:125.39.52.26,有了这个IP,我们才能正常浏览qq.com。
GFW的污染
以上是大部分“正常国家”的互联网访问模式,但别忘了我们是有中国特色的社会主义国家,注定有些地方会比较有“特色”,这就是所谓的GFW. 而域名污染则是GFW其中的一个重要功能之一,那什么又是域名污染呢?当我们在浏览器输入google.com的时候,这个字符串首先会传递到你的宽带服务商为你指定的默认DNS服务器里,然后查询google.com对应的IP,GFW在这一步做了手脚,它会返回一个虚假的google.com的IP地址,导致你的浏览器无法正常与google服务器连接。
也许你曾经听说,DNS服务器好像是可以自定义设置的,那咱们不用宽带商提供给我的默认DNS服务器,而是自己设一台可信的DNS服务器不就得了,比如google公司本身也提供DNS服务,其DNS服务器地址是8.8.8.8,那我在Windows的网卡设置里将DNS服务器设为8.8.8.8不就万事大吉了?
由此可见指定境外dns来逃过污染在现阶段是不可行的
那咱们的方案又是如何做到防止域名污染的呢?
AdGuardHome + Doh + Dot
AdGuard Home是一款全网络广告拦截和反跟踪软件。安装后,它将保护您的所有家庭设备,您不再需要安装任何客户端软件。随着物联网和联网设备的兴起,控制整个网络环境变得越来越重要。
AdGuardHome 还支持大多数普通设备(路由器,终端)原生不支持的加密dns,如DOT DOH等
分流
根据dnsmasq-china-list的规则写了一个github action,自动同步它的新文件并建立AdGuard Home DNS规则。可以通过设置github自定义上游DOH/DOT服务器,默认国内走阿里,腾讯 DOH+DOT,国外走Cloudflare,Google等 DOH+DOT。默认合并了googlehost,applehost,和国内域名。
使用
0 安装AdGuardHome并按照习惯配置,这里略过,网上教程很多
1 下载 DNS.txt 并放到和AdGuard同目录下或者其他你喜欢的位置
2 打开你的AdGuardHome配置文件,并找到 upstream_dns_file: 这个项目,填上上一步下载的文件地址
保存并重启AdGuardHome,应该就能看到下图的效果了