工具

发布于 更新于

AI总结: 本文介绍了DNS over HTTPS(DoH)作为一种安全的域名解析方案,通过加密的HTTPS协议来保护用户的DNS请求,防止窃听和修改。文中列出了多种DoH服务提供商及其对应的地址,包括AdGuard、Cloudflare、Google等,并提供了请求示例和Python调用示例。此外,讨论了DNS污染及其应对方法,包括DNS缓存服务器污染、DNS抢答和DNS劫持,并建议使用加密协议如DoH和DNS over TLS来保护DNS请求。最后,提到修改hosts文件后如何刷新DNS缓存,以及DNS泄漏检测的工具和相关链接。 存在的错误观点包括对DNS污染的描述,文中未明确指出DNS污染的具体影响和机制,可能导致误解。同时,提到的应对方法并未考虑到所有潜在的风险和复杂性。

DNS Over HTTPS

DNS over HTTPS(缩写:DoH)是一个进行安全化的域名解析方案。其意义在于以加密的 HTTPS 协议进行 DNS 解析请求,避免原始 DNS 协议中用户的 DNS 解析请求被窃听或者修改的问题(例如中间人攻击)来达到保护用户隐私的目的

服务提供商 DoH 地址 DoT 地址 IPS
AdGuard https://dns.adguard-dns.com/dns-query
AdGuard-无过滤 https://unfiltered.adguard-dns.com/dns-query
AdGuard-家庭 https://family.adguard-dns.com/dns-query
Blahdns https://doh-jp.blahdns.com/dns-query
CleanBrowsing https://doh.cleanbrowsing.org/doh/family-filter/
Cloudflare https://cloudflare-dns.com/dns-query cloudflare-dns.com 1.1.1.1
DNS.SB https://doh.dns.sb/dns-query dot.sb
DNS.SB https://doh.sb/dns-query
Google https://dns.google.com/dns-query
Google https://dns.google/dns-query dns.google
OpenDNS https://doh.opendns.com/dns-query
Quad9 https://dns.quad9.net/dns-query dns.quad9.net
rixCloud https://doh.rixcloud.dev/dns-query
红鱼 DNS https://rubyfish.cn/dns-query
阿里 DNS https://dns.alidns.com/dns-query dns.alidns.com
DNSWatch https://resolver2.dns.watch/dns-query
腾讯 https://doh.pub/dns-query dot.pub 1.12.12.12、120.53.53.53
TWNIC Quad 101 https://dns.twnic.tw/dns-query dns.twnic.tw

公共 DNS

名称 DNS
百度公共 DNS 180.76.76.76
114 DNS 114.114.114.114
阿里云公共 DNS 223.5.5.5 / 223.6.6.6
谷歌公共 DNS 8.8.8.8 / 8.8.4.4

请求说明

https://dns.adguard.com/dns-query?dns=<base64url encoded data>  
https://dns.adguard.com/resolve?name=<domain>&type=<DNS Q/A type>  

curl 请求方式

$ curl 'https://dns.adguard.com/resolve?name=www.baidu.com&type=A'  
{  
  "Question": [  
    {  
      "name": "www.baidu.com.",  
      "type": 1  
    }  
  ],  
  "Answer": [  
    {  
      "name": "www.baidu.com.",  
      "data": "www.a.shifen.com.",  
      "TTL": 12,  
      "type": 5,  
      "class": 1  
    },  
    {  
      "name": "www.a.shifen.com.",  
      "data": "14.119.104.189",  
      "TTL": 12,  
      "type": 1,  
      "class": 1  
    },  
    {  
      "name": "www.a.shifen.com.",  
      "data": "14.119.104.254",  
      "TTL": 12,  
      "type": 1,  
      "class": 1  
    }  
  ],  
  "Extra": null,  
  "TC": false,  
  "RD": true,  
  "RA": true,  
  "AD": false,  
  "CD": false,  
  "Status": 0  
}  

python 调用示例

import dns.message  
import requests  
import base64  
import json  

doh_url = "https://dns.alidns.com/dns-query"  
domain = "alibaba.com"  
rr = "A"  
result = []  

message = dns.message.make_query(domain, rr)  
dns_req = base64.b64encode(message.to_wire()).decode("UTF8").rstrip("=")  
r = requests.get(doh_url + "?dns=" + dns_req,  
                 headers={"Content-type": "application/dns-message"})  
for answer in dns.message.from_wire(r.content).answer:  
    dns = answer.to_text().split()  
    result.append({"Query": dns[0], "TTL": dns[1], "RR": dns[3], "Answer": dns[4]})  
    print(json.dumps(result))  
$ python test_doh.py  
[{"Answer": "106.11.223.101", "Query": "alibaba.com.", "RR": "A", "TTL": "133"}]  

DNS 污染

DNS 污染大致与以下内容为同义词:

DNS 缓存服务器污染:运营商的 DNS 服务器被污染,使用默认 DNS,网络就会被干扰。

DNS 抢答:DNS 请求没有防篡改功能,所以中间人能抢先发送错误的 DNS,网络就会被干扰。

DNS 劫持:使用自定义 DNS,同样是缺乏防篡改功能,所以中间人能劫持 DNS 请求,网络就会被干扰。

应对方法分别是:

DNS 缓存服务器污染:直接换 114.114.114.114 与 8.8.8.8 这样的非运营商的 DNS,只要没有抢答和劫持,就有效。

DNS 抢答:修改系统内核,使系统忽略错误的 DNS,因为早期 GFW 抢答给出的错误 IP 数量不多,然后真正的 DNS 返回的 IP,就能被正常使用。

DNS 劫持:使用 DNS over HTTPS(HTTP over TLS)、DNS over TLS 等方式,通过加密的协议来保护 DNS 请求。只要 GFW 没有将提供服务的域名,进行 SNI 封禁,就有效。

DNS刷新

修改hosts文件后 刷新DNS缓存

Windows:

ipconfig /flushdns  

Mac: 两种方式

sudo killall -HUP mDNSResponder  

sudo dscacheutil -flushcache  

DNS泄漏检测

DNS Leak Test

BrowserScan - DNS Leak

DNS Leak Test - BrowserLeaks

DNS泄漏测试

IP/DNS Detect

相关链接

DNS_over_HTTPS - 维基百科

DNS over HTTPs(DoH)

AdGuard