handle NS cycles better
Their DNS isn't perfect, but we should still handle it better.
[11379][ pc ] => satisfied from cache
[11379][iter] <= rcode: NOERROR
[31443][iter] 'etisalatdata.net.' type 'A' id was assigned, parent id 0
[31443][plan] plan 'ns2.nile-online.net.' type 'A'
[ 4790][iter] 'ns2.nile-online.net.' type 'A' id was assigned, parent id 31443
[33237][iter] 'ns2.nile-online.net.' type 'A' id was assigned, parent id 31443
[33237][plan] plan 'ns2.etisalatdata.net.' type 'AAAA'
[62268][iter] 'ns2.etisalatdata.net.' type 'AAAA' id was assigned, parent id 33237
[62268][ pc ] => satisfied from cache
[62268][iter] <= rcode: NOERROR
[14782][iter] 'ns2.nile-online.net.' type 'A' id was assigned, parent id 31443
[14782][plan] plan 'ns2.etisalatdata.net.' type 'A'
[56688][iter] 'ns2.etisalatdata.net.' type 'A' id was assigned, parent id 14782
[46579][iter] 'ns2.etisalatdata.net.' type 'A' id was assigned, parent id 14782
[46579][plan] plan 'ns1.nile-online.net.' type 'AAAA'
[50812][iter] 'ns1.nile-online.net.' type 'AAAA' id was assigned, parent id 46579
[58454][iter] 'ns1.nile-online.net.' type 'AAAA' id was assigned, parent id 46579
[58454][plan] plan 'ns2.etisalatdata.net.' type 'AAAA'
[....]
$ kdig @k.gtld-servers.net. NS etisalatdata.net
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 27195
;; Flags: qr rd; QUERY: 1; ANSWER: 0; AUTHORITY: 2; ADDITIONAL: 2
;; QUESTION SECTION:
;; etisalatdata.net. IN NS
;; AUTHORITY SECTION:
etisalatdata.net. 172800 IN NS ns1.nile-online.net.
etisalatdata.net. 172800 IN NS ns2.nile-online.net.
;; ADDITIONAL SECTION:
ns1.nile-online.net. 172800 IN A 62.140.73.1
ns2.nile-online.net. 172800 IN A 62.140.73.2
;; Received 114 B
;; Time 2017-01-23 18:05:47 CET
;; From 192.52.178.30@53(UDP) in 303.4 ms
$ kdig @k.gtld-servers.net. NS nile-online.net
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 2544
;; Flags: qr rd; QUERY: 1; ANSWER: 0; AUTHORITY: 2; ADDITIONAL: 2
;; QUESTION SECTION:
;; nile-online.net. IN NS
;; AUTHORITY SECTION:
nile-online.net. 172800 IN NS ns1.etisalatdata.net.
nile-online.net. 172800 IN NS ns2.etisalatdata.net.
;; ADDITIONAL SECTION:
ns1.etisalatdata.net. 172800 IN A 62.140.73.1
ns2.etisalatdata.net. 172800 IN A 62.140.73.2
;; Received 114 B
;; Time 2017-01-23 18:18:16 CET
;; From 192.52.178.30@53(UDP) in 303.1 ms
... which basically creates a cycle when trying to resolve the authoritative data for NS.
$ kdig @ns1.nile-online.net. NS etisalatdata.net
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 64588
;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 2
;; QUESTION SECTION:
;; etisalatdata.net. IN NS
;; ANSWER SECTION:
etisalatdata.net. 86400 IN NS ns1.etisalatdata.net.
etisalatdata.net. 86400 IN NS ns2.etisalatdata.net.
;; ADDITIONAL SECTION:
ns1.etisalatdata.net. 86400 IN A 62.140.73.1
ns2.etisalatdata.net. 86400 IN A 62.140.73.2
;; Received 102 B
;; Time 2017-01-23 18:06:08 CET
;; From 62.140.73.1@53(UDP) in 96.6 ms
$ kdig @ns1.etisalatdata.net. NS etisalatdata.net
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 23335
;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 2
;; QUESTION SECTION:
;; etisalatdata.net. IN NS
;; ANSWER SECTION:
etisalatdata.net. 86400 IN NS ns2.etisalatdata.net.
etisalatdata.net. 86400 IN NS ns1.etisalatdata.net.
;; ADDITIONAL SECTION:
ns1.etisalatdata.net. 86400 IN A 62.140.73.1
ns2.etisalatdata.net. 86400 IN A 62.140.73.2
;; Received 102 B
;; Time 2017-01-23 18:09:18 CET
;; From 62.140.73.1@53(UDP) in 96.9 ms