Quando o nslookup falha, ele não imprime uma resposta. Ele imprime uma única linha, e o código no final diz o que deu errado:
** server can't find nonexistent.invalid: NXDOMAIN
O exemplo consulta de propósito um nome sob .invalid: a (RFC) 6761, seção 6.4, permite supor que consultas a esses nomes sempre retornam NXDOMAIN, enquanto o example.com hoje responde NOERROR sem dados para nomes que não existem (a negação compacta da RFC 9824).
Os códigos
- NXDOMAIN (non-existent domain, domínio inexistente): o nome realmente não existe. Se você esperava que ele existisse, procure um erro de digitação, um registro que está faltando ou uma delegação que nunca foi configurada. Isso é uma resposta, e não um problema de rede: um servidor disse a você que o nome não está lá.
- SERVFAIL (server failure, falha do servidor): o servidor não conseguiu concluir a consulta. Na prática, isso aponta para uma delegação quebrada, uma falha na validação ou um servidor autoritativo upstream que deu timeout. Tente outro resolver (o servidor DNS recursivo que você consulta): se um resolver devolve SERVFAIL e outro responde, o problema provavelmente é o DNSSEC ou um caminho específico com defeito, e não o nome em si.
- REFUSED: o servidor se recusou a responder, quase sempre por política, por exemplo uma lista de controle de acesso que não inclui você, ou um resolver que não oferece recursão para o seu endereço. Confira se você tem permissão para usar o resolver que está consultando.
- timed out / no servers could be reached: o nslookup nunca recebeu resposta. Isso é um problema de conectividade, e não uma resposta do DNS: o endereço do resolver está errado ou inalcançável, um firewall está descartando a porta 53, ou o servidor está fora do ar. Confirme o endereço do resolver e se você consegue mesmo alcançá-lo.
A distinção que importa
A divisão útil é entre uma resposta que diz não e nenhuma resposta. NXDOMAIN e são o servidor dizendo algo definitivo, então a correção está na zona ou na consulta. SERVFAIL, REFUSED e timeouts são o servidor deixando de dar uma resposta utilizável, então a correção está no resolver, no caminho ou na delegação. Saber qual dos dois casos você tem na frente já aponta para a metade certa do problema.
SERVFAIL e REFUSED apontam culpados diferentes
Os dois parecem iguais, mas culpam partes diferentes.
REFUSED significa que o servidor entendeu o pedido e recusou: você não tem permissão para perguntar. Isso é política: um resolver recursivo que só atende a própria rede, ou um servidor autoritativo que não faz recursão para você. Nada está quebrado.
SERVFAIL significa que o servidor tentou e não conseguiu terminar. Timeouts upstream, uma delegação quebrada ou uma falha na validação DNSSEC, tudo isso cai aqui. Alguma coisa está quebrada, e normalmente não no servidor que você consultou.
E não use o código de saída em scripts
Muitas versões do nslookup saem com 0 mesmo em caso de NXDOMAIN. Um script de shell que testa if nslookup ... pode concluir que um nome resolve quando a ferramenta acabou de dizer a um humano que não resolve. Faça o parsing da saída, ou use uma ferramenta com códigos de saída confiáveis.