要使用第三方服务,我可以使用他们的 DNS 名称来解析他们的域名。不幸的是,他们使用了一些不好的做法,比如使用他们自己编造的 TLD,我们tld
以后会提到这一点。为了能够解析他们的域名,我tld
在本地 DNS 服务器上设置了区域转发:
zone "tld." {
type forward;
forward only;
forwarders { x.x.x.x; };
};
他们的名称服务器在哪里x.x.x.x
。不幸的是,sub.example.tld
由于 DNSSEC 无法获取树中更高位置的 DS,因此无法解析,因为它试图获取被拒绝的NS
记录。如(希望)以下 tcpdump 所示,并带有相应的 dig 输出:tld
x.x.x.x
dig @localhost sub.example.tld
22:23:58.104635 IP (tos 0x0, ttl 64, id 11345, offset 0, flags [none], proto UDP (17), length 77)
egmaas.35308 > x.x.x.x.domain: [bad udp cksum 0x18b8 -> 0x708c!] 35515+% [1au] A? sub.example.tld. ar: . OPT UDPsize=4096 OK (49)
22:23:58.132413 IP (tos 0x0, ttl 62, id 62124, offset 0, flags [none], proto UDP (17), length 152)
x.x.x.x.domain > egmaas.35308: [udp sum ok] 35515*- q: A? sub.example.tld. 1/2/1 sub.example.tld. [10h40m] A x.x.x.1 ns: example.tld. [10h40m] NS dkp-dns001.dmz.local., example.tld. [10h40m] NS dkp-dns002.dmz.local. ar: . OPT UDPsize=4096 OK (124)
22:23:58.132924 IP (tos 0x0, ttl 64, id 11351, offset 0, flags [none], proto UDP (17), length 71)
egmaas.52511 > x.x.x.x.domain: [bad udp cksum 0x18b2 -> 0xe141!] 31932+% [1au] DS? example.tld. ar: . OPT UDPsize=4096 OK (43)
22:23:58.160128 IP (tos 0x0, ttl 62, id 62125, offset 0, flags [none], proto UDP (17), length 143)
x.x.x.x.domain > egmaas.52511: [udp sum ok] 31932*- q: DS? example.tld. 0/1/1 ns: example.tld. [10h40m] SOA dkp-dns001.dmz.local. admin.tld.org. 2015062301 10800 3600 604800 38400 ar: . OPT UDPsize=4096 OK (115)
22:23:58.174284 IP (tos 0x0, ttl 64, id 11356, offset 0, flags [none], proto UDP (17), length 63)
egmaas.57612 > x.x.x.x.domain: [bad udp cksum 0x18aa -> 0x3f69!] 19858+% [1au] NS? tld. ar: . OPT UDPsize=4096 OK (35)
22:23:58.201136 IP (tos 0x0, ttl 62, id 62126, offset 0, flags [none], proto UDP (17), length 63)
x.x.x.x.domain > egmaas.57612: [udp sum ok] 19858 Refused- q: NS? tld. 0/0/1 ar: . OPT UDPsize=4096 OK (35)
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost sub.example.tld
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 41059
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sub.example.tld. IN A
;; Query time: 97 msec
;; SERVER: ::1#53(::1)
;; WHEN: Mon Oct 24 22:23:58 CEST 2016
;; MSG SIZE rcvd: 49
sub.example.tld 的实际正确解析 IP在哪里x.x.x.1
?(错误的校验和可以忽略,因为它们是误报)
除了在本地 DNS 服务器上完全禁用 DNSSEC 之外,我还有其他选择吗?此外,已经验证外部方无法更改其 DNS 设置,更不用说实际正确合并 DNSSEC。
答案1
我不相信 BIND 可以很好地完成您的要求。
您可以使用以下方式添加信任锚trusted-keys
(本质上,这将添加/覆盖根据DS
记录使用的密钥)但没有办法永久地取消信任。据我所知,相关区域未签名,因此为其添加密钥作为信任锚不会有任何帮助。
最新版本确实有办法暂时添加负面信任锚rndc nta
(以及相应的nta-lifetime
/nta-recheck
设置),但这专门用于临时解决方法,并且负面信任锚会自动失效。