Existe alguma maneira de configurar o dnsmasq para que, quando receber um registro CNAME, se o destino estiver em / etc / hosts, ele substitua o que o servidor DNS público diz sobre esse destino e use / etc / hosts?
Essa é a pergunta, mas se você estiver interessado no plano de fundo e nos detalhes, continue lendo.
Detalhes
Eu tenho um nome de domínio, vamos chamá-lo de example.com
. Eu configurei o domínio para minha rede doméstica como philadelphia.example.com
e, assim, os hosts podem estar em host1.philadelphia.example.com
e host2.philadelphia.example.com
.
Eu tenho DNS split-horizon configurado para que esses nomes funcionem tanto atrás do NAT quanto na Internet pública.
Por conveniência, quero acessar alguns deles como simplesmente host1.example.com
, etc. (sem o nome da cidade). Eu criei registros públicos CNAME para estes. Isso funciona bem em toda a Internet, mas não atrás do meu roteador.
Meu roteador (um EdgeRouter Lite, para o registro) usa o dnsmasq como seu servidor DNS. Ele adiciona automaticamente os registros de host1
e host1.philadelphia.example.com
a / etc / hosts quando emite a concessão DCHP, mas não host1.example.com
, pois example.com
não é seu domínio. Assim, quando recebe uma solicitação para host1.example.com
, ela encaminha para o DNS público.
O servidor DNS público localiza os seguintes registros e os retorna:
host1.example.com. 3600 IN CNAME host1.philadelphia.example.com.
host1.philadelphia.example.com. 3600 IN A <Router's external IP>
Na verdade, não tenho certeza se o servidor DNS público envia o registro A automaticamente ou se o dnsmasq emite uma segunda solicitação para ele. Em qualquer caso, o dnsmasq toma a palavra do servidor DNS público e retorna diligentemente o endereço IP público do roteador para o cliente original por trás do roteador, não o endereço IP privado do host1
de / etc / hosts.
Como teste adicional, tentei criar um registro CNAME para privatehost.example.com
- > privatehost.philadelphia.example.com
sem criar um registro público para ele, mas meu roteador tem uma entrada para privatehost.philadelphia.example.com
em / etc / hosts. Nesse caso, o servidor DNS público responde com o registro CNAME e depois com NXDOMAIN quando não consegue encontrar nada para privatehost.philadelphia.example.com
. Mesmo assim, o dnsmasq pega a palavra do servidor e retorna NXDOMAIN para o cliente, mesmo que tenha uma entrada para privatehost.philadelphia.example.com
.
Existe uma maneira de dizer ao dnsmasq para tentar seu próprio / etc / hosts novamente depois de buscar o CNAME, mesmo que ele tenha que ir ao DNS público para obtê-lo?
Tags dns networking dnsmasq cname