No arquivo de configuração da interface de rede local, precisamos especificar que queremos obter o endereço do servidor DNS local do servidor DHCP usando a DHCP=
opção :
[Network]
DHCP=yes
ou especifique seu endereço explicitamente usando a DNS=
opção :
[Network]
DNS=10.0.0.1
Além disso, precisamos especificar (na mesma seção) domínios locais usando a Domains=
opção
Domains=domainA.example domainB.example ~example
Especificamos domínios locais domainA.example domainB.example
para obter o seguinte comportamento (na página de manual systemd-resolved.service, systemd-resolved ):
As pesquisas de um nome de host que termina em um dos domínios por interface são roteadas exclusivamente para as interfaces correspondentes.
Desta forma hostX.domainA.example
será resolvido exclusivamente pelo nosso servidor DNS local.
Especificamos com ~example
que todos os domínios terminados em example
devem ser tratados como domínios somente de rota para obter o seguinte comportamento (da descrição dessa confirmação):
Os servidores DNS que possuem domínios somente de rota devem ser usados apenas para os domínios especificados.
Desta forma hostY.on.the.internet
será resolvido exclusivamente por nosso servidor DNS remoto e global.
Nota
Idealmente, ao usar o protocolo DHCP, os nomes de domínio local devem ser obtidos no servidor DHCP em vez de serem especificados explicitamente no arquivo de configuração da interface de rede acima. Ver UseDomains=
opção . No entanto, ainda existem problemas pendentes com esse recurso - consulte a opção systemd-networkd DHCP search domains .
Precisamos especificar o servidor DNS remoto como nosso servidor DNS global em todo o sistema. Podemos fazer isso em /etc/systemd/resolved.conf
arquivo:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Não se esqueça de recarregar a configuração e reiniciar os serviços:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Cuidado!
As garantias acima aplicam-se apenas quando os nomes estão sendo resolvidos por systemd-resolved - consulte a página de manual para nss-resolve, libnss_resolve.so.2 e a página de manual de systemd-resolved.service, systemd-resolved .
Veja também:
Referências:
.local
neste exemplo? Certamente, com o avahi, isso deveria ser reservado para o MDNS e o uso indevido era um grande não-não. Seria mais claro para mim usarexample.com
ou .exemplo ..local
é definido como domínio especial no RFC 6762 - DNS Multicast na seção Nomes DNS Multicast . Obrigado, consertado./etc/systemd/network/*.network
? Encontrado aqui superuser.com/a/1365864Apenas para expandir a excelente resposta de @piotrDobrogost, não esqueça de configurar
/etc/nsswitch.conf
para usarsystemd-resolved
como uma fonte de resolução de DNS. Suahosts
diretiva deve ter a seguinte aparência para seu caso de uso específico:/etc/nsswitch.conf
Portanto, se você limitar a resolução apenas aos domínios especificados na
Domains
diretiva/etc/systemd/resolved.conf
como detalhes da Piotr acima, o DNS deverá ser consultado na ordem das fontes de resolução de nomes especificadas/etc/nsswitch.conf
quando os domínios NÃO forem encontrados naDomains
diretiva:O link a seguir faz referência ao requisito de especificar a resolução ,
/etc/nsswitch.conf
portanto,systemd-resolved
é consultado durante a resolução de nomes:https://github.com/systemd/systemd/issues/940
Documentação do SystemD que considero terrível. Eu tive que juntar um entendimento de vários links, incluindo a resposta de Piotr acima ;-)
fonte
/etc/resolve.conf
há um link simbólico para o/run/systemd/resolve/stub-resolv.conf
arquivo, que por sua vez contém o endereço do resolvedor de stub DNS do systemd-resolve, não há necessidade de colocar aresolve
diretiva no/etc/nsswitch.conf
arquivo, pois as solicitações de DNS serão direcionadas (devido ànss-dns
diretiva padrão ) a resolvedor de stub que age de acordo com as regras do systemd-resolved ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" arquivos ") seria verificado o mapeamento estático de IP: name e, se não fosse encontrado, o stub resolvido pelo sistema seria consultado em seguida . Não consigo ver como seria possível, portanto, preparar fontes de resolução de DNS sem usar/etc/nsswitch.conf
. Estou perdendo um truque aqui?/etc/nsswitch.conf
não é necessário. Estou dizendo que, quando alguém usa o resolvedor de DNS stub do resolvido pelo systemd , basta ter adns
diretiva listada nahosts:
linha (presumivelmente após afile
diretiva). Não há necessidade deresolve
diretiva, pois é o resolvedor de stub que é o ponto de entrada para a lógica do systemd-resolved e não onss-resolve
módulo de plug-in ...resolve
diretiva ➟ módulo de plug-in NSS nss-resolve NSS ➟ resolvido pelo sistema ou através dadns
diretiva ➟ módulo de plug-in NSS nss-dns NSS module módulo stub DNS resolvido pelo systemd- resolved systemd-resolvedfiles
entãoresolve
coisinha em/etc/nsswitch.conf
Da 2ª parte da sua pergunta. Relendo-o, parece que você estava apenas falando sobre verificar o cache local em busca de um IP: mapeamento de nomes e, em seguida, procurar um encaminhador, se não for encontrado. Geralmente, defino afiles
primeira fonte de resolução do DNS para contornar o DNS para permitir que eu teste e não atinja os hosts de produção- T