Gostaria de configurar um encaminhador de DNS básico que faça duas coisas.
Primeiro, ele simplesmente encaminha as consultas DNS para o fluxo ascendente. Segundo, se os servidores DNS upstream não puderem resolver um nome de host, esse encaminhador de DNS deverá retornar um endereço IP de lixo, como 127.255.255.255
ou 100::
.
O resultado disso pode ser que todos os nomes de host sempre devam ser resolvidos, mas os nomes de host que normalmente não seriam resolvidos são resolvidos em um endereço IP de lixo.
Por exemplo, se eu tivesse dois nomes de host: resolvable
, que o servidor DNS upstream sabe, está em 1.2.3.4
; e notresolvable
para o qual o servidor DNS upstream não conhece o endereço IP. Se eu, então, consultar o DNS encaminhado com esses dois nomes de host, resolvable
retornaria 1.2.3.4
e notresolvable
retornaria 127.255.255.255
(em vez de não ser encontrado).
Hostname: resolvable notresolvable
| / \ | / \
| | | |_________
\ / | \ / |
DNS Forwarder: forward found forward not __\ use garbage ip
upstream ip=1.2.3.4 upstream found / ip=127.255.255.255
| / \ | / \
| | | |
\ / | \ / |
Upstream DNS found ip=1.2.3.4 not found
server:
O mais próximo que eu tenho de fazer esse sistema acontecer é com o dnsmasq. O dnsmasq, por padrão, envia as consultas do DNS para o upstream, de forma que funcione como meu primeiro requisito.
Eu também posso adicionar address=/#/127.255.255.255
ao final de /etc/dnsmasq.conf
, que então resolve todos os nomes de host para o endereço IP de lixo. No entanto, isso também resolve nomes de host que o servidor DNS upstream pode resolver, que não é o que eu quero.
Depois de ler a página man dnsmasq , encontrei isso na seção de endereços:
Queries in the domains are never forwarded
que sugere para mim que o que eu preciso não é possível com o dnsmasq.
Então, minha pergunta é: qual programa é mais adequado para tornar essa configuração possível e como eu faria isso?
Eu tenho um aplicativo em execução em um contêiner do Docker que usa a rede do docker para se conectar a outros contêineres do Docker usando nomes de host.
O problema que estou tentando resolver é que o aplicativo não inicia ou continua em execução se um nome de host não resolver (o que ocorre se o contêiner ao qual ele está fazendo referência não estiver sendo executado).
Assim, o servidor dns que eu referenciei acima seria um servidor que corre ao lado do aplicativo dentro do contêiner docker.
Também removi a referência a resolv.conf
, pois não parece necessário fazer isso funcionar. O servidor dns só precisa encaminhar para o servidor de dns interno do docker, que por acaso está listado em resolv.conf
.