Como encaminhar solicitação de DNS de zona local para DNS externo quando não houver correspondência local (BIND9)

Como encaminhar solicitação de DNS de zona local para DNS externo quando não houver correspondência local (BIND9)

Eu tenho um domínio example.come uso o DNS do Azure para resolver todos os nomes de host que devem estar visíveis na Internet. Defini mail.example.compara apontar 198.51.100.123e pode ser resolvido por clientes externos sem nenhum problema.

O example.comtambém é usado na minha LAN e usa bind para resolver todos os endereços IP locais, o que funciona bem para os nomes de host locais. Meu servidor DHCP também sabe como lidar com isso e atualiza os arquivos de zona corretamente. Todas as solicitações de DNS para outras zonas são encaminhadas para o DNS da Cloudflare.

Gostaria que meu servidor usasse o servidor de nomes local e, se não conseguir encontrar uma entrada no arquivo de zona local, entre em contato com o servidor do Azure e verifique-o. Quando adiciono as seguintes entradas ao meu arquivo de zona, isso funciona para estes nomes de host:

external-dns            A       1.1.1.1
vpn                     NS      external-dns
www                     NS      external-dns
ftp                     NS      external-dns

Os curingas não funcionam mais no Bind9, então não posso usar * NS external-dns. Existe alguma outra maneira de conseguir isso?

Responder1

Use uma response-policyzona em vez de uma zona mestre paraexample.com

Ao tentar resolver um nome de host, o bind procurará response-policyprimeiro no arquivo de zona e, se não encontrar a resposta, continuará procurando.

Aqui está um exemplo de configuração:

options {
    # Your normal options
    response-policy { zone "local_example_com"; };
};
zone "local_example_com" {
    type master;
    file "master/local_example.zone";
    allow-query {none;};
};

Em seguida, adicione um arquivo de zona chamado master/local_example.zonecontendo o seguinte:

$TTL 24H
@    SOA LOCALHOST. named-mgr.example.com (1 1d 1h 30d 2h)
     NS  LOCALHOST.

host1.example.com     A   192.168.1.1
host2.example.com     A   192.168.1.2
host3.example.com     A   192.168.1.3
host4.example.com     A   192.168.1.4

Quando você tentar resolvê host1.example.com-lo, obterá a resposta da response-policyzona e, quando tentar resolvê- mail.example.comlo, irá resolvê-lo usando example.comservidores de nomes.

Responder2

Um curinga não é possível, então decidi usar uma abordagem diferente:

  1. Todos os sites externos estão hospedados no example.comdomínio.
  2. Todos os sites internos estão hospedados no int.example.comdomínio.

O example.comnão foi alterado de forma alguma e ainda está disponível no DNS do Azure (como sempre foi). O servidor Bind interno agora hospeda o int.example.comdomínio e o servidor DHCP também é atualizado para enviar int.example.comcomo domínio local.

Quero que meus sites internos estejam disponíveis via HTTPS, então preciso poder criar certificados usando LetsEncrypt para o int.example.comdomínio. LetsEncrypt não consegue acessar meus serviços internos, então tenho que reverter para a verificação de DNS.

Adicionei a int.example.comzona como uma zona filha example.comno DNS do Azure. Esta zona não terá nenhuma entrada DNS, pois para isso utilizamos o servidor local. Não queremos expor nenhuma informação interna a servidores DNS externos. Seu único objetivo é a verificação de DNS para LetsEncrypt, portanto, AcmeSh deve ter as credenciais adequadas para criar/remover registros TXT. eu seguieste guiapara criar as credenciais adequadas. Minha configuração está usando o DNS do Azure, mas deve funcionar para qualquer DNS que suporte subzonas.

informação relacionada