加密 DNS 应用场景与原理简要教程
加密 DNS
首先我说的加密 DNS 和 DNSSEC、EDNS 不是一个东西
DNS 解析主要的类型有
- DOT(DNS over TLS):默认端口 853
- DOH(DNS over HTTP/HTTPS):默认端口 HTTP 80、HTTPS 443,注意HTTP存在非加密内容
- DOQ(DNS over QUIC):默认端口784(比如 ADH),也有用8853的
- UDP DNS:默认端口53
- 其他
其中 DOT、DOH、DOQ 均为加密 DNS,UDP53 为不加密的明文,所以 UDP53:可篡改、可劫持、可拦截、可识别、可记录、可匹配
DOQ 和 QUIC(最早称为快速 UDP 互联网连接)虽然本身也用到了 UDP,但是应用场景太少了,支持程度也很差,大多数情况下不需要用到
主要的,加密 DNS 就用的 DOH 和 DOT
AdguardHome
这是加密 DNS 和 DNS 过滤器的核心成员,免费好用,支持平台多,常见的 LINUX 和 WIN 都没问题
支持 DOT、DOH、DOQ 等多种 DNS,支持黑白名单,支持套娃,支持负载均衡、并行查询、支持缓存和修改TTL、支持拦截IPV6解析等
一般来说,安装在远程 Linux、本地 WIN 和本地 Linux 中
如果使用公共服务,本地安装会好些,但是可能增加操作步骤
DNS 应用
加密 DNS 主要是保护隐私、抵抗干扰使用,套在 TLS、HTTPS 中相对隐蔽且难以解密,可以做到保护的效果
但是,加密 DNS 就像一个运输管道,你从屎水里面吸,吸进来的还是屎水,所以当你从污染源取解析时,被 DNS 污染也是再正常不过的了
首先要知道链接是什么样的一条路
你的设备-》你的网关-》你的运营商-》公网服务器,公网服务器包含境内、境外、跨境网关
你可以在你的设备和网关实现加密 DNS,运营商和公网对非加密 DNS 搞事情
ADH 的原理:从 ADH 的设备向定向 DNS 来源请求 DNS 解析,再给请求者返回信息
客户-》ADH-》解析源
ADH 取源和返回
那么,如果你的解析源是一坨屎,你再怎么解析还是一坨屎,比如:运营商自带 DNS、垃圾云服务商 DNS、野鸡 DNS 等
考虑到EDNS的问题,原则上:不需要分区解析的用 Cloudflare,需要分区解析的用 Google
ADH->解析源
你可以选择多种方式,比如用 UDP、用 DOT、用 DOH 都行,
如果 ADH 在境外,解析源也在境外,那大多数情况下,直接 UDP 就行,少数地区除外。
如果一个在境内,一个在境外,就不是很推荐了,常规的都会被跨境网关干扰,正常使用很容易出问题,可以考虑中转一下。
客户->ADH
同理,局域网内,无脑UDP
不跨境,考虑 DOT、DOH、UDP [注意 DNS 扫描]
跨境,考虑 DOT、DOH,而且网络要好才行
本地应用方法
- 如果你本地用 WIN/LINUX 设备做了 ADH 服务,那即可通过修改 UDP DNS 来实现本地直接连接本地的 ADH
- 如果使用 IOS14+/MACOS,不需要代理软件,需要安装全局证书,仅支持DOH和DOT
- 如果使用安卓移动设备,可在系统设置中找到私人DNS,填写ADH域名即可,仅支持标准端口的 DOT,是全局模式
- 如果使用安卓移动设备+Chrome,可在浏览器设置-隐私和安全-使用安全 DNS 中,填写 ADH-URL,仅支持 DOH,只对浏览器的全局生效,其他浏览器要看他们自己支持不支持,该 DNS 查询是走网络代理的
- 如果使用IOS,使用代理软件,可看看代理软件内能不能设置,主流的应该是支持DOH和DOT了,该DNS查询可能不是走网络代理的(至少我的软件测出来是这样)
- 如果使用IOS/安卓,也可以考虑 AdGuardAPP,可能需要付费,不支持代理同时运行
- 官方还出了几个参考方案,比如 DNSCloak、intra、dnsproxy、dnscrypt-proxy、Mozilla Firefox 等
错误场景
如果你已经能正常使用互联网,大多数情况没有问题,也没必要使用什么 114、阿里、腾讯、百度、360 的 DNS,基本没啥用,除非你的这个地方的运营商有傻,不过就算你用了这些,大多数情况也解决不了问题
如果你有去广告需求、无法正常使用互联网,可以考虑构建加密 DNS 解决方案来尝试解决,注意加密 DNS 会影响你的解析速度
有条件的先把 IPV6 关了,这个垃圾东西,很多时候是你打不开网页/APP、加载不出来东西的主要原因
风险
跨境 UDP DNS 没啥用,一样该干嘛干嘛,还会被跨境网关杀IP杀端口
跨境 DOT 和默认的 DOH 都会被检测,知名的会被干扰阻断,不知名的直接杀IP杀端口杀域名
外面套好皮的,内部路径转发 DOH 的相对安全
本地 UDP 直接浪起来基本没啥事
参考解决方案
- 远程境外服务器,用 UDP 获取 DNS 解析,本地向套壳的ADH(网络优秀)请求 DNS 解析,同时做了多地和跨境分区解析
- 本地 ADH,套娃境外 ADH 或者境外 DOH、DOT