DNS no Ubuntu, com slave e IPv6

Introdução

Olá pessoal!

Eu ainda estou no corre da faculdade, e entre os estudos, a igreja, o trabalho e a família, tem sobrado pouco tempo para escrever. Uma barbaridade! Mas topei numa situação e vou registrar aqui, pois pode ajudar a outros. Configurar dois servidores DNS autoritativos, numa situação master/slave.

Para isso eu recebi uma ajuda também, de um grande amigo que trabalhou no PTT/PR e atualmente está na ;DBUG Internet. Portanto Fabrício, fica aqui o meu agradecimento pela ajuda em ajustar o PTR do IPv6.

E por quê configurar meu servidor DNS para responder IPv6?

Bem, em primeiro lugar porque o esgotamento do IPv4 está aí, batendo na porta. Em segundo, já que vai ter trabalho, já faz tudo de uma fez. Tive um professor chamado Sarkis que defendia a “lei do mínimo esforço para o máximo redimento”. Portanto faz uma vez, bem feito, e isso não fica tomando seu tempo depois.

Eu optei por dois servidores, porque tem como colocar em um só, mas é uma gambiarra. Prefiro trabalhar com dois servidores distintos, para ser uma redundância de fato.

Mas vamos colocar a mão na massa.

Receita

Ingredientes

Os ingredientes são:

  • 2 servidores distintos;
  • bind;
  • dig (para testar);
  • um domínio – no nosso caso o domínio e os IPs serão fictícios;

Configurações

Eu vou utilizar o domínio example.com, e os IPs 192.168.0.0/24 (192.168.0.1 e 192.168.0.2) e 2001:db8::/32 (2001:db8::1/64 e 2001:db8::2/64). Para começar vamos instalar o Bind9 no Ubuntu. Esta configuração foi testada com o Ubuntu 14.04 e o 16:04, com sucesso nos dois casos.

apt-get update
apt-get install bind9 bind9utils

Após instalar ele criará alguns arquivos default no diretório /etc/bind. Os arquivos que iremos trabalhar mais é o named.conf.local e o named.conf.options. Posteriormente serão criados três arquivos de zona, apenas no dns1. Se tudo funcionar corretamente, o dns2 criará estes arquivos sozinho, a partir da configuração do master.

named.conf.options

 

O named.conf.options do 192.168.0.1 (dns1) ficará assim:

options {
 directory "/var/cache/bind";

 recursion no;
 notify yes;
 // allow-recursion { 127.0.0.1/8; };
 // dnssec-validation auto;
 // If there is a firewall between you and nameservers you want
 // to talk to, you may need to fix the firewall to allow multiple
 // ports to talk. See http://www.kb.cert.org/vuls/id/800113

 // If your ISP provided one or more IP addresses for stable
 // nameservers, you probably want to use them as forwarders.
 // Uncomment the following block, and insert the addresses replacing
 // the all-0's placeholder.

 // forwarders {
 // 0.0.0.0;
 // };
 auth-nxdomain no; # conform to RFC1035
 listen-on-v6 { any; };
 allow-query { any; };
};

O named.conf.options do 192.168.0.2 (dns2) ficará assim:

options {
 directory "/var/cache/bind";

 recursion no;
 allow-transfer { 192.168.0.1; };
 notify yes;
 // allow-recursion { 127.0.0.1/8; };
 // dnssec-validation auto;
 // If there is a firewall between you and nameservers you want
 // to talk to, you may need to fix the firewall to allow multiple
 // ports to talk. See http://www.kb.cert.org/vuls/id/800113

 // If your ISP provided one or more IP addresses for stable
 // nameservers, you probably want to use them as forwarders.
 // Uncomment the following block, and insert the addresses replacing
 // the all-0's placeholder.

 // forwarders {
 // 0.0.0.0;
 // };
 auth-nxdomain no; # conform to RFC1035
 listen-on-v6 { any; };
 allow-query { any; };
};

named.conf.local

Já o named.conf.local ficará com os dados relacionados as zonas que iremos ter autoridade. Este servidor não responderá de forma recursiva, apenas autoritativa. Abaixo está o named.conf.local do dns1.

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";

zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-transfer { 192.168.0.2; };
also-notify { 192.168.0.2; };
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.0.168.192";
allow-transfer { 192.168.0.2; };
also-notify { 192.168.0.2; };
};

zone "8.b.d.0.1.0.0.2.ip6.arpa" in {
type master;
file "/etc/bind/db.8bd0.2001";
allow-transfer { 192.168.0.2; };
also-notify { 192.168.0.2; };
};

E agora o named.conf.local do dns2.







<pre>//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
include "/etc/bind/zones.rfc1918";

zone "example.com" {
type master;
file "/var/cache/bind/db.example.com";
master { 192.168.0.1; };
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.0.168.192";
master { 192.168.0.1; };
};

zone "8.b.d.0.1.0.0.2.ip6.arpa" in {
type master;
file "/etc/bind/db.8bd0.2001";
master { 192.168.0.1; };

db.example.com

Este arquivo nós criaremos um arquivo de zona chamado db.example.com na pasta /etc/bind . Lá nós configuraremos o domínio que nós queremos que seja respondido. Os arquivos de zona tem uma característica. Sempre altere o SERIAL ao atualizar o arquivo, ou você vai ter problemas.

;
; BIND data file for local interface
;
$TTL 604800
@    IN   SOA    example.com. root.example.com. (
                              2016060701 ; Serial
                              604800 ; Refresh
                              86400 ; Retry
                              2419200 ; Expire
                              604800 ) ; Negative Cache TTL
;
@    IN    NS    ns1.example.com.
@    IN    NS    ns2.example.com.
@    IN    A     192.168.0.3
ns1  IN    A     192.168.0.1
ns2  IN    A     192.168.0.2
www  IN    CNAME example.com.

db.0.168.192

Este é o arquivo onde é configurado a resposta do reverso. A maioria dos IPs, e principalmente os clientes de email, tem problemas se este arquivo estiver mal configurado. Portanto é bom configurar.

;
; BIND data file for local interface
;
$TTL 604800
@    IN   SOA    example.com. root.example.com. (
                              2016060701 ; Serial
                              604800 ; Refresh
                              86400 ; Retry
                              2419200 ; Expire
                              604800 ) ; Negative Cache TTL
;
@    IN    NS    ns1.example.com.
@    IN    NS    ns2.example.com.
1    IN    PTR     ns1.example.com.
2    IN    PTR     ns2.example.com.
3    IN    PTR     www.example.com.
;
$GENERATE 4-255 $ IN PTR $.ips.example.com.

db.8.b.d.0.1.0.0.2

Este arquivo é o mais chatinho, não esqueça de declarar o $ORIGIN e contar as casas certinho para poder dar tudo certo. Pode-se utilizar algum gerador, como o http://rdns6.com/.

;
; BIND data file for local interface
;
$ORIGIN 8.b.d.0.1.0.0.2.ip6.arpa.
$TTL 1h ; Default TTL
@    IN   SOA    example.com. root.example.com. (
                              2016060701 ; Serial
                              1h; Refresh
                              15m ; Retry
                              1w ; Expire
                              1h ; Negative Cache TTL
                              )
;
@    IN    NS    ns1.example.com.
@    IN    NS    ns2.example.com.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN    PTR     ns1.example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN PTR ns2.example.com. 
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    IN PTR www.example.com. 
;

Pós configuração

Agora vamos testar nossas configurações antes de ativar os dois DNS. Primeiro testaremos as configurações:

named-checkconf /etc/bind/named.conf 

Se houver algum erro, ele acusará. Se estiver OK, não dará nenhuma mensagem.

Após isto vamos testar as zonas criadas. Este dará um

named-checkzone example.com /etc/bind/db.example.com
named-checkzone 192.168.0.1 /etc/bind/db.0.168.192

Após isto nós podemos iniciar os servidores. Em cada um dos servidores é só digitar:


sudo service bind9 restart

Agora vamos testar via dig para poder ver a resposta dos servidores.

dig @192.168.0.1 example.com
dig @192.168.0.1 -x 192.168.0.1
dig @192.168.0.2 example.com
dig @192.168.0.2 -x 192.168.0.1

E é isso, dois servidores no esquema master/slave respondendo registros IPv4 e IPv6.

Por hoje é isso. 😉

Referências

Anúncios


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s