Eu tenho uma instalação simples com o Debian como convidado no Virtualbox. Eu instalei o resolvconf
pacote. O arquivo resolv.conf é este:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 10.3.x.x
nameserver 10.219.x.x
Adicionei servidores de nomes através da GUI (Aplicativos/Ferramentas de Sistema/Ferramentas de Rede).
O 8.8.8.8 é o DNS do Google e quero usá-lo para resolver endereços da Internet. O 10.3.xx e o 10.219.xx são necessários para resolver domínios internos como teleportal.company.intra.
Quando tenho esses servidores de nomes em resolv.conf (e 8.8.8.8 é o primeiro), recebo um erro ao consultar um endereço interno:
> host teleportal.company.intra
Host teleportal.company.intra not found: 3(NXDOMAIN)
No entanto, se eu definir explicitamente o nameserver
endereço do segundo como um servidor de nomes para nslookup, ele funcionará:
» nslookup teleportal.company.intra 10.3.x.x
Server: 10.3.x.x
Address: 10.3.x.x#53
teleportal.company.intra canonical name = proxy.dummy1.dummy2.private.
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
Name: proxy.dummy1.dummy2.private
Address: 172.27.x.x
A documentação do resolv.conf afirma que as nameserver
entradas serão tentadas em ordem, se uma delas não conseguir resolver a consulta. Porém se eu ativar o debug ao usar nslookup
vejo que nslookup
nem tenta outras entradas, apenas a primeira.
Se eu alterar a ordem dos nameservers
endereços internos serão resolvidos corretamente (o nslookup ainda usa apenas a primeira entrada).
Como posso configurar três servidores de nomes para que os utilitários usem todos eles em ordem?
Responder1
A resolv.conf
lista de servidores de nomes é contatada um após o outro somente em caso de timeout. Não quando um servidor de nomes diz com autoridade "não existe tal domínio" ( NXDOMAIN
). No seu caso, o DNS 8.8.8.8
aparentemente não sabe teleportal.company.intra
e o resolvedor parou quando obteve o arquivo NXDOMAIN
.
Se possível, você deve configurar um servidor DNS e usá-lo para todas as suas resoluções e deixar o servidor DNS decidir como resolver o nome. Se 10.3.x.x
for o seu servidor DNS da intranet, provavelmente também será capaz de resolver os nomes de host da Internet.
Dito isto, se você realmente deseja retransmitir as solicitações para diferentes servidores DNS com base nos nomes, você pode tentarpdnsd. É um programa proxy DNS de cache que seria executado localmente. Instale-o ( apt-get install pdnsd
) e adicione seu localhost ( 127.0.0.1
) ao resolv.conf. No pdnsd.conf
arquivo de configuração você pode especificar quais servidores DNS contatar com base na correspondência de nomes. Um parágrafo de exemplo para o seu /etc/pdnsd.conf
:
server {
label= "google";
exclude = ".company.intra";
ip = 8.8.8.8;
}
server {
label= "intra";
include = ".company.intra";
ip = 10.3.x.x;
}
Recortei muitos outros parâmetros no arquivo acima. Você deve seguir a documentação e o arquivo de configuração de exemplo que acompanha o pacote debian para configurar seu arquivo pdnsd.conf
.
Responder2
EUpensarque o resolvedor volte para DNS secundário (ou terciário ou ...)somente se o primeiro (ou segundo ou ...) falhar.
Neste caso a consultanão falha, ele retorna corretamente NXDOMAIN
, ou seja, o nome de domínio não existe.
Se você realmente deseja usar o DNS do Google (ou qualquer outro DNS) para resolver domínios externos (em vez de seus servidores de nomes internos), você pode configurar seus servidores 10.3.x.x
para 10.219.x.x
usar authoritative
apenas seus nomes internos e encaminhar todas as outras consultas para DNS externo e, em seguida, use seus servidores de nomes internos como seuapenasservidores de nomes em seus computadores internos.