Eu não tenho uma resposta direta para a pergunta maior, mas respostas para algumas partes distintas dela.
Em relação a ping vs nslookup
Vale a pena notar que ping é apenas um exemplo de um programa comum que usa a biblioteca de resolução de SO ( getaddrinfo / gethostbyname calls) enquanto nslookup (bem como dig , etc) são programas cliente DNS fazendo consultas DNS próprias, em vez de usar a biblioteca de resolução, eles simplesmente pegam seu servidor padrão a partir do arquivo de configuração para o resolvedor de sistema como uma questão de conveniência.
O que isto significa é que nslookup é ruim para testar como o resolvedor do sistema se comporta (ex. resolv.conf , nsswitch.conf , etc), enquanto, por exemplo, ping é ruim para testar DNS.
Pode-se notar que no Linux-terra eu consideraria getent ahosts (ex. getent ahosts www.example.com ) uma escolha melhor para testar o comportamento do resolvedor, e dig seria muito preferível sobre nslookup para testar DNS. / p>
Com relação ao que você pode fazer para ver o que está acontecendo
Como foi sugerido por Hangin em desespero silencioso , você pode usar strace (talvez também ltrace para uma visualização de nível mais alto) e sugiro usá-lo com getent ahosts em vez de ping para não obter todo o ruído da finalidade real do ping , enquanto você está tentando observar o que é apenas um efeito colateral. getent ahosts faz apenas isso que você está tentando investigar.
Sobre o que ter no resolv.conf
O que você está dizendo sobre as coisas "quebrando" quando o servidor "errado" é consultado me faz perguntar por que você está colocando todos esses servidores em resolv.conf em primeiro lugar. Geralmente, não é uma boa ideia colocar servidores com comportamento diferente (diferente de alguma forma que seja realmente significativo para o seu uso), tudo na lista.