Eu tenho uma rede interna com um servidor DNS executando o BIND, conectado à Internet através de um único gateway. Meu domínio "example.com" é gerenciado por um provedor DNS externo. Algumas das entradas desse domínio, como "host1.exemplo.com" e "host2.exemplo.com", bem como a entrada de nível superior "exemplo.com", apontam para o endereço IP público do gateway.
Gostaria que os hosts localizados na rede interna resolvessem "host1.example.com", "host2.example.com" e "example.com" para endereços IP internos, em vez do gateway. Outros hosts como "otherhost.example.com" ainda devem ser resolvidos pelo provedor DNS externo.
Consegui fazer isso nas entradas host1 e host2, definindo duas zonas de entrada única no BIND para "host1.example.com" e "host2.example.com". No entanto, se eu adicionar uma zona para "example.com", todas as consultas para esse domínio serão resolvidas pelo servidor DNS local e, por exemplo, ao consultar "otherhost.example.com" resultará em um erro.
É possível configurar o BIND para substituir apenas algumas entradas de um domínio e resolver o resto recursivamente?
fonte
Respostas:
O melhor método é através da zona de política de resposta no Bind 9.8.1 ou mais recente. Ele permite que você substitua registros únicos em zonas arbitrárias (e não há necessidade de criar um subdomínio inteiro para isso, apenas o único registro que você deseja alterar), permite substituir CNAMEs, etc. Outras soluções, como Unbound, não podem substituir CNAMEs .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDIT: Vamos fazer isso corretamente então. Documentarei o que fiz com base no tutorial vinculado acima.
Meu sistema operacional é o Raspbian 4.4 para Raspberry Pi, mas a técnica deve funcionar sem nenhuma alteração no Debian e Ubuntu, ou com alterações mínimas em outras plataformas.
Vá para onde os arquivos de configuração do Bind são mantidos no seu sistema - aqui está
/etc/bind
. Crie lá um arquivo chamadodb.rpz
com o seguinte conteúdo:O que isso faz?
www.some-website.com
falso127.0.0.1
, enviando efetivamente todo o tráfego desse site para o endereço de loopbackwww.other-website.com
outro site chamadofake-hostname.com
Qualquer coisa que possa entrar em um arquivo de zona de ligação, você pode usar aqui.
Para ativar essas alterações, existem mais algumas etapas:
Edite
named.conf.local
e adicione esta seção:O tutorial vinculado acima diz para você adicionar mais coisas,
zone "rpz" { }
mas isso não é necessário em configurações simples - o que mostrei aqui é o mínimo para fazê-lo funcionar no seu resolvedor local.Edite
named.conf.options
e em algum lugar daoptions { }
seção adicione aresponse-policy
opção:Agora reinicie o Bind:
É isso aí. O servidor de nomes deve começar a substituir esses registros agora.
Se você precisar fazer alterações, basta editar
db.rpz
e reiniciar o Bind novamente.Bônus: se você deseja registrar consultas DNS no syslog, para acompanhar os procedimentos, editar
named.conf.local
e verificar se há umalogging
seção que inclua estas instruções:Reinicie o Bind novamente e é isso.
Teste-o na máquina executando o Bind:
Se você executar o dig em uma máquina diferente, use @ o endereço IP do Bind-server em vez de @ 127.0.0.1
Usei essa técnica com grande êxito para substituir o CNAME de um site no qual eu estava trabalhando, enviando-o para um novo balanceador de carga da AWS que eu estava testando. Um Raspberry Pi foi usado para executar o Bind, e o RPi também foi configurado para funcionar como um roteador WiFi - portanto, ao conectar dispositivos ao SSID em execução no RPi, recebia as substituições de DNS necessárias para o teste.
fonte
O servidor DNS recursivo não vinculado tem a capacidade de substituir registros de recursos individuais.
Veja as definições de configuração
local-zone
elocal-data
no manual , por exemplo:A
transparent
configuração nolocal-zone
diz para ele fazer pesquisas recursivas normais para qualquer nome não fornecidolocal-data
.fonte
unbound
no meu próprio roteador, acho que a solução é muito melhor.Você pode procurar no "dnsmasq", que permite fazer algumas coisas bem inteligentes com a resolução de ajustes.
fonte
O que você procura é o DNS dividido, definido pela Webopedia como:
Essencialmente, você precisará fazer uma cópia do seu arquivo de zona externa e apoiá-lo no servidor DNS interno, depois alterar ou adicionar os registros necessários especificamente para a sua rede interna. Essa é uma configuração bastante comum, embora possa ser difícil manter os registros "externos" sincronizados entre os dois servidores DNS. Se você criar ou alterar um registro no servidor público, ele também precisará ser criado ou alterado no servidor privado.
Isso pode ser implementado independentemente de qual implementação de servidor DNS você usa. Na maioria das configurações, você terá um servidor DNS que serve a rede externa e um servidor diferente que serve a rede interna. Com o BIND, como possivelmente outras implementações, você pode ter as duas versões da zona no mesmo servidor através do uso da instrução "allow-query" na seção de zona do arquivo named.conf.
Outra possibilidade no BIND (e nunca tentei isso) seria definir o domínio example.com no servidor DNS interno com apenas os registros que você usa internamente. Em seguida, defina uma instrução "forward" com o argumento "first" (em conjunto com "forwarders"). Em teoria, isso pediria ao servidor DNS externo (conforme definido em "encaminhadores") uma resposta que não teria seus registros internos e retornaria uma resposta de falha. Em seguida, o servidor interno procuraria uma resposta. claro se isso funcionaria, mas é um pensamento.
fonte
No BIND, chego a esses resultados definindo uma zona usando o nome do host desejado. A abordagem é boa se você deseja substituir apenas alguns hosts.
Minha declaração de zona é assim:
Minha definição de zona fica assim:
Portanto, se eu consultar example.com no DNS da intranet e no DNS do ISP, obtenho o mesmo IP, mas se consultar override.example.com, obtenho resultados diferentes se o DNS da intranet (primário) estiver acessível.
fonte
Você já está no caminho certo.
Nos servidores DNS internos, você precisará definir uma zona para cada host de exceção imediatamente abaixo do "example.com". Para minimizar essas exceções, é prática comum nomear todas as máquinas internas "hosta.internal.example.com", com o servidor DNS enviando a maioria das consultas para servidores DNS externos, mas com autoridade para a zona "internal.example.com". (Depois de passar por pequenas operações, geralmente há um servidor DNS para o qual os clientes são direcionados e um DNS autoritativo separado para o qual esses servidores são direcionados para "internal.example.com".)
Geralmente, é somente quando um host deve ser alcançável externa e internamente que as exceções que você descreve são criadas. Mesmo assim, convém usar "host1.example.com" de fora e "host1.internal.exemplo.com" de dentro. Os hosts internos são configurados para procurar nomes em "internal.example.com". Há situações em que o que você já está fazendo é apropriado, como se o certificado de um servidor identificasse o servidor como "host1.example.com"; nesse caso, você deseja que esse seja o nome ao qual os clientes se conectam.
fonte
O uso do dnsmasq facilita bastante. http://www.thekelleys.org.uk/dnsmasq/doc.html Atua como servidor DNS, mas obtém respostas do servidor DNS local. O legal é que você pode substituir registros de domínio único sem mexer com arquivos de zona
fonte
Por uma questão de fato, há outra maneira, mesmo que talvez um pouco diferente, de fazer isso. Tenho a mesma situação, tenho um domínio usado externamente e internamente e tenho hosts estáticos e dinâmicos externos. Os únicos realmente dolorosos são os dinâmicos externos. A solução possivelmente não é a mais elegante, mas implementável com um pequeno script. Principalmente, estou fazendo meu próprio script DNS dinâmico com a API do meu provedor de DNS dinâmico. Executo esse script pelo cron, a cada 5 minutos:
1) obtenha meu IP externo. mudou? Sem saída.
2) IP alterado, chame a API do dyndns-provider, com o novo endereço IP,
3) sed o db.mydomain.com com o IP externo
4) reinicie o bind.
Funciona de maneira muito confiável para minha rede doméstica
fonte
dyn.dev.shahed.biz
partir de todo o mundo! Você poderia nos ajudar a resolver esse problema?