01 关于DNS-Rcode
02 NXDOMAIN的定义
关于NXDOMAIN,我们来看看RFC中相关定义:
译文:本文档明确指出,当DNS解析程序收到响应代码为NXDOMAIN的响应时,意味着被拒绝的域名及其下的所有名称都不存在。
译文:DNS迭代解析算法以这种方式精确地解释NXDOMAIN信号。如果它遇到来自权威服务器的NXDOMAIN响应代码,它会立即停止迭代并将NXDOMAIN响应返回给查询器。
这里有个关键点,就是“立即停止迭代并将NXDOMAIN响应返回给查询器”。
03 NXDOMAIN影响
3.1 NXDOMAIN对LDNS的影响
我们来分析,作为LDNS收到NXDOMAIN的行为自然就是不再继续查询,并且将结果应答给查询器,同时还会有个行为就是将LDNS缓存中已有的关于该域名的记录都会标记为NXDOMAIN,并缓存NXDOMAIN的TTL。
因此在人为不干预的情况下,关于该域名的记录结果在TTL时间内都会被解析成为NXDOMAIN。
(*TTL值全称是“生存时间Time To Live”,简单的说它表示DNS记录在DNS服务器上的缓存时间)
3.2 谁产生的NXDOMAIN
在正常情况下,LDNS上的缓存均由权威服务器的应答产生。
因此互联网权威服务器不应该产生NXDOMAIN的应答,如果产生,则会影响该域名的正常解析。
04 实验测试
1.1 场景:
角色 | 服务IP |
LDNS | 172.16.150.101 |
根 | 172.16.150.102 |
权威DNS | 172.16.150.103 |
LDNS将本地根指向自建根(172.16.150.102),自建根将test.com授权给172.16.150.103
通过在权威DNS上模拟出aaa.test.com会应答NXDOMAIN,www.test.com配置正确应答NOERROR。
1.2 客户端解析
客户端将LDNS配置成为172.16.150.101
首先在客户端上对www.test.com进行A和AAAA解析,测试权威配置正确的解析结果
A记录解析正常
AAAA解析结果为无结果的NOERROR,这样的结果对LDNS无影响。
测试结果显示,对于配置正确的域名,应答结果都应该是NOERROR。
在客户端上对aaa.test.com进行A和AAAA解析,测试域名在权威已经配置,但配置不标准的解析结果。
第一次对A记录进行解析,解析应答码为NOERROR,此时是正常的。
第一次对AAAA记录进行解析,解析结果为NXDOMAIN,此时就开始有问题。
此时,LDNS上关于aaa.test.com的全纪录类型缓存就会被污染。
下面来做下验证:
当之前访问的A记录的TTL超时后再对A记录进行解析,解析结果为NXDOMIAN,此时第一次解析正常的A记录缓存就会被污染,解析结果从NOERROR被污染成NXDOMAIN。
1.3 LDNS进行缓存文件查看确认
此时我们来查看LDNS中的缓存内容
从缓存中可以看出aaa.test.com的全类型(ANY)记录都被污染(解析结果为NXDOMAIN)。
为了验证是aaa.test.com的全记录类型都被污染,我们做一个很少解析的spf记录。
如下:spf记录也被污染
由此可见正常对外提供服务的域名是不能产生NXDOMAIN的应答结果,否则会将LDNS上关于该域名的全纪录类型结果都污染,污染后只能等待NXDOMAIN的TTL过期后才会重新到权威请求新的结果(此时需要保证权威侧的配置正确)。