什么是DNS?

域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。[维基百科]也就是说DNS负责将域名”翻译“成IP地址。

下面我们来看看常见DNS查询方式及协议

主要DNS查询方式

方法名称 端口 协议号 是否加密
普通查询 53 UDP 否
DNS-over-HTTPS 443 TCP 是
DNS-over-TLS 853 TCP 是
DNS-over-QUIC(实验性) 未知 QUIC 是

什么是DNS污染?

网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的网域服务器(笔者注:也称为权威DNS服务器),但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。但是一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的计算机导引往错误的服务器或服务器的网址。[百度百科]

举个栗子:我找同学A抄作业,但是同学A的作业结果不正确。但是同学A为了方便,把他的作业的结果存起来,谁要就把结果给要抄他作业的人,这样拿到A同学作业的人得到的都是错误的答案。也就是说,如果我们使用的DNS服务器本身就存在污染问题,我们可能拿到的永远都是错误的域名解析结果(IP地址)。

另外,由于黑客技术的发展。而且普通的DNS查询都是基于UDP这种明文流量,从而产生出很多问题。比如有DNS污染,DNS劫持,隐私泄露,DNS抢答等。DNSSEC技术为DNS解析服务提供了解析数据验证机制,理论上可以有效抵御劫持。

AdGuardHome安装及使用(Windows)

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。[AdGuardHome主页]

AdGuardHome可以使用加密协议查询DNS并返回结果,也可以使用DNS重写达到去广告,禁止访问特定网站等。此外,它也可以为未安装AdGuardHome的设备提供解析服务。

AdGuardHome下载地址:https://github.com/AdguardTeam/AdGuardHome/releases

推荐GitHub下载加速镜像网站:https://ghproxy.com/

常见的,我们选择X86架构软件:AdGuardHome_windows_amd64.zip,解压并放置在你需要安装这个软件的位置。记下文件路径。

使用管理员权限打开电脑上的Windows PowerShell。输入以下命令 :

1
2
3
4
#这是一行注释
cd E:\AdGuardHome\ #这取决于你的安装路径,再比如cd C:\DNSProxy\
.\AdGuardHome.exe -s install #安装软件并设置开机自启动
#.\AdGuardHome.exe -s uninstall #卸载命令

Linux(Ubuntu)安装简要说明

相关指令

1
2
3
4
 systemctl stop systemd-resolved.service  #关闭系统自带DNS解析服务,解决53端口占用
systemctl disable systemd-resolved.service #关闭自启动
#cd AdGuardHome #进入到AdGuardHome目录
./AdGuardHome -s install #安装并启动

推荐上游DNS服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#######国内,可能存在污染#######
https://doh.pub/dns-query
https://223.5.5.5/dns-query
tls://223.5.5.5
https://doh.360.cn/dns-query
https://1.12.12.12/dns-query
tls://120.53.53.53
#############国外################
tls://8.8.4.4
tls://1.1.1.1
https://1.1.1.1/dns-query
tls://1.0.0.1
https://1.0.0.1/dns-query
https://cloudflare-dns.com/dns-query
tls://94.140.15.15
https://101.101.101.101/dns-query
tls://101.101.101.101
https://101.102.103.104/dns-query
tls://101.102.103.104

修改本设备DNS设置: 127.0.0.1,8.8.8.8

配置文件设置&解决最快IP模式下超时问题

打开软件同级目录下的AdGuardHome.yaml文件,可以用记事本打开。

在最快IP模式下我们需要修改以下配置信息

1
2
3
4
fastest_timeout: 1s   #好像是测速IP超时时间,未确定
max_goroutines: 5000 #最大并发数
upstream_timeout: 200ms #等待上游服务器时间
icmp_timeout_msec: 150 #ICMP报文超时时间

写在后面的话

这个调试的配置文件只能说适合我的网络,你需要根据你的网络适当调整。

既然国内DNS存在污染问题,又为什么要添加呢?因为为了能获取到最快的国内应用CDN的IP,避免使用到国外的CDN。填写多个是为了避免单个污染时接收不到国外的解析结果,其他的国内DNS解析结果如果没被污染,能选取到正确的IP。(大多数被污染的域名会定向到超时IP上,通过选择最快的IP能选择出正确IP[IP对应服务器响应未超时])

一些建议选项:

  • DNSSEC
  • 覆盖最小TTL值
  • 覆盖最大TTL值
  • 乐观缓存
  • 黑名单拦截列表
1
2
注:使用覆写很短的TTL值可以解决网络中可能存在IP间歇性不可达,或者使用了被污染过的解析结果,需要及时刷新并能快速切换到可用IP(如果有)。开启最快IP地址选项时务必仅设置1到2个上游服务器,否则可能会导致严重超时问题。
如果能确保上游服务器安全可靠,可以采用大的TTL值覆盖(如7天,一般来说网站不会经常改变服务器IP)和仅设置1到2个上游服务器并开启最快IP地址选项,此举能有效改善DNS查询速度,如果你使用的DNS存在污染等安全问题,则不建议使用较大TTL值。

参考视频:https://www.bilibili.com/video/BV1pX4y1S7bd/