Como o Windows decide qual servidor DNS usar na resolução de nomes?

41

Qual algoritmo o Windows usa para decidir qual servidor DNS ele consultará para resolver nomes?

Digamos que eu tenha várias interfaces, todas ativas, algumas sem servidor DNS especificado, algumas instruídas para determiná-lo automaticamente e outras especificadas manualmente (na interface ipv4 AND interface ipv6).

Estou pedindo uma resposta para essa pergunta geral, na esperança de saber como resolver um problema mais específico no Windows Vista - tenho duas interfaces, uma métrica mais baixa e um servidor DNS especificado manualmente. O nslookup usa ESTE servidor DNS e resolve os nomes corretamente. No entanto, todos os outros aplicativos não conseguem resolver o nome, a menos que eu especifique manualmente um servidor DNS para a outra interface, que os aplicativos usam. O nslookup também usa o servidor DNS especificado para essa outra interface, uma vez especificado.

obrigado

Artefacto
fonte

Respostas:

27

Se não me engano, é determinado pela ordem de ligação da NIC nas Configurações avançadas na pasta de conexões de rede. Você pode verificá-lo alterando a ordem de ligação das várias NICs e executando o nslookup como um teste.

Para expandir minha resposta, citando o artigo que Evan vinculou , aqui está um trecho do referido artigo:

O serviço de cliente DNS consulta os servidores DNS na seguinte ordem:

  1. O serviço de cliente DNS envia a consulta de nome ao primeiro servidor DNS na lista de servidores DNS do adaptador preferido e aguarda um segundo por uma resposta.

  2. Se o serviço Cliente DNS não receber uma resposta do primeiro servidor DNS dentro de um segundo, ele envia a consulta de nome para os primeiros servidores DNS em todos os adaptadores que ainda estão sendo considerados e aguarda dois segundos por uma resposta.

  3. Se o serviço Cliente DNS não receber uma resposta de nenhum servidor DNS dentro de dois segundos, o serviço Cliente DNS envia a consulta a todos os servidores DNS em todos os adaptadores que ainda estão sendo considerados e aguarda outros dois segundos por uma resposta.

  4. Se o serviço de cliente DNS ainda não receber uma resposta de nenhum servidor DNS, ele envia a consulta de nome a todos os servidores DNS em todos os adaptadores que ainda estão sendo considerados e aguarda quatro segundos por uma resposta.

  5. Se o serviço Cliente DNS não receber uma resposta de nenhum servidor DNS, o cliente DNS enviará a consulta a todos os servidores DNS em todos os adaptadores que ainda estão sendo considerados e aguarda oito segundos por uma resposta.

O adaptador preferido na etapa 1 é o adaptador listado primeiro na ordem de ligação.

joeqwerty
fonte
4
Esse processo mudou no Windows 10, embora eu não conheça o novo processo, mas sei que o acima não se aplica ao Windows 10, consulte este blog - blogs.technet.microsoft.com/networking/2015/08/14/…
Robert
14

No Windows 10 (e Windows Server 2016), você deve atualizar a métrica de cada interface na ordem que desejar.

  1. Ir para Painel de Controle> Rede e Internet> Conexões de Rede
  2. Clique com o botão direito do mouse na conexão desejada (Conexão de prioridade mais alta)
  3. Clique em Propriedades> Internet Protocol Version 4
  4. Clique em Propriedades> Avançado
  5. Desmarque 'Métrica automática'
  6. Digite 10 em 'Interface Métrica'
  7. Clique OK

Referências:

Usei 10 para minha LAN, 20 para WLAN e 100 para interfaces VPN (prefiro o DNS local no trabalho, isso pode ser inverso para outros). Lembre-se de métrica mais baixa = prioridade mais alta .

Consulte este artigo no Suporte da Microsoft para obter uma explicação do recurso de métrica automática para rotas IPv4 .

Jacob Evans
fonte
+1 Para mim no Windows 10, essa foi a única solução, obrigado.
GμårÐïåñ
A modificação métrica afeta apenas a seleção de rota. Não afeta qual servidor DNS será usado.
Jruv 25/10
14 votos positivos e experiência pessoal discordam, concordo que não deveria, mas os desenvolvedores da microsoft pareciam ter codificado dessa maneira.
Jacob Evans
8

Esta página descreve o algoritmo usado pelo Windows para executar consultas DNS. Não é aprofundado o suficiente para fornecer todas as respostas que você procura, mas algum tempo com um sniffer e este artigo devem ser tudo o que você precisa para determinar o que está acontecendo em sua situação específica.

Evan Anderson
fonte
3

Eu tive exatamente o mesmo problema. Passei um dia tentando descobrir. Agora eu sei e funciona como um encanto.

