DNS清洗原理简单剖析

100次阅读

共计 2260 个字符,预计需要花费 6 分钟才能阅读完成。

刚刷论坛看到一个帖子:https://hostloc.com/thread-1055204-1-5.html

看了半天也没见有人说清洗到底是咋搞的
正巧之前有了解过,就尝试来解答一下,纯手打

我们都知道,DNS 的查询过程是个递归的流程
比如说,当你要访问 www.example.com,需要先知道 example.com 的 NS,而这又需要.com 的 NS
整个过程需要几方配合:LDNS、ADNS
LDNS 通常是运营商部署的默认 DNS

当你访问 www.example.com 时,会向 LDNS 查询 www.example.com 对应的 IP 地址,而 LDNS 又会像根 DNS 服务器查询.com 对应的 NS,再通过查询.com 对应的 NS 服务器查询 example.com 的 NS 服务器,最后向 example.com 的 NS 查询 www.example.com 的 IP 地址。在这个过程中,由于 G F W 会抢答最后两步的结果。

而在 查询 example.com 的 NS 服务器 过程中,很神奇的是 G F W 直接返回的是一个 A 记录的 DNS 响应包,并不是 NS 记录的响应包,如此一来,LDNS 便并不会将其缓存起来,如此,每一次发送请求,即使每次都被 G F W 拦截,LDNS 还是回去查询 example.com 的 NS 服务器。与此同时,由于 G F W 的抢答方式的特点,虽然 G F W 通常离 LDNS 更近,处理逻辑也更简单,但有时抢答包可能会比 LDNS 向.com 的 NS 服务器响应的包慢,虽然概率很小很小(<1%),但是通过不断的发 NS 记录的查询包,仍然有概率能够触发,这样一来,我们通过设置较长的 ttl,来让 example.com 正确的 NS 记录能够在 LDNS 中缓存一段时间。

解决了 example.com 的 NS 抢答问题,还需要解决 www.example.com 的抢答问题。首先需要搞清楚,墙部署的位置:出境流量处。因为我们需要向.com 的 NS 服务器查询 example.com 的 NS,而.com 的 NS 服务器在国外,所以会过墙。但通过上一个法子,我们已经将 example.com 正确的 NS 记录缓存到 LDNS 中,如果 example.com 的 NS 服务器在国内的话,那么此查询过程将不会过墙,LDNS 向 example.com 查询其子域 www 的 DNS 包便不会被抢答。

总的来说,此种 DNS 清洗方法的难度特别巨大:由于全国各地的 LDNS 非常多,而且都是不公开的,且有时仅允许同一个运营商的某一篇地区使用,这使得如果你想让全国大部分 LDNS 均能缓存住你的 NS 记录,就只能搜集非常多的 ip,不断地向 LDNS 进行 NS 查询来实现。且缓存是有时间限制的,过期了就会被删除,并不能一劳永逸,想要用多久就要洗多久 …

以上就是我对 DNS 清洗原理的理解。如果不对之处,欢迎指正,以上内容均来源于互联网相关资料搜集整理,非常感谢前人的探索工作。

网友回复:

注册 干活绑定

nnt 设置一个比较小的 ttl,然后临时把 ns 搬回国,好象就能实现同样效果吧? 所以,这就是为什么国内禁止设立自己的 dns 的原因?

lspro 还有清洗啊!我也有一个域

sdqu 这么多我看不懂,有 mjj 能用一句简单的话解释清楚吗

怪人 ttl 大小跟 example.com 的 NS 查询包被拦截没啥关系,毕竟 LDNS 需要过境去向.com 的 NS 服务器查询,这样就一定会过墙的,而过墙的污染域名的 DNS 包直接会被 GFW 抢答,把 ns 搬回国只能保证 LDNS 仍然存有你正确的 NS 情况下,在不过墙的情况下能够成功查询 A、CNAME 等其他记录

糟糕的鲍勃 应该还有个省级墙,一般高墙黑名单后 会同步给这些地域墙,抢答 dns 就是域名用国内 dns 服务商,然后响应速度比墙快,每个地域都要部署,勤洗应该是 国内集群 dns 和 支持 0 ttl 的,这也是为啥封自建那么严格,勤洗服务的一般都是有渠道

nnt 嗯,我理解错了,是污染 NS,我以为是污染 A

1121744186 Mark,技术贴

sdqu 太困了   明天再来看

注册 确实是技术贴,理解了!

注册 纯技术帖,得赞

Salta 污染一:向.com 对应的 NS 服务器查询 example.com 的 NS 服务器 污染二:向 example.com 的 NS 查询 www.example.com 的 IP 地址 污染一解决:通过设置较长的 ttl,来让 example.com 正确的 NS 记录能够在 LDNS 中缓存一段时间。(依赖于高墙的抢答特点:高墙直接返回的是一个 A 记录的 DNS 响应包,并不是 NS 记录的响应包,LDNS 便并不会将其缓存起来)污染二解决:搜集非常多的 ip,不断地向 LDNS 进行 NS 查询来实现。(前提:如果 example.com 的 NS 服务器在国内的话,并且,缓存是有时间限制的,过期了就会被删除,并不能一劳永逸,想要用多久就要洗多久 …)— 不确定以上总结的是不是楼主的意思 — 污染一的解决看起来像是高墙的缺陷,如果高墙抢答结果就是一个错误的 NS 服务器,LDNS 接收并不再去请求正确的 NS 服务器,污染一解决办法是不是无效了;污染二解决方法需要 NS 服务器在国内,是否是说 DNS 清洗实际是用 DNS 污染同样的抢答手段,作为一个“错误的 NS 服务器”去返回正确的结果 — — 作为 mjj 就想问:我有一个被污染的域名,DNS 清理具体步骤怎么做 @nnt

树枝 make

全军冲鸡 有意思,mark 一下

dole 污染二不需要大量的 IP,污染一才需要,因为当 LDNS 缓存结果为国内的 NS 服务器时,查询 A 记录会直接去询问国内的 NS,不需要过墙,所以墙也不会抢答。

lsin 自建花销爆炸,作为 mjj 最具性价比的当然是直接买别人的 DNS 清洗服务啊

正文完
 0