Domingo Jan 29, 2012

PowerDNS: Replicação AXFR

Replicação utilizando AXFR e IXFR é um padrão antigo utilizando no DNS. A grande vantagem dele é a interoperabilidade com outros servidores de DNS. Grande parte das empresas não possuem o luxo da padronização, ou da utilização de replicação de banco de dados, como o slony explicado aqui anteriormente.

 Explicado isso, mãos à massa. O setup será o seguinte:

 

Aproveite o que for necessário à sua estrutura.

Master

 A operação de um master não é muito complicada, e em DNS na verdade as coisas nunca são realmente complicadas (exceção: DNSSEC).

--- /etc/pdns/pdns.conf ---
# configuracao do master
master=yes
allow-axfr-ips=192.0.2.0/24

# Essas flags sao padrao, mas mostradas para mostrar a utilidade
disable-axfr=no
disable-tcp=no

# Banco de dados
launch=gpgsql
gpgsql-user=pdns
gpgsql-dbname=powerdns
gpgsql-dnssec=yes

O backend (pensando em um PostgreSQL), será configurado da seguinte maneira:

insert into domains (name, type) values ('example.com', 'MASTER');
insert into records values (default, currval('domains_id_seq'), 'example.com', 'SOA', 'ns1.example.com postmaster.example.com 2012013001 3600 600 1209600 3600', 3600, default, default);
insert into records values (default, currval('domains_id_seq'), 'example.com', 'NS', 'ns1.example.com', 3600, default, default);
insert into records values (default, currval('domains_id_seq'), 'example.com', 'NS', 'ns2.example.com', 3600, default, default);
insert into records values (default, currval('domains_id_seq'), 'ns1.example.com', 'A', '192.0.2.2', 3600, default, default);
insert into records values (default, currval('domains_id_seq'), 'ns2.example.com', 'A', '192.0.2.3', 3600, default, default);
insert into records values (default, currval('domains_id_seq'), 'example.com', 'A', '192.0.2.4', 3600, default, default);

Agora falta só o DNSSEC:

pdnssec secure-zone example.com

Qual a diferença entre MASTER e NATIVE? Quando o processo do powerdns se inicia, ele procura por todos os domínios que possuem o tipo MASTER para notificar aos respectivos slaves.

Slave

A operação do slave  também é simples:

--- /etc/pdns/pdns.conf ---
# configuracao do slave
slave=yes
allow-axfr-ips=192.0.2.0/24

# Essas flags sao padrao, mas mostradas para mostrar a utilidade
disable-axfr=no
disable-tcp=no

# Banco de dados
launch=gpgsql
gpgsql-user=pdns
gpgsql-dbname=powerdns
gpgsql-dnssec=yes

O banco de dados fica desta maneira:

insert into domains (name, type) values ('example.com', 'SLAVE');

Após realizar essa configuração, execute o comando abaixo para o serviço entender que os registros de DNSSEC vieram de um AXFR e mostrá-los de maneira correta:

pdnssec set-presigned example.com

Da mesma maneira que o tipo MASTER afeta o comportamento do PowerDNS para o master, o tipo SLAVE é consultado quando o serviço se inicia para buscar as atualizações conforme os tempos estipulados no SOA. Caso tenha feito alguma mudança e quer que ela se propague de imediato, existe o comando abaixo:

pdns_control notify example.com

Pronto, feita a replicação AXFR. O setup acima é um exemplo de um master e um slave ambos rodando PowerDNS, mas nessa situação existem alguns atalhos para facilitar a vida. Veremos isso em um post futuro sobre SUPERMASTERS.

Comments:

Post a Comment:
  • HTML Syntax: Allowed