Jump to content

Replicar zonas DNS automaticamente entre NS Master e NS Slave


Recommended Posts

Olá,

Estou configurando um servidor de hospedagem utilizando o painel Directadmin, tive alguns problemas referente a e-mails mas que foram resolvidos com ajuda desse fórum.

Agora estou com um problema referente ao DNS, quando informo o NS1 e NS2 no Registro.br ele acusa no Slave 1, domínio desconhecido, o NS1 master ele aceita normalmente. Verificando o named.conf.local do NS slave vejo que o registro referente ao domínio não foi criado. e ao verificar o status do bind ele apresenta essa mensagem:  

client xxx.xxx.40.14#43765: received notify for zone 'dominio.com.br': not authoritative

Se eu informar no named.conf.local do NS2 Slave o registro da zona apontando para o master, o registro.br reconhece o domínio normalmente.

A dúvida que eu tenho é: no dns master está tudo certo, arquivo de zona .db e registro no named.conf criados pelo painel corretamente, mas não está replicando para o NS2 Slave. É possível realizar essa atualização automática? Ou ela vai ter que ser feita manualmente a cada registro de domínio no painel?

Segue minhas configurações.

NS1 MASTER ############

### named.conf.options ###

acl "trusted" {
   xxx.xxx.xxx.14;    #ns1
   xxx.xxx.xxx.205; #ns2
};

options {
    directory "/var/cache/bind";
    
    recursion yes;
    allow-recursion { trusted; };
    listen-on { xxx.xxx.xxx.14; };
    allow-transfer { xxx.xxx.xxx.205; };    


    //forwarders {
    //    8.8.8.8;
    //    8.8.4.4;
    //};
   

   dnssec-validation auto;

 auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};


 

NS1 MASTER #######

### named.conf - ns1 master ###

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
zone "dominio_server.net" { type master; file "/etc/bind/dominio_server.net.db"; allow-transfer{xxx.xxx.xxx.205;}; };
zone "dominio.com.br" { type master; file "/etc/bind/dominio.com.br.db";  };

 

 

NS2 Slave ############

### named.conf.options ###

acl "trusted" {
   xxx.xxx.xxx.14;    #ns1
   xxx.xxx.xxx.205; #ns2
};

options {
    directory "/var/cache/bind";
    
    recursion yes;
    allow-recursion { trusted; };
    listen-on { xxx.xxx.xxx.205; };
    allow-transfer { xxx.xxx.xxx.14; };    

    allow-query { any; };


    //forwarders {
    //    8.8.8.8;
    //    8.8.4.4;
    //};
   

   dnssec-validation auto;

 auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

 

### named.conf.local - NS2 slave###

zone "dominio_server.net" { type slave; file "dominio_server.net.db"; masters { xxx.xxx.xxx.14; };  };
 

Veja que o named.conf.local do NS2 não possui o registro de zona do dominio.com.br a menos que seja informado manualmente. É possível replicar automaticamente? Estou utilizando o Debian 9 como server.

Link to post
Share on other sites
  • 2 weeks later...
  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

A melhor solução IMHO é replicação de banco de dados e usar o PowerDNS servindo desse banco de dados. 

Para não deixar o tópico sem resposta e também poder ajudar mais alguém que possa ter o mesmo problema e dúvida que eu, vou postar aqui a solução que eu achei para resolver o meu problema.

Bom o que eu fiz foi criar um script e colocar ele para rodar no cron de minuto em minuto, esse script, fica testando o arquivo named.conf para ver se ele é mais recente que named.conf.valida que é uma copia do named.conf, se for mais recente significa que ele foi atualizado ou manualmente ou via painel directadmin, se ele não for mais recente não executa nada. segue o script.

Não sei se é a melhor solução, mas neste momento resolveu o meu problema, se alguém tiver outra solução compartilhem.

 

#!/bin/bash

## carrega named.conf no arquivo 1
## carrega named.conf.valida no arquivo 2 (cópia do named.conf)
arquivo1=/etc/bind/named.conf
arquivo2=/etc/bind/scripts/named.conf.valida

## testa se named.conf é mais recente que named.conf.valida
if [ $arquivo1 -nt $arquivo2 ]
then
## se named.conf for mais recente faça
   ## troca o tipo master por slave e salva em /etc/bind/scripts/named.conf.local
   echo "$(sed 's/ type master; / type slave; /g' /etc/bind/named.conf)" > /etc/bind/scripts/named.conf.local

   ## remove caminho do arquivo no parametro file e salva em /etc/bind/scripts/named.conf.local
   echo "$(sed 's|/etc/bind/||g' /etc/bind/scripts/named.conf.local)" > /etc/bind/scripts/named.conf.local

   ## troca allow-transfer{ip slave} por masters{ip master} e salva em /etc/bind/scripts/named.conf
   echo "$(sed 's/ allow-transfer { ip-slave; }; / masters { ip-master; }; /g' /etc/bind/scripts/named.conf.local)" > /etc/bind/scripts/named.conf.local

   ## deleta todas as linhas que começam com include
   sed -i '/include/d' /etc/bind/scripts/named.conf.local

   ## transfere o arquivo /etc/bind/scripts/named.conf.local do NS1 para o NS2 salvando como /etc/bind/named.conf.local
   scp /etc/bind/scripts/named.conf.local [email protected]-slave:/etc/bind/named.conf.local

   ## pausa execução por 5 segundos (para garantir que o arquivo foi transferido antes do restart)
   sleep 5

   ## restarta o bind no NS2
   ssh [email protected]-slave '/etc/init.d/bind9 restart'

   ## copia o named.conf atualizado para named.conf.valida na pasta scripts
   cp /etc/bind/named.conf /etc/bind/scripts/named.conf.valida

   ## registra um log da execução em /etc/bind/scripts/log_execucao
   echo "Rodou em " $(date +%d/%m/%Y" - "%H:%M:%S) >> /etc/bind/scripts/log_execucao
fi
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


Chat

Chat

    You don't have permission to chat.
    ×
    ×
    • Create New...