Estou conectado à rede local com acesso à Internet através do gateway. Existe um servidor DNS na rede local que é capaz de resolver nomes de host de computadores da rede local.
Gostaria de configurar systemd-resolved e systemd-networkd para que as solicitações de pesquisa de nomes de host locais fossem direcionadas (roteadas) exclusivamente para o servidor DNS local e as solicitações de pesquisa de todos os outros nomes de host fossem direcionadas exclusivamente para outro servidor DNS remoto.
Vamos supor que eu não saiba onde estão os arquivos de configuração ou se devo adicionar mais arquivos e exigir que seus caminhos sejam especificados na resposta.
No arquivo de configuração da interface de rede local (um arquivo que corresponde ao padrão de nome
/etc/systemd/network/*.network
), temos que especificar que queremos obter o endereço do servidor DNS local do servidor DHCP usando aDHCP=
opção :ou especifique seu endereço explicitamente usando a
DNS=
opção :Além disso, precisamos especificar (na mesma seção) domínios locais usando a
Domains=
opçãoEspecificamos domínios locais
domainA.example domainB.example
para obter o seguinte comportamento (de systemd-resolved.service, página man systemd-resolved):Esta forma
hostX.domainA.example
será resolvida exclusivamente pelo nosso servidor DNS local.Especificamos
~example
que todos os domínios que terminam emexample
devem ser tratados como domínios somente de rota para obter o seguinte comportamento (da descrição deste commit):Esta forma
hostY.on.the.internet
será resolvida exclusivamente pelo nosso servidor DNS remoto global.Observação
Idealmente, ao usar o protocolo DHCP, os nomes de domínio local devem ser obtidos do servidor DHCP em vez de serem especificados explicitamente no arquivo de configuração da interface de rede acima. Veja
UseDomains=
opção . No entanto, ainda há problemas pendentes com esse recurso - consulte o problema da opção de domínios de pesquisa DHCP systemd-networkd .Precisamos especificar o servidor DNS remoto como nosso servidor DNS global para todo o sistema. Podemos fazer isso no
/etc/systemd/resolved.conf
arquivo:Não se esqueça de recarregar a configuração e reiniciar os serviços:
Cuidado!
As garantias acima se aplicam somente quando os nomes estão sendo resolvidos por systemd-resolved – consulte a página man para nss-resolve, libnss_resolve.so.2 e a página man para systemd-resolved.service, systemd-resolved .
Veja também:
Referências:
Apenas para expandir a excelente resposta de @piotrDobrogost, não se esqueça de configurar
/etc/nsswitch.conf
para usarsystemd-resolved
como 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
conforme os detalhes de 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 para especificar a resolução para
/etc/nsswitch.conf
quesystemd-resolved
seja consultado durante a resolução de nomes:https://github.com/systemd/systemd/issues/940
A documentação do SystemD que achei terrível. Eu tive que juntar um entendimento de vários links, incluindo a resposta de Piotr acima ;-)
Se você está fazendo isso porque tem uma conexão configurada com OpenVPN, você precisa usar https://github.com/jonathanio/update-systemd-resolved conforme https://wiki.archlinux.org/index.php/OpenVPN #The_update-systemd-resolved_custom_script
Especificamente, uma vez que você tenha o
update-systemd-resolved
script instalado e ativo na configuração do cliente OpenVPN, você também adicionarádhcp-option DOMAIN-ROUTE yourdomain.com
à mesma configuração do cliente.Você deve ver a seguinte saída do OpenVPN:
E você pode verificar a configuração do DNS com
resolvectl status
: