Por que as consultas DNS falham se o primeiro servidor de nomes não é recursivo?

6

Eu tenho uma caixa Linux (Ubuntu server 11.10) dentro de um domínio do Windows Active Directory, e ingressou no domínio usando igualmente aberto . O arquivo resolv.conf tem esta aparência:

domain mydomain.com
nameserver 192.168.1.1
nameserver 8.8.8.8
nameserver 8.8.4.4

onde 192.168.1.1 é o servidor DNS do Windows para o domínio do Windows. 8.8.8.8 e 8.8.4.4 são servidores DNS públicos do Google que preferimos em nossos servidores ISP.

Essa configuração estava funcionando corretamente, até que decidimos desativar a recursão no servidor DNS do Windows devido a algumas alterações de nosso projeto de rede. Eu pensei que iria bem como nós configuramos para usar os servidores do Google em seguida, mas não parece:

mydomain\myuser@linux-server:~$ dig google.com

; <<>> DiG 9.7.3 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55321
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;google.com.                    IN      A

;; AUTHORITY SECTION:
.                       3600    IN      NS      c.root-servers.net.
.                       3600    IN      NS      d.root-servers.net.
.                       3600    IN      NS      e.root-servers.net.
.                       3600    IN      NS      f.root-servers.net.
.                       3600    IN      NS      g.root-servers.net.
.                       3600    IN      NS      h.root-servers.net.
.                       3600    IN      NS      i.root-servers.net.
.                       3600    IN      NS      j.root-servers.net.
.                       3600    IN      NS      k.root-servers.net.
.                       3600    IN      NS      l.root-servers.net.
.                       3600    IN      NS      m.root-servers.net.
.                       3600    IN      NS      a.root-servers.net.
.                       3600    IN      NS      b.root-servers.net.

;; ADDITIONAL SECTION:
c.root-servers.net.     3600    IN      A       192.33.4.12
d.root-servers.net.     3600    IN      A       128.8.10.90
e.root-servers.net.     3600    IN      A       192.203.230.10
f.root-servers.net.     3600    IN      A       192.5.5.241

;; Query time: 4 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Jan  8 14:02:22 2014
;; MSG SIZE  rcvd: 507

Além disso:

mydomain\myuser@linux-server:~$ ping google.com
ping: unknown host google.com

E também falhei com conexões de proxy do squid (que resolvi usar a opção dns_nameservers dentro do squid configuração e negligenciada o servidor DNS interno).

Por que as solicitações de DNS falham quando a recursão é recusada pelo primeiro servidor de nomes? A máquina não deve tentar o próximo servidor? E o que posso fazer se esse foi o comportamento esperado (planejado)?

EDITAR: o NSLOOKUP deu outros resultados (de sucesso):

mydomain\myuser@linux-server:~$ nslookup google.com
;; Got recursion not available from 192.168.1.1, trying next server
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   google.com
Address: 173.194.67.102
Name:   google.com
Address: 173.194.67.138
Name:   google.com
Address: 173.194.67.100
Name:   google.com
Address: 173.194.67.113
Name:   google.com
Address: 173.194.67.139
Name:   google.com
Address: 173.194.67.101

Então, isso depende da aplicação? Posso obter isso (tentando próximo servidor se o primeiro recusa a recursão) para trabalhar de forma transparente para todos os aplicativos que solicitam a resolução de nomes, ou a resolução de nomes é de responsabilidade do próprio programa? (ou estou faltando alguma coisa ?!) ...

EDIT: Também vale a pena notar, mydomain.com é um endereço registrado e público na internet e não é de nossa propriedade. É como se tivéssemos criado um domínio interno chamado apple.com , e garanto que não trabalho para a Apple, pelo menos não ainda; -).

    
por amyassin 08.01.2014 / 12:15

1 resposta

5

Eu tenho medo que a resposta seja "depende".

No que diz respeito a dig , é basicamente uma ferramenta usada para depurar informações de DNS. Assim, mostra as informações que recebe do servidor de nomes que você solicitou; ele não continua e faz mais perguntas.

Para outros programas, dependerá do programa. A maioria provavelmente usará as funções do sistema operacional para resolução de nomes (consulte man getnameinfo ). Outros não podem. Isso significa que, se você listar um servidor de nomes não recursivo, terá alguns erros que serão muito difíceis de localizar.

Em outras palavras, manter um servidor de nomes não recursivo na sua lista de resolvedores é uma má ideia.

Se você não quiser que o servidor windows seja recursivo, então eu recomendo configurar um servidor separado para atuar como um resolvedor e permitir que ele pergunte ao servidor Windows sobre os domínios internos.

    
por 08.01.2014 / 13:51