Estou tentando criar um algoritmo simples de resolução de DNS em cascata para meu laptop:
- Consulte os servidores fornecidos pelo DHCP
- Não encontrado/falhou? Consulta 8.8.8.8 e seus amigos
- Não encontrado/falhou? Consultar dnsmasq local em 127.ABC
Atualmente parece que o próximo servidor só é solicitado se o anterior falhar de uma forma ou de outra, mas se tiver respondido com uma resposta vazia, o processo de resolução será interrompido.
É possível forçar a máquina com Linux a fazer isso da maneira em cascata descrita acima, por meio de mecanismos de kernel ou resolvidos pelo systemd? Certamente é possível rotear solicitações por meio do dnsmasq (definindo systemd-resolved na primeira server=
diretiva para encaminhar a consulta para servidores fornecidos por DHCP), mas eu prefiro seguir um caminho menos confuso que mantenha o máximo possível da minha distribuição intacta.
Responder1
Infelizmente não é assim que o DNS funciona. A única vez que outros servidores serão consultados é quando o servidor definido anteriormente não estiver respondendo. QUALQUER resposta, mesmo que seja NXDOMAIN, é uma resposta. Mesmo uma resposta de Query Denied é uma resposta...
Responder2
Acontece que algo bastante semelhante que satisfaça minhas necessidades pode ser feito ao contrário (só porque os domínios não se sobrepõem). A funcionalidade necessária está no próprio dnsmasq e posso conseguir o que desejo da seguinte forma:
Inicie o systemd resolvido em 127.0.0.53
Adicione as regras necessárias ao dnsmasq.conf
address = /banana.services/127.0.0.1 address = /mango.services/127.0.0.1
Finalize dnsmasq.conf com servidores substitutos de DNS global e resolvido pelo systemd
server = 127.0.0.53 server = 8.8.8.8 server = 8.8.4.4 server = 1.1.1.1
Voila - agora* o dnsmasq primeiro servirá substituições locais, depois examinará o DNS local e, finalmente, se também retornar de mãos vazias, consultará a lista de servidores DNS conhecidos
* nsswitch.conf também pode exigir a alteração da ordem de resolução.