Faça a seguinte configuração:
- Eu corro uma rede privada atrás de um roteador NAT
- Os sistemas na rede privada podem se conectar a qualquer recurso na Internet e, portanto, precisam de resolução de nome DNS para qualquer recurso da Internet
- Eu possuo um domínio (digamos,
example.com
) que possui recursos na Internet e um servidor de nomes gerenciado pelo provedor. - O provedor gerencia recursos públicos e pode atualizar os registros DNS para refletir as alterações. Ou seja, o
MX
paraexample.com
pode apontar para um servidor diferente amanhã, ou o endereço IP parawww.example.com
pode mudar durante a noite, sem que eu seja notificado. - Desejo usar o mesmo domínio para recursos em minha rede interna; os recursos internos estão em um subdomínio (por exemplo
fileserver.internal.example.com
, ). No entanto, não quero expor esses registros DNS à Internet.
O último item significa que preciso executar meu próprio servidor DNS internamente e fazer com que ele responda às consultas da minha zona. No entanto, preciso garantir que as consultas de quaisquer recursos públicos sejam respondidas pelos servidores DNS do provedor.
Até agora, tenho usado o recurso DNS Forwarder no pfSense, que faz exatamente o que preciso. Posso adicionar registros para sistemas internos (ou até mesmo fazer com que o servidor DHCP os insira automaticamente para qualquer concessão que conceda), que serão retornados se o servidor DNS receber uma solicitação para qualquer um deles. Quaisquer outras solicitações serão encaminhadas para o respectivo servidor de nomes externo.
Agora estou tentando fazer o mesmo com um servidor Linux, possivelmente usando BIND. Estou imaginando uma configuração como a seguinte:
- Configure o BIND para operar em modo recursivo/cache, como faria um DNS de ISP.
- Configure-o para ser o servidor de nomes autoritativo para
internal.example.com
. - Configure RRs para sistemas internos na
internal.example.com
zona.
Isso funcionaria como pretendido, já que ninguém no mundo exterior conhece a internal.example.com
zona? O BIND dá preferência a qualquer zona para a qual seja autoritário (em vez de tentar localizá-lo consultando primeiro a zona raiz) ou pode ser configurado para fazer isso?
Quando configurado como um servidor recursivo, o BIND usará primeiro as zonas para as quais tem autoridade antes de percorrer toda a árvore DNS a partir da raiz. Portanto, desde que os nomes em sua rede privada residam em sua própria zona, a configuração descrita acima funcionará.
Você pode até criar várias zonas; a única limitação é que você precisará manter todos os registros nas zonas que criar e garantir que estejam atualizados. Eles podem se referir a servidores na Internet, mas você precisará espelhar manualmente todas as alterações que seu provedor de hospedagem fizer, caso contrário, seus serviços públicos podem não ser mais acessíveis a partir de sua rede interna.
Há um bom artigo sobre este tópico exato em https://gist.github.com/Nilpo/1a70ebca988ad0743ea533d747445148 . Eu fiz um teste no Ubuntu 18.04, e o pacote BIND vem pré-configurado como um servidor de nomes de cache, então tudo que você precisa fazer é adicionar e preencher seus arquivos de zona conforme necessário, recarregar a configuração e apontar seus sistemas para esse servidor.