Table of Contents
Instalação e configuração do Bind no Debian 8
Introdução ao BIND
O BIND (Berkeley Internet Name Domain) é o servidor de nomes utilizado na grande maioria dos servidores da Internet, provendo uma estável e robusta arquitetura sobre a qual as organizações podem construir sua estrutura de nomes.
# install bind9 dnsutils
O arquivo principal chama-se /etc/bind/named.conf mas contém apenas configurações estáticas. Ele utiliza a cláusula include para anexar os arquivos /etc/bind/named.conf.options e /etc/bind/named.conf.local. Sendo que desses dois, o primeiro serve para personalizar todas opções referentes ao funcionamento do próprio BIND, enquanto que o segundo serve para declarar todas as zonas pelas quais este servidor deve responder.
# ls -lh /etc/bind total 52K -rw-r--r-- 1 root root 2,4K Fev 19 01:59 bind.keys -rw-r--r-- 1 root root 237 Fev 19 01:59 db.0 -rw-r--r-- 1 root root 271 Fev 19 01:59 db.127 -rw-r--r-- 1 root root 237 Fev 19 01:59 db.255 -rw-r--r-- 1 root root 353 Fev 19 01:59 db.empty -rw-r--r-- 1 root root 270 Fev 19 01:59 db.local -rw-r--r-- 1 root root 3,0K Fev 19 01:59 db.root -rw-r--r-- 1 root bind 463 Fev 19 01:59 named.conf -rw-r--r-- 1 root bind 490 Fev 19 01:59 named.conf.default-zones -rw-r--r-- 1 root bind 165 Fev 19 01:59 named.conf.local -rw-r--r-- 1 root bind 890 Jun 4 11:34 named.conf.options -rw-r----- 1 bind bind 77 Jun 4 11:34 rndc.key -rw-r--r-- 1 root root 1,3K Fev 19 01:59 zones.rfc1918
Além dos arquivos citados acima, temos o arquivo db.root que relaciona os endereços dos 13 servidores raiz e é lido como zona hint.
O BIND vai utilizar a porta 53/UDP para receber consultas, a porta 53/TCP para transferir zonas para servidores escravos, a porta 953/TCP para receber comandos via rndc(que dependem de chaves criptografadas), e portas udp altas podem ser dinamicamente atribuídas para efetuar consultas em outros servidores.
Vamos observar a recursividade e as portas envolvidas utilizando o tcpdump, mas antes vamos verificar as portas:
# ss -nat | grep 53 LISTEN 0 10 192.168.200.100:53 *:* LISTEN 0 10 127.0.0.1:53 *:* LISTEN 0 128 127.0.0.1:953 *:* LISTEN 0 10 :::53 :::* LISTEN 0 128 ::1:953 :::*
Instale o sniffer tcpdump:
# apt-get install tcpdump
Execute o tcpdump para verificar os pacotes saindo de uma porta alta até a porta 53/udp de seu servidor:
# tcpdump -i eth0 -n port 53
Em outro terminal execute:
# dig @localhost -t any wikipedia.com
Saída da consulta:
# dig @localhost -t any wikipedia.com ; <<>> DiG 9.9.5-9-Debian <<>> @localhost -t any wikipedia.com ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57682 ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 3, ADDITIONAL: 4 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;wikipedia.com. IN ANY ;; ANSWER SECTION: wikipedia.com. 600 IN TXT "google-site-verification=AMHkgs-4ViEvIJf5znZle-BSE2EPNFqM1nDJGRyn2qk" wikipedia.com. 3600 IN MX 10 polonium.wikimedia.org. wikipedia.com. 3600 IN MX 50 lead.wikimedia.org. wikipedia.com. 86400 IN SOA ns0.wikimedia.org. hostmaster.wikimedia.org. 2015052817 43200 7200 1209600 3600 wikipedia.com. 600 IN AAAA 2620:0:861:ed1a::1 wikipedia.com. 600 IN A 208.80.154.224 wikipedia.com. 86400 IN NS ns0.wikimedia.org. wikipedia.com. 86400 IN NS ns1.wikimedia.org. wikipedia.com. 86400 IN NS ns2.wikimedia.org. ;; AUTHORITY SECTION: wikipedia.com. 86400 IN NS ns2.wikimedia.org. wikipedia.com. 86400 IN NS ns1.wikimedia.org. wikipedia.com. 86400 IN NS ns0.wikimedia.org. ;; ADDITIONAL SECTION: ns0.wikimedia.org. 86398 IN A 208.80.154.238 ns1.wikimedia.org. 86398 IN A 208.80.153.231 ns2.wikimedia.org. 86398 IN A 91.198.174.239 ;; Query time: 2081 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Jun 04 18:57:55 BRT 2015 ;; MSG SIZE rcvd: 417
Captura com o tcpdump:
# tcpdump -i eth0 -n port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 18:57:53.432907 IP 192.168.200.100.5513 > 192.33.14.30.53: 40180% [1au] ANY? wikipedia.com. (42) 18:57:53.664192 IP 192.33.14.30.53 > 192.168.200.100.5513: 40180- 0/7/1 (594) 18:57:53.664869 IP 192.168.200.100.61999 > 199.19.57.1.53: 23654% [1au] A? ns0.wikimedia.org. (46) 18:57:53.665031 IP 192.168.200.100.30221 > 199.19.57.1.53: 36251% [1au] AAAA? ns0.wikimedia.org. (46) 18:57:53.665150 IP 192.168.200.100.53091 > 199.19.57.1.53: 27810% [1au] A? ns1.wikimedia.org. (46) 18:57:53.665261 IP 192.168.200.100.7319 > 199.19.57.1.53: 6732% [1au] AAAA? ns1.wikimedia.org. (46) 18:57:53.665374 IP 192.168.200.100.49066 > 199.19.57.1.53: 61180% [1au] A? ns2.wikimedia.org. (46) 18:57:53.665471 IP 192.168.200.100.31189 > 199.19.57.1.53: 43021% [1au] AAAA? ns2.wikimedia.org. (46) 18:57:53.894522 IP 199.19.57.1.53 > 192.168.200.100.61999: 23654- 0/7/4 (637) 18:57:53.894865 IP 192.168.200.100.21300 > 91.198.174.239.53: 12289% [1au] A? ns0.wikimedia.org. (46) 18:57:53.907795 IP 199.19.57.1.53 > 192.168.200.100.30221: 36251- 0/7/4 (637) 18:57:53.908137 IP 192.168.200.100.31076 > 91.198.174.239.53: 53799% [1au] AAAA? ns0.wikimedia.org. (46) 18:57:53.917811 IP 199.19.57.1.53 > 192.168.200.100.49066: 61180- 0/7/4 (637) 18:57:53.918137 IP 192.168.200.100.10913 > 91.198.174.239.53: 31592% [1au] A? ns2.wikimedia.org. (46) 18:57:53.921041 IP 199.19.57.1.53 > 192.168.200.100.7319: 6732- 0/7/4 (637) 18:57:53.921192 IP 199.19.57.1.53 > 192.168.200.100.53091: 27810- 0/7/4 (637) 18:57:53.921384 IP 192.168.200.100.29745 > 91.198.174.239.53: 41837% [1au] AAAA? ns1.wikimedia.org. (46) 18:57:53.921604 IP 192.168.200.100.57528 > 91.198.174.239.53: 63523% [1au] A? ns1.wikimedia.org. (46) 18:57:53.922265 IP 199.19.57.1.53 > 192.168.200.100.31189: 43021- 0/7/4 (637) 18:57:53.922469 IP 192.168.200.100.37465 > 91.198.174.239.53: 5737% [1au] AAAA? ns2.wikimedia.org. (46) 18:57:54.147218 IP 91.198.174.239.53 > 192.168.200.100.21300: 12289*- 1/0/1 A 208.80.154.238 (62) 18:57:54.147532 IP 192.168.200.100.20861 > 208.80.153.231.53: 32464% [1au] ANY? wikipedia.com. (42) 18:57:54.163634 IP 91.198.174.239.53 > 192.168.200.100.31076: 53799*- 0/1/2 (109) 18:57:54.167263 IP 91.198.174.239.53 > 192.168.200.100.10913: 31592*- 1/0/1 A 91.198.174.239 (62) 18:57:54.174376 IP 91.198.174.239.53 > 192.168.200.100.29745: 41837*- 0/1/2 (113) 18:57:54.181264 IP 91.198.174.239.53 > 192.168.200.100.57528: 63523*- 1/0/1 A 208.80.153.231 (62) 18:57:54.186531 IP 91.198.174.239.53 > 192.168.200.100.37465: 5737*- 0/1/2 (113) 18:57:54.421467 IP 208.80.153.231.53 > 192.168.200.100.20861: 32464*- 9/0/1 A 208.80.154.224, AAAA 2620:0:861:ed1a::1, SOA, NS ns2.wikimedia.org., NS ns0.wikimedia.org., NS ns1.wikimedia.org., MX polonium.wikimedia.org. 10, MX lead.wikimedia.org. 50, TXT "google-site-verification=AMHkgs-4ViEvIJf5znZle-BSE2EPNFqM1nDJGRyn2qk" (327) 18:57:54.421982 IP 192.168.200.100.30469 > 192.112.36.4.53: 16762% [1au] DS? com. (32) 18:57:54.422075 IP 192.168.200.100.45579 > 192.112.36.4.53: 22093% [1au] NS? . (28) 18:57:54.646574 IP 192.112.36.4.53 > 192.168.200.100.45579: 22093*- 14/0/25 NS g.root-servers.net., NS j.root-servers.net., NS m.root-servers.net., NS d.root-servers.net., NS a.root-servers.net., NS l.root-servers.net., NS f.root-servers.net., NS k.root-servers.net., NS c.root-servers.net., NS e.root-servers.net., NS i.root-servers.net., NS b.root-servers.net., NS h.root-servers.net., RRSIG (913) 18:57:54.653260 IP 192.112.36.4.53 > 192.168.200.100.30469: 16762*- 2/0/1 DS, RRSIG (239) 18:57:54.653838 IP 192.168.200.100.63771 > 192.36.148.17.53: 55236% [1au] DS? wikipedia.com. (42) 18:57:54.892686 IP 192.36.148.17.53 > 192.168.200.100.63771: 55236- 0/15/16 (737) 18:57:54.893120 IP 192.168.200.100.49116 > 192.12.94.30.53: 17433% [1au] DS? wikipedia.com. (42) 18:57:55.207575 IP 192.12.94.30.53 > 192.168.200.100.49116: 17433*- 0/6/1 (766) 18:57:55.208000 IP 192.168.200.100.51033 > 192.42.93.30.53: 50748% [1au] DNSKEY? com. (32) 18:57:55.511119 IP 192.42.93.30.53 > 192.168.200.100.51033: 50748*- 3/0/1 DNSKEY, DNSKEY, RRSIG (743) [...]
BIND como servidor cache
As bibliotecas do resolvedor da maioria dos sistemas operacionais não são capazes de executar o processo de resolução completo, chamado recursivo. Ao invés disso elas dependem de um servidor intermediário com essa capacidade. Quando nos conectamos de casa diretamente à Internet, o serviço DHCP do provedor se encarrega de nos atribuir o endereço de seus servidores cache. Caso contrário, nosso resolver não teria a quem consultar e não conseguiríamos navegar. No entanto, muitos administradores de rede utilizam os IPs desses provedores para configurar várias estações de trabalho de uma rede. O efeito disto é que cada estação vai fazer suas próprias consultas individuais, multiplicando o volume de dados trafegados através do link de Internet, desperdiçando tempo e ocupando largura de banda.
Quanto maior a rede, maior o impacto. A alternativa para evitar estes problemas é manter um servidor DNS caching only. Servidores cache reservam o resultado de suas buscas na memória pelo tempo limite estabelecido pela autoridade sobre o domínio consultado. Dessa forma, independente da quantidade de máquinas da rede, as consultas serão feitas na Internet apenas uma vez a cada intervalo de atualização.
Nosso servidor recém instalado já está operando como servidor cache. Faça uma consulta e verifique o Query time. Repita o procedimento:
# dig @localhost -t soa kernel.org | tail -n6 ;; Query time: 851 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Jun 04 19:35:32 BRT 2015 ;; MSG SIZE rcvd: 216
# dig @localhost -t soa kernel.org | tail -n6 ;; Query time: 0 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Jun 04 19:35:53 BRT 2015 ;; MSG SIZE rcvd: 216
Para que a partir de agora todas as nossas aplicações utilizem o potencial de nosso servidor cache, edite o arquivo /etc/resolv.conf e mantenha apenas as linhas a seguir:
# vim /etc/resolv.conf
nameserver 127.0.0.1
- DICA: Não é necessária a configuração deste arquivo, pois mesmo sem ele o servidor continua efetuando as consultas e resolvendo os nomes, além de fazer cache!
A fim de termos uma maior segurança em relação às mudanças do arquivo /etc/resolv.conf, podemos adicionar um atributo de proteção a ele, não permitindo qualquer tipo de alteração:
# chattr +i /etc/resolv.conf
Tipos de zonas e Registros
Em relação às zonas, o BIND pode operar de acordo com 6 tipos: master, slave, stub, hint, forward e delegation-only.
- master - O BIND vai responder como autoridade sobre aquele domínio. Os dados da zona serão criados, publicados e administrados a partir dele.
- slave - O BIND também vai responder por esse domínio, mas nenhuma criação ou alteração respectiva a essa zona será feita localmente neste servidor. Os dados serão sempre transferidos de um servidor master.
- stub - Este tipo de zona não é previsto em nenhuma RFC e foi implementado apenas no BIND. Assemelha-se a uma zona slave mas replica do master apenas os registros do tipo NS. Em desuso.
- hint - Específica para o BIND onde ele deve começar uma busca recursiva quando estiver operando como cache. Por padrão, há uma zona hint criada com os endereços dos 13 root servers.
- forward - Serve para orientar o BIND a encaminhar a consulta sobre uma determinada zona para outro servidor em especial. O encaminhamento de consultas também pode ser especificado de maneira global no arquivo named.conf.options.
- delegation-only - Para evitar abusos de algumas autoridades sobre domínios de primeiro nível como COM, NET, ORG, etc., o BIND mantém o tipo de zona delegação apenas. Qualquer resposta que não tenha uma delegação explícita ou implícita na seção autoridade será transformada em uma resposta NXDOMAIN.
Vamos configurar nossa zona DNS: martins.net Pode ser que na Internet já exista um domínio com este nome, mas isso não importa porque nossas consultas ficarão limitadas a nossa rede interna.
As zonas devem ser declaradas no arquivo /etc/bind/named.conf.local. Uma zona mestre precisa, no mínimo, do nome do domínio, tipo de zona e o caminho para o banco de dados de registros. Quando apenas o nome do arquivo é citado, o servidor BIND vai procurá-lo no diretório definido na opção directory, do arquivo /etc/bind/named.conf.options. Isso significa que, por padrão, o caminho completo corresponderia a /var/cache/bind/db.martins.net.
O conteúdo do banco de dados da zona que foi declarado será principalmente uma série de registros de recursos (resources records), ou simplesmente, registros. No entanto, três diretivas são suportadas:
- $TTL
- $ORIGIN
- $INCLUDE
Um registro tem o seguinte formato: dono [TTL] [classe] tipo dados.
- dono - É o nome do registro. Quando substituído pelo símbolo @, o dono é o próprio domínio. Caso o dono fique em branco, o BIND assume o nome do registro imediatamente superior;
- TTL - Um valor, em segundos, para a permanência dos dados deste registro no cache de um servidor. Raramente utilizado.
- classe - Podem ser CH, HS ou IN. O padrão é IN, de Internet, e não precisa ser declarada. CH = CHAOS e HS = Hesiod.
- tipo - No momento existem mais de 30 tipos de registro, dentre os quais veremos SOA, NS, MX, A, CNAME, TXT e PTR.
- dados - Diferentes tipos de dados são definidos para diferentes tipos de registros. Para um registro tipo A temos um endereço IP por exemplo.
Registros do tipo TXT tem sido usados para aumentar o controle contra spams. São criados de acordo com o formato definido pelo projeto SPF - Sender Policy Framework, ou simplesmente SPF.
O SPF diz quais servidores podem enviar e-mails em nome do seu domínio. O objetivo é evitar que seu domínio seja usado para forjar remetentes falsos. Grandes provedores já adotaram o SPF e cada vez mais outros domínios vem seguindo a mesma prática. Tende a tornar-se uma imposição. Muito mais antigo que o SPF, e por consequência, uma imposição natural do ecossistema de e-mails, é garantir que o IP do registro MX tenha endereço reverso. Esta é uma forma de checar se o e-mail partiu de um usuário doméstico cujo computador está sendo usado como zumbi, por exemplo.
Normalmente, configurar o endereçamento reverso não depende do administrador do domínio, mas sim do provedor do link. Porém, é possível requisitar autoridade sobre o bloco de IPs destinado àquele link. Vai depender do provedor. Mas como em nosso caso estamos utilizando apenas endereços privados, vamos assumir a autoridade sobre todo o bloco 192.168.200.0/24.
Configuração do DNS primário
Antes de checar como está o nosso ambiente…
Configuração de rede:
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.200.100
netmask 255.255.255.0
gateway 192.168.200.1
Hostname e arquivo hosts
# cat /etc/hostname
ns1.martins.net
# cat /etc/hosts 127.0.0.1 localhost 192.168.200.100 ns1.martins.net ns1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Agora vamos criar nossa zona
# cat /etc/bind/named.conf.local // // 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 "martins.net" { type master; file "db.martins.net"; }; zone "200.168.192.in-addr.arpa" { type master; file "rev.martins.net"; };
Vamos checar os arquivos de configuração para ver se não tem erros:
# named-checkconf
- Se não houver mensagem na saída do comando está tudo ok
Agora criaremos o banco de dados de registros de DNS direta e reversa
# cat /var/cache/bind/db.martins.net $TTL 86400 @ IN SOA ns1.martins.net. root.martins.net. ( 2015060401 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) ; @ IN A 192.168.200.220 ;sitio: www.martins.net ; @ IN NS ns1.martins.net. @ IN MX 10 mail.martins.net. ; ns1.martins.net. IN A 192.168.200.100 ; mail.martins.net. IN A 192.168.200.240 smtp.martins.net. IN CNAME mail.martins.net. pop.martins.net. IN CNAME mail.martins.net. imap.martins.net. IN CNAME mail.martins.net. ; www.martins.net. IN CNAME @ ftp.martins.net. IN CNAME @
# cat /var/cache/bind/rev.martins.net $TTL 86400 @ IN SOA ns1.martins.net. root.martins.net. ( 2015060401 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) ; @ IN NS ns1.martins.net. ; 240 IN PTR mail.martins.net.
Sobre o registro SOA, vão algumas explicações:
- serial - É a referência para os slaves saberem se a zona sofreu alterações;
- refresh - Tempo que o servidor secundário vai aguardar até checar se há atualizações no servidor primário;
- retry - Em caso de falha do refresh, o tempo até a próxima verificação;
- expire - O tempo que o secundário aguardará o primário voltar, se esgotar, o secundário pára de responder por essa zona;
- negative caching TTL - Se a zona expirar, esse será o tempo pelo qual um servidor cache armazenará a informação NXDOMAIN antes de iniciar uma nova busca recursiva. O máximo são 3 horas.
Agora vamos checar a configuração da zona que temos autoridade:
# named-checkzone martins.net. /var/cache/bind/db.martins.net zone martins.net/IN: loaded serial 2015060401 OK
# named-checkzone 200.168.192.in-addr.arpa. /var/cache/bind/rev.martins.net zone 200.168.192.in-addr.arpa/IN: loaded serial 2015060401 OK
Reinicie o serviço do Bind9:
# systemctl restart bind9.service
Verificando o status do bind
# systemctl status bind9.service ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled) Drop-In: /run/systemd/generator/bind9.service.d └─50-insserv.conf-$named.conf Active: active (running) since Qui 2015-06-04 20:56:27 BRT; 23s ago Docs: man:named(8) Process: 904 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS) Main PID: 909 (named) CGroup: /system.slice/bind9.service └─909 /usr/sbin/named -f -u bind Jun 04 20:56:27 ns1.martins.net named[909]: command channel listening on ::1#953 Jun 04 20:56:27 ns1.martins.net named[909]: managed-keys-zone: loaded serial 2 Jun 04 20:56:27 ns1.martins.net named[909]: zone 0.in-addr.arpa/IN: loaded serial 1 Jun 04 20:56:27 ns1.martins.net named[909]: zone 127.in-addr.arpa/IN: loaded serial 1 Jun 04 20:56:27 ns1.martins.net named[909]: zone 255.in-addr.arpa/IN: loaded serial 1 Jun 04 20:56:27 ns1.martins.net named[909]: zone 200.168.192.in-addr.arpa/IN: loaded serial 2015060401 Jun 04 20:56:27 ns1.martins.net named[909]: zone localhost/IN: loaded serial 2 Jun 04 20:56:27 ns1.martins.net named[909]: zone martins.net/IN: loaded serial 2015060401 Jun 04 20:56:27 ns1.martins.net named[909]: all zones loaded Jun 04 20:56:27 ns1.martins.net named[909]: running
Vamos fazer alguns testes envolvendo nossos domínios e o comando dig:
Antes de testarmos o comando dig, devemos saber o significado de algumas siglas, facilitando assim o entendimento e melhor aproveitamento deles.
- SOA - Start Of Authotity(Autoridade inicial): Indica onde começa a autoridade da zona;
- NS - Name Server(Servidor de nomes): Indica um servidor de nomes para a zona;
- A - Address(Endereço IP): Mapeamento de nome a endereço (IPv4);
- AAAA - Address(Endereço IP): Mapeamento de nome a endereço (IPv6);
- MX - Mail eXchanger(Smtp): Indica um mail exchenger para um nome(servidor de email);
- CNAME - Cononial Name(Alias): Mapeia um nome alternativo(apelido);
- PTR - Poiter Record(IP reverso);
- TXT - Texto: descritivo referente a um registro.
# dig -t SOA martins.net ; <<>> DiG 9.9.5-9-Debian <<>> -t SOA martins.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45435 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;martins.net. IN SOA ;; ANSWER SECTION: martins.net. 86400 IN SOA ns1.martins.net. root.martins.net. 2015060401 3600 1800 604800 86400 ;; AUTHORITY SECTION: martins.net. 86400 IN NS ns1.martins.net. ;; ADDITIONAL SECTION: ns1.martins.net. 86400 IN A 192.168.200.100 ;; Query time: 3 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jun 04 21:00:02 BRT 2015 ;; MSG SIZE rcvd: 115
Vamos testar as configurações referente ao e-mail:
# dig -t MX martins.net ; <<>> DiG 9.9.5-9-Debian <<>> -t MX martins.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7788 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;martins.net. IN MX ;; ANSWER SECTION: martins.net. 86400 IN MX 10 mail.martins.net. ;; AUTHORITY SECTION: martins.net. 86400 IN NS ns1.martins.net. ;; ADDITIONAL SECTION: mail.martins.net. 86400 IN A 192.168.200.240 ns1.martins.net. 86400 IN A 192.168.200.100 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jun 04 21:01:04 BRT 2015 ;; MSG SIZE rcvd: 111
Testando a resposta reversa
# dig -x 192.168.200.240 ; <<>> DiG 9.9.5-9-Debian <<>> -x 192.168.200.240 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46976 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;240.200.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 240.200.168.192.in-addr.arpa. 86400 IN PTR mail.martins.net. ;; AUTHORITY SECTION: 200.168.192.in-addr.arpa. 86400 IN NS ns1.martins.net. ;; ADDITIONAL SECTION: ns1.martins.net. 86400 IN A 192.168.200.100 ;; Query time: 4 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jun 04 21:04:00 BRT 2015 ;; MSG SIZE rcvd: 121
Servidor Secundário
Para registrarmos um domínio público, precisamos de pelo menos dois servidores DNS respondendo pelo seu domínio. Isso significa um servidor master (mestre) e pelo menos um servidor slave (escravo). A exigência é uma forma de garantir que seu domínio estará sempre disponível. Se um servidor parar, o outro continua respondendo.
Se os servidores estiverem geograficamente separados, isto garante ainda mais disponibilidade, pois mesmo que um link caia, o outro certamente ainda estará disponível. Na verdade, um mesmo servidor rodando BIND pode ser ao mesmo tempo mestre para alguns domínios, escravo para outros, e cache para todo o resto. Sendo assim, vamos efetuar a instalação do Bind9 numa outra máquina para servir de escravo (secundário).
Antes de configuramos a máquina slave, vamos deixar nosso bind autorizado a transferir as zonas para esta máquina(192.168.200.101 dns slave). Acrescente no arquivo named.conf.local (192.168.200.100 - dns master):
# cat /etc/bind/named.conf.local [...] zone "martins.net" { type master; file "db.martins.net"; allow-transfer { 192.168.200.101; }; notify yes; also-notify { 192.168.200.101; }; }; zone "200.168.192.in-addr.arpa" { type master; file "rev.martins.net"; allow-transfer { 192.168.200.101; }; notify yes; also-notify { 192.168.200.101; }; };
Explicando as inclusões:
- allow-transfer - para transferir a zona para o secundário.
- notify yes - o servidor mestre envia uma mensagem DNS NOTIFY para os servidores escravos para fazê-los conferir o arquivo de zona imediatamente. Isso é feito para manter o banco de dados mestre e escravo firmemente sincronizados.
- also-notify - diz para o servidor também notificar o endereço fornecido entre chaves.
Devemos configurar também o arquivo de registro da zona DNS dos domínios que temos autoridade.
# cat /var/cache/bind/db.martins.net $TTL 86400 @ IN SOA ns1.martins.net. root.martins.net. ( 2015060401 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) ; @ IN A 192.168.200.220 ;sitio: www.martins.net ; @ IN NS ns1.martins.net. @ IN NS ns2.marrtins.net. @ IN MX 10 mail.martins.net. ; ns1.martins.net. IN A 192.168.200.100 ns2.martins.net. IN A 192.168.200.101 ; mail.martins.net. IN A 192.168.200.240 smtp.martins.net. IN CNAME mail.martins.net. pop.martins.net. IN CNAME mail.martins.net. imap.martins.net. IN CNAME mail.martins.net. ; www.martins.net. IN CNAME @ ftp.martins.net. IN CNAME @
# cat /var/cache/bind/rev.martins.net $TTL 86400 @ IN SOA ns1.martins.net. root.martins.net. ( 2015060401 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) ; @ IN NS ns1.martins.net. @ IN NS ns2.martins.net. ; 240 IN PTR mail.martins.net.
Reinicie o Bind:
# systemctl restart bind9.service
Vamos agora efetuar a instalação e configuração do Bind9 no Slave
Antes vamos checar nosso ambiente
Configuração de rede
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.200.101
netmask 255.255.255.0
gateway 192.168.200.1
dns-nameservers 8.8.8.8
Hostname e arquivo hosts
# hostnamectl status Static hostname: ns2.martins.net Icon name: computer-vm Chassis: vm Machine ID: 9150d0eb9e7946b78c3b621bd3143aae Boot ID: 05871afea3f542359054a2d92f519692 Virtualization: oracle Operating System: Debian GNU/Linux 8 (jessie) Kernel: Linux 3.16.0-4-586 Architecture: x86
# cat /etc/hosts 127.0.0.1 localhost 192.168.200.101 ns2.martins.net ns2 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Instalando o bind9
# apt-get install bind9 dnsutils
- Depois da instalação podemos remover a entrada de dns das configurações de rede e alterar o resolv.conf já que apartir de agora as consulta seram realizadas através do nosso dns.
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.200.101
netmask 255.255.255.0
gateway 192.168.200.1
# vim /etc/resolv.conf
nameserver 127.0.0.1
# chattr +i /etc/resolv.conf
Agora abra o arquivo de declaração de zonas e insira o seguinte:
# vim /etc/bind/named.conf.local // // 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 "martins.net" { type slave; file "db.martins.net"; masters { 192.168.200.100; }; }; zone "200.168.192.in-addr.arpa" { type slave; file "rev.martins.net"; masters { 192.168.200.100; }; };
- É importante ressaltar que não é necessário criar os arquivos especificados pelas opções file pois eles serão transferidos automaticamente do servidor master para o servidor slave.
Reinicie o Bind9:
# systemctl restart bind9.service
Verificando o status
# systemctl status bind9.service ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled) Drop-In: /run/systemd/generator/bind9.service.d └─50-insserv.conf-$named.conf Active: active (running) since Qui 2015-06-04 21:45:02 BRT; 28s ago Docs: man:named(8) Process: 2039 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS) Main PID: 2044 (named) CGroup: /system.slice/bind9.service └─2044 /usr/sbin/named -f -u bind Jun 04 21:45:02 ns2.martins.net named[2044]: transfer of 'martins.net/IN' from 192.168.200.100#53: connected using 192.168.200.101#48304 Jun 04 21:45:02 ns2.martins.net named[2044]: zone martins.net/IN: transferred serial 2015060401 Jun 04 21:45:02 ns2.martins.net named[2044]: transfer of 'martins.net/IN' from 192.168.200.100#53: Transfer completed: 1 messages, 14 reco...tes/sec) Jun 04 21:45:02 ns2.martins.net named[2044]: zone martins.net/IN: sending notifies (serial 2015060401) Jun 04 21:45:03 ns2.martins.net named[2044]: zone 200.168.192.in-addr.arpa/IN: Transfer started. Jun 04 21:45:03 ns2.martins.net named[2044]: transfer of '200.168.192.in-addr.arpa/IN' from 192.168.200.100#53: connected using 192.168.200.101#42721 Jun 04 21:45:03 ns2.martins.net named[2044]: zone 200.168.192.in-addr.arpa/IN: transferred serial 2015060401 Jun 04 21:45:03 ns2.martins.net named[2044]: transfer of '200.168.192.in-addr.arpa/IN' from 192.168.200.100#53: Transfer completed: 1 mess...tes/sec) Jun 04 21:45:03 ns2.martins.net named[2044]: zone 200.168.192.in-addr.arpa/IN: sending notifies (serial 2015060401) Jun 04 21:45:03 ns2.martins.net named[2044]: error (network unreachable) resolving 'ns2.marrtins.net/AAAA/IN': 2001:503:a83e::2:30#53 Hint: Some lines were ellipsized, use -l to show in full.
- Observe que já houve a transferência da zona, que podemos podemos confirmar acompanhando os logs…
# tail -f /var/log/daemon.log Jun 4 21:45:02 ns2 named[2044]: transfer of 'martins.net/IN' from 192.168.200.100#53: connected using 192.168.200.101#48304 Jun 4 21:45:02 ns2 named[2044]: zone martins.net/IN: transferred serial 2015060401 Jun 4 21:45:02 ns2 named[2044]: transfer of 'martins.net/IN' from 192.168.200.100#53: Transfer completed: 1 messages, 14 records, 332 bytes, 0.001 secs (332000 bytes/sec) Jun 4 21:45:02 ns2 named[2044]: zone martins.net/IN: sending notifies (serial 2015060401) Jun 4 21:45:03 ns2 named[2044]: zone 200.168.192.in-addr.arpa/IN: Transfer started. Jun 4 21:45:03 ns2 named[2044]: transfer of '200.168.192.in-addr.arpa/IN' from 192.168.200.100#53: connected using 192.168.200.101#42721 Jun 4 21:45:03 ns2 named[2044]: zone 200.168.192.in-addr.arpa/IN: transferred serial 2015060401 Jun 4 21:45:03 ns2 named[2044]: transfer of '200.168.192.in-addr.arpa/IN' from 192.168.200.100#53: Transfer completed: 1 messages, 5 records, 189 bytes, 0.001 secs (189000 bytes/sec) Jun 4 21:45:03 ns2 named[2044]: zone 200.168.192.in-addr.arpa/IN: sending notifies (serial 2015060401) Jun 4 21:45:03 ns2 named[2044]: error (network unreachable) resolving 'ns2.marrtins.net/AAAA/IN': 2001:503:a83e::2:30#53
Podemos confirmar também listando os arquivos existentes no diretório onde o bind armazena as bases das zonas.
# ls -lha /var/cache/bind/ total 20K drwxrwxr-x 2 root bind 4,0K Jun 4 21:45 . drwxr-xr-x 9 root root 4,0K Jun 4 21:34 .. -rw-r--r-- 1 bind bind 687 Jun 4 21:45 db.martins.net -rw-r--r-- 1 bind bind 720 Jun 4 21:35 managed-keys.bind -rw-r--r-- 1 bind bind 281 Jun 4 21:45 rev.martins.net