Se você tiver várias placas de rede e se especificar um servidor DNS em cada uma delas. Você sabe qual servidor DNS será usado finalmente?

Bem, você pode verificá-lo através da prática.

nslookup 192.168.3.6

Então você vê o servidor que seu PC realmente usa

A questão é: do que depende as janelas do servidor DNS que você escolhe usar e como podemos alterá-lo.

Precisamos especialmente disso quando usamos clientes VPN.

A resposta de qwerty2010 está certa e correta. Mas você pode usá-lo APENAS quando tiver NIC no painel de controle - centro de rede e compartilhamento - alterar configurações do adaptador - lista de placas de rede

Somente se você vir o nic que é responsável pelo seu cliente VPN, poderá usar a maneira gráfica de apontar para o Windows o servidor DNS (especificado em um nic específico) que você gostaria de usar.

Então vá ao Centro de rede e compartilhamento -> Altere as configurações do adaptador -> Avançado -> Configurações avançadas -> e mova o nicho com o DNS que deseja usar. (UP você precisa levantá-lo).

No entanto, se, por exemplo, você usar o cliente Shrew vpn - você não terá nenhuma placa de rede.

O que você faz.

Você abre o registro.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

E você olha nas subpastas 0000, 0001 etc a pasta com

DriverDesc = Shrew Soft Virtual Adapter

bem. Então você copia para a área de transferência

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

Agora você vai

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

e você abre key = Bind. Você verá a lista assim

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Tudo o que você precisa fazer é colocar no topo

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

Isso é tudo. Não há necessidade de reiniciar.

Agora, o seu Windows usará o DNS especificado no shrew vpn nic quando você usar a conexão vpn.

Alex
fonte
0

Como isso pode ajudar você ou outras pessoas, é possível desativar o uso de round-robin do Windows dos DNS listados para tornar o uso de DNS mais previsível. Tente definir RoundRobin=0na HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( referência ) para desativar o round-robing do DNS.

Há também um "tempo limite" para rotacionar os servidores, você também pode tentar defini-lo como zero :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0
higuita
fonte
De acordo com a "referência" mencionada (link), isso se aplica à configuração do servidor DNS ao fornecer vários endereços IP para algum FQDN consultado em ordem de classificação rotacionada de consulta para consulta. Isso não tem nada a ver com a pergunta sobre como um resolvedor de DNS (cliente) está escolhendo o servidor DNS a ser consultado.
Thomas Urban
-13

Não decide aleatoriamente. Você está conectado a um roteador que obtém IP de uma empresa que possui servidores DNS. Eles recebem sua solicitação, a menos que você altere o IP manualmente para outro DNS, por exemplo: OpenDns . Ou talvez você decida ter seus próprios servidores DNS. Isso também funciona. Basta digitar os endereços IP no centro da rede e tudo deve ficar bem. E sim, você terá que configurá-las manualmente.

Você também pode ajustar um arquivo C:\Windows\System32chamado "hosts" sem extensão. Permite redirecionar solicitações de URL em vez de serem enviadas para o DNS padrão. Para um servidor local (que deve estar em execução e ouvindo a porta 80)

KdgDev
fonte
18
Basicamente tudo o que você já disse aqui é errado
MDMarra
3
E um -1 adicional por mencionar a abominação purulenta que é o arquivo de hosts.
Maximus Minimus
Maneira de ser MarkM informativo
KdgDev
4
@WebDevHobo - Há realmente muito o que corrigir em um comentário, mas abordarei os grandes pontos. 1) O OP possui um computador com várias interfaces (provavelmente placas de rede separadas) e cada uma possui um DNS diferente definido. No contexto da pergunta, ele está executando claramente alguns servidores DNS internos ou possui alguns servidores DNS externos preferenciais - a caixa provavelmente é de hospedagem múltipla. 2) Você não precisa definir o endereço de um servidor DNS interno manualmente se estiver usando DHCP na configuração do servidor DHCP para esse pool de endereços. 3) O caminho para o arquivo hosts é C: \ Windows \ System32 \ drivers \ etc
MDMarra
3
E o arquivo HOSTS não deve ser usado nessa situação, ou praticamente sempre, a menos que você esteja desenvolvendo localmente e usando cabeçalhos HOST ou algo parecido e precise de um FQDN para resolver localmente. E o servidor não precisa estar executando a porta 80, seja usando o arquivo HOSTS para resolução de nomes ou um servidor DNS. Basta anexar: port_number ao final da URL. O HOSTS não se importa com a porta, assim como o DNS não - é uma maneira de converter um nome de host em um endereço IP e nada mais.
21450 MDMarra