the lookup tools in djbdns are handy for diagnosing ns problems like this.
see http://cr.yp.to/djbdns.html and http://cr.yp.to/djbdns/tools.html for
info on those.
for example, if i wanted to trace a possible path for resolving
216.148.218.195, i might start at a random root:
[tcl@jobo tcl]$ dnsq ptr 195.218.148.216.in-addr.arpa b.root-servers.net
12 195.218.148.216.in-addr.arpa:
262 bytes, 1+0+10+0 records, response, noerror
query: 12 195.218.148.216.in-addr.arpa
authority: 216.in-addr.arpa 86400 NS arrowroot.arin.net
authority: 216.in-addr.arpa 86400 NS buchu.arin.net
authority: 216.in-addr.arpa 86400 NS chia.arin.net
authority: 216.in-addr.arpa 86400 NS dill.arin.net
authority: 216.in-addr.arpa 86400 NS epazote.arin.net
authority: 216.in-addr.arpa 86400 NS figwort.arin.net
authority: 216.in-addr.arpa 86400 NS ginseng.arin.net
authority: 216.in-addr.arpa 86400 NS henna.arin.net
authority: 216.in-addr.arpa 86400 NS indigo.arin.net
authority: 216.in-addr.arpa 86400 NS jerk.arin.net
then try one of the referrals:
[tcl@jobo tcl]$ dnsq ptr 195.218.148.216.in-addr.arpa arrowroot.arin.net
12 195.218.148.216.in-addr.arpa:
146 bytes, 1+0+4+0 records, response, noerror
query: 12 195.218.148.216.in-addr.arpa
authority: 148.216.in-addr.arpa 86400 NS cmtu.mt.ns.els-gms.att.net
authority: 148.216.in-addr.arpa 86400 NS dbru.br.ns.els-gms.att.net
authority: 148.216.in-addr.arpa 86400 NS dmtu.mt.ns.els-gms.att.net
authority: 148.216.in-addr.arpa 86400 NS cbru.br.ns.els-gms.att.net
and so on:
[tcl@jobo tcl]$ dnsq ptr 195.218.148.216.in-addr.arpa cmtu.mt.ns.els-gms.att.net
12 195.218.148.216.in-addr.arpa:
154 bytes, 1+0+2+2 records, response, noerror
query: 12 195.218.148.216.in-addr.arpa
authority: 218.148.216.in-addr.arpa 86400 NS ns-west.cerf.net
authority: 218.148.216.in-addr.arpa 86400 NS ns-east.cerf.net
additional: ns-west.cerf.net 105428 A 192.153.156.3
additional: ns-east.cerf.net 120135 A 207.252.96.3
[tcl@jobo tcl]$ dnsq ptr 195.218.148.216.in-addr.arpa ns-west.cerf.net
12 195.218.148.216.in-addr.arpa:
124 bytes, 1+0+2+2 records, response, noerror
query: 12 195.218.148.216.in-addr.arpa
authority: 195.218.148.216.in-addr.arpa 86400 NS ns1.redhat.com
authority: 195.218.148.216.in-addr.arpa 86400 NS ns2.redhat.com
additional: ns1.redhat.com 129443 A 66.187.233.210
additional: ns2.redhat.com 129443 A 216.148.218.250
[tcl@jobo tcl]$ dnsq ptr 195.218.148.216.in-addr.arpa ns1.redhat.com
12 195.218.148.216.in-addr.arpa:
176 bytes, 1+1+3+3 records, response, authoritative, noerror
query: 12 195.218.148.216.in-addr.arpa
answer: 195.218.148.216.in-addr.arpa 86400 PTR www.redhat.com
authority: 218.148.216.in-addr.arpa 86400 NS ns1.redhat.com
authority: 218.148.216.in-addr.arpa 86400 NS ns2.redhat.com
authority: 218.148.216.in-addr.arpa 86400 NS ns3.redhat.com
additional: ns1.redhat.com 300 A 66.187.233.210
additional: ns2.redhat.com 600 A 66.77.185.41
additional: ns3.redhat.com 600 A 63.240.14.66
and i've finally found an answer:
answer: 195.218.148.216.in-addr.arpa 86400 PTR www.redhat.com
i could examine all possible paths from a root:
dnstrace ptr 195.218.148.216.in-addr.arpa b.root-servers.net | dnstracesort | less
or from all roots:
dnstrace ptr 195.218.148.216.in-addr.arpa a.root-servers.net b.root-servers.net
c.root-servers.net d.root-servers.net e.root-servers.net f.root-servers.net
g.root-servers.net h.root-servers.net i.root-servers.net j.root-servers.net
k.root-servers.net l.root-servers.net m.root-servers.net | dnstracesort | less
but beware that those will take a long time to complete, see
http://cr.yp.to/djbdns/tools.html for details.
ALERT lines in the output of those can tell you where a server is failing
or lame or slow.
i believe the more popular program "dig" can do some of this also, if you
don't wish to obtain the superior djbdns tools (the greps are just to
remove blank lines and other extra output):
[tcl@jobo tcl]$ dig @b.root-servers.net 195.218.148.216.in-addr.arpa ptr in | egrep -v
'^$' | egrep -v '^\;\;'
; <<>> DiG 9.1.3 <<>> @b.root-servers.net 195.218.148.216.in-addr.arpa ptr in
;195.218.148.216.in-addr.arpa. IN PTR
216.in-addr.arpa. 86400 IN NS ARROWROOT.ARIN.NET.
216.in-addr.arpa. 86400 IN NS BUCHU.ARIN.NET.
216.in-addr.arpa. 86400 IN NS CHIA.ARIN.NET.
216.in-addr.arpa. 86400 IN NS DILL.ARIN.NET.
216.in-addr.arpa. 86400 IN NS EPAZOTE.ARIN.NET.
216.in-addr.arpa. 86400 IN NS FIGWORT.ARIN.NET.
216.in-addr.arpa. 86400 IN NS GINSENG.ARIN.NET.
216.in-addr.arpa. 86400 IN NS HENNA.ARIN.NET.
216.in-addr.arpa. 86400 IN NS INDIGO.ARIN.NET.
216.in-addr.arpa. 86400 IN NS JERK.ARIN.NET.
and you could again follow a path by replacing @b.root-servers.net with
one of the ns records until you got to an answer...
[tcl@jobo tcl]$ dig @ns1.redhat.com 195.218.148.216.in-addr.arpa ptr in | egrep -v
'^$' | egre