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 com ela especificada manualmente (na interface ipv4 E na interface ipv6).
Estou pedindo uma resposta para esta pergunta geral esperando que eu saiba como resolver um problema mais específico no Windows Vista - eu tenho duas interfaces, uma de métrica mais baixa e um servidor DNS especificado manualmente. 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
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 nslookup como um teste.
Para expandir minha resposta, citando o artigo que Evan vinculou , aqui está um trecho do referido artigo:
O adaptador preferencial na etapa 1 é o adaptador listado primeiro na ordem de ligação.
No Windows 10, você deve atualizar a métrica de cada interface na ordem desejada.
Referências:
Usei 10 para minha LAN, 20 para WLAN e 100 para interfaces VPN (prefiro DNS local no trabalho, isso pode ser reverso 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 .
Suspeito que isso funcione porque parte da seleção de rota é definir o IP de origem da interface com a prioridade de métrica mais alta (número mais baixo), pois você não está usando o mesmo endereço IP para todas as conexões, enquanto uma conexão BGP de hospedagem dupla seria use o mesmo IP de origem, mas selecione diferentes gateways de próximo salto com IP de destino pendente.
Para o servidor, instale o serviço DNS e faça algo proposital/inteligente, não concordo em fazer isso no sistema operacional do servidor.
Para responder especificamente à pergunta, o Windows usa os primeiros registros DNS associados à interface de rede de classificação mais alta (uma
InterfaceMetric
com um valor mais baixo tem uma classificação mais alta). Os exemplos abaixo mostram como obter e alterar esse valor de classificação da interface. Quando não há servidores DNS manuais configurados em uma interface, o Windows conta com servidores DNS fornecidos por qualquer servidor DHCP associado a uma interface de rede.Um cenário comum em que esse problema aparece é quando você tem uma ou mais VPNs que fornecem um servidor DNS para recursos definidos para essa rede virtual.
No entanto, o servidor DNS público atribuído por um roteador WiFi está prevalecendo e alegando que os hosts não existem ou estão respondendo com o endereço IP inesperado.
Para resolver isso, precisamos ditar explicitamente qual interface de rede deve ter precedência, especificando sua "métrica" associada. (Atualmente, essa métrica parece ser configurável apenas via PowerShell... veja abaixo )
Alterar a métrica da interface de rede (por exemplo, a VPN)
Primeiro, liste as interfaces locais e suas métricas
Em seguida, defina a métrica da interface de rede
(OBSERVAÇÃO: certifique-se de fazer isso em um console administrativo do PowerShell)
Efeito de teste da métrica de interface
Neste exemplo, antes de alterar o valor da métrica, fazer ping em um recurso local que também tenha um IP definido publicamente retorna seu IP público (em vez do IP interno retornado pelo servidor DNS da minha VPN).
Exemplo quando ruim! :(
Exemplo Quando Bom! :)
Depois de alterar a métrica na interface de rede, agora vejo o endereço IP interno esperado que é retornado do servidor DNS associado à minha VPN:
Esta página descreve o algoritmo usado pelo Windows para realizar consultas DNS. Não é profundo o suficiente para lhe dar todas as respostas que você está procurando, mas algum tempo com um farejador e este artigo deve ser tudo o que você precisa para determinar o que está acontecendo em sua situação específica.
Eu tive exatamente o mesmo problema. Passei um dia tentando descobrir.
Se você tiver várias placas de rede e especificar um servidor DNS em cada uma delas, você sabe qual servidor DNS será usado?
Bem, você pode verificar com:
Então você vê o servidor que seu PC realmente usa.
A questão é: como o Windows escolhe qual servidor DNS usar e como podemos alterá-lo.
Precisamos dele especialmente quando usamos clientes VPN.
A resposta do qwerty2010 está certa e correta. Mas você pode usá-lo SOMENTE quando tiver uma NIC no painel de controle - centro de rede e compartilhamento - alterar as configurações do adaptador - lista de nics
Somente se você vir o nic responsável pelo seu cliente VPN, poderá usar o modo gráfico.
Então você vai Centro de rede e compartilhamento -> Alterar configurações do adaptador -> Avançado -> Configurações avançadas -> e move o NIC com o DNS que você gostaria de USAR.
No entanto, se, por exemplo, você usar o cliente vpn Shrew - você não terá nenhum nic.
O que você faz? Você abre o registro.
E você procura nas subpastas 0000, 0001 etc a pasta com
Então você copia para a área de transferência
Agora você vai
e você abre
key = Bind
. Você verá a lista assimTudo que você tem a fazer é colocar no topo
Isso é tudo. Não há necessidade de reiniciar.
Agora, suas janelas usarão o DNS especificado em shrew vpn nic quando você usar a conexão vpn.
No Windows 10 e 11, a prioridade do DNS é determinada pela métrica da interface, isso está documentado aqui - os servidores DNS na interface com o valor de métrica mais baixo serão usados primeiro.
É importante observar que uma interface na verdade tem dois valores de métrica de interface, um para IPv4 e outro para IPv6.
Você pode configurá-los via:
Ou via Powershell:
Para fins de DNS é considerado o menor dos dois valores, ou seja, a lista de interfaces é classificada pelo min(Ipv4Metric, Ipv6Metric).
Cada interface (por exemplo, Ethernet ou WiFi) tem uma lista de servidores DNS, mas nessa lista os servidores IPv6 vêm primeiro.
Aqui está um cenário de exemplo:
O Windows encontra primeiro a melhor interface - Ethernet 2, pois possui a métrica mais baixa e, portanto, usará o servidor DNS
10.2.2.2
A próxima melhor interface é a Ethernet 1, o Windows tentará,
2001:db8::1
pois os servidores DNS IPv6 são usados primeiro. E então finalmente10.1.1.1
Nota: Veja meus experimentos que provam isso
Como isso pode ajudar você ou outras pessoas, você pode desabilitar o uso de round-robin do Windows dos dns listados para tornar o uso de dns mais previsível. Tente configurar
RoundRobin=0
noHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters
( reference ) para desabilitar o dns round-robing.Há também um "timeout" para girar os servidores, você também pode tentar defini-lo como zero :
Não decide aleatoriamente. Você está conectado a um roteador que obtém o 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 de rede e tudo deve estar bem. E sim, você terá que configurá-los manualmente.
Você também pode ajustar um arquivo
C:\Windows\System32
chamado "hosts" sem extensão. Ele permite que você tenha solicitações de URL redirecionadas em vez de serem enviadas para o DNS padrão. Para um servidor local (que deve estar executando e ouvindo a porta 80)