Como usar o BIND para configurar um servidor DNS no Linux

JUNTE-SE A MAIS DE 110.000 PESSOAS QUE JÁ TEM UMA CÓPIA

Ubuntu: Iniciando com Linux de maneira prática e rápida

servidor dns bind no linux

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Gerenciar servidores é uma tarefa que pode implicar sérias dores de cabeça ao administrador se tanto o servidor quanto à infraestrutura não foram adequadamente configurados, isto é, tendo em vista facilitar a busca por interfaces de rede e endereços de IP. É justamente para simplificar o gerenciamento que o BIND é utilizado, como veremos neste artigo.

O que é BIND

Também conhecido como named (pronuncia-se “neime-di”, sendo o elemento “d” uma referência a daemon, ou seja, “name daemon”), o BIND (Berkeley Internet Name Domain) é um software que surgiu na década de 1980, sendo este muito popular para tradução de nomes de domínio em endereços IP e, muitas vezes, componente de servidores Linux.

O que o BIND faz? Basicamente, ele nos permite que o servidor comum se torne um servidor DNS (DNS server), tanto para rede de internet pública quanto privada (LAN). A maioria dos servidores DNS são baseados no BIND, o que faz deste programa muito confiável — além de ser bastante leve, com menos de 5 MB.

Porém, antes de aprendermos sobre a instalação e as funcionalidades que encontramos no BIND, é importante entendermos a diferença entre dois elementos que nos acompanharão em toda a jornada de configuração: domínios (domains) e zonas (zones).

Domínios vs. zonas

Como bem explica Steve, dono do site Steve’s Internet Guide, um domínio é “uma divisão lógica do espaço de nome de DNS, enquanto uma zona é física, pois as informações são armazenadas em um arquivo denominado arquivo de zona de DNS (DNS zone file)”.

Em um exemplo bem simplório, a relação entre uma coisa e outra é um domínio “domain.com” ser armazenado em um zone file chamado “domain.com.txt”.

Pensemos nessa estrutura como uma árvore hierárquica. No topo dela se encontra a zona do domínio raiz (Root Domain); abaixo dela, temos três zonas, que são .com, .net e .org.

A zona e-tinet.com, por exemplo, pertence à zona .com; dentro dela é possível criar múltiplas zonas para armazenar informações de subdomínios, uma para blog.e-tinet.com e suporte.e-tinet.com, outra para o profissionaislinux.com.

Sempre que uma zona é criada, o arquivo de zona é gerado e armazenado em um servidor de DNS, guardando uma representação real da zona, contendo todos os registros para cada domínio ou subdomínio que faz parte dela (endereços de IP, dados de nome, registros MX etc.).

Fato é que não há uma explicação acerca do tema que não seja um pouco confusa. Tentando descomplicar por meio de analogia, vamos supor que estamos procurando um número de telefone (endereço IP) de Bruce Banner (o nosso servidor Apache).

Então, primeiramente, pegamos a agenda telefônica (nome de domínio) e procuramos pela lista B (zona ou arquivo de zona), onde estão todos os contatos cujo nome começa com a letra b (name servers, entre eles o servidor Apache).

Instalação do BIND em um servidor de DNS

Depois da breve explicação das diferenças entre domínios e zonas, voltaremos os olhares para o BIND, que nos permitirá trabalhar com hostnames e endereços de IP privados com facilidade — o que é extremamente útil quando o ambiente de rede se expande e / ou gera vários hosts diariamente, como acontece em provedores de serviços de cloud computing e outros modelos de computação.

Pré-requisitos

servidor dns bind no linux

Todo o trabalho que você verá daqui em diante foi feito na distribuição CentOS, podendo ser aplicada no RHEL. Vale destacar como requisito desejável o uso de VPSs (virtual private servers), que são máquinas virtuais configuradas como servidores; veja como instalar o seu próprio VPS com o vSphere ESXi da VMware neste tutorial completo.

Em vez de um VPS, você pode criar um host virtual no próprio CentOS usando o Apache. Seja qual for a sua escolha, crie três hosts: Master DNS Server (servidor principal), Slave DNS Server (usado para backup) e Client. As configurações de cada host que você verá aqui no exemplo:

-------------------------------------------------

Master DNS Server

IP Address: 192.168.0.101

Hostname: masterdns.e-tinet.com

-------------------------------------------------

Slave DNS Server

IP Address: 192.168.0.102

Hostname: slavedns.e-tinet.com

-------------------------------------------------

Client

IP Address: 192.168.0.200

Hostname: client.e-tinet.com

-------------------------------------------------

Uma vez que todos os hosts estão funcionando, acesse o servidor Master, abra o terminal e instale o BIND utilizando o seguinte comando: sudo yum install bind* -y.

Configurando o BIND nos servidores de DNS Master e Slave

Com os pacotes devidamente instalados, definiremos os arquivos de zona (lembra-se deles?) na configuração master. Para isso, nós acessaremos o arquivo named.conf usando um editor de texto, como o vim: sudo vim /etc/named.conf.

Vale observar que todos os procedimentos relacionados aos servidores de DNS terão de ser feitos tanto para o Master quanto para o Slave. Eles são exatamente os mesmos, mudando somente os endereços de IP a serem preenchidos.

Nos exemplos deste tópico serão configurados os parâmetros para o servidor Master. Para facilitar, destacamos os pontos que requerem atenção.

Abaixo, as configurações do arquivo named.conf:

//

// named.conf

//

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ for example named configuration files.

//

options {

            listen-on port 53 { 127.0.0.1; 192.168.0.100; }; # Insira o endereço IP do Master DNS Server.

            listen-on-v6 port 53 { ::1; };

            directory           "/var/named";

            dump-file           "/var/named/data/cache_dump.db";

            statistics-file "/var/named/data/named_stats.txt";

            memstatistics-file "/var/named/data/named_mem_stats.txt";

            allow-query         { localhost; 192.168.0.0/24; };

            allow-transfer         { localhost; 192.168.0.102; };  # Insira o endereço IP do Slave DNS Server

            recursion no;

            dnssec-enable yes;

            dnssec-validation yes;

            dnssec-lookaside auto;

            /* Path to ISC DLV key */

            bindkeys-file "/etc/named.iscdlv.key";

            managed-keys-directory "/var/named/dynamic";

};

logging {

            channel default_debug {

                    file "data/named.run";

                    severity dynamic;

            };

};

zone "." IN {

            type hint;

            file "named.ca";

};

## Define our forward & reverse Zone file here for tecmintlocal.com.

zone"e-tinet.com" IN {

type master;

file "e-tinet.fwd.zone";

allow-update { none; };

};

zone"0.168.192.in-addr.arpa" IN {

type master;

file "e-tinet.rev.zone";

allow-update { none; };

};

#####

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

No penúltimo bloco é possível notar que configuramos uma zona de pesquisa reversa, que, segundo a Cloudflare, é uma zona utilizada para solucionar problemas e identificar tráfego e comportamentos maliciosos, como spam e bad bots, por meio do mapeamento a partir de um endereço IP para o host.

Vejamos o que significam as demais configurações em destaque:

  • recursion no: a opção “no” previne que consultas recursivas deixem o servidor mais propenso a sofrer ataques DDoS;
  • zone name: define o nome da zona (e-tinet.com);
  • type master: determina o tipo de servidor, no caso, master;
  • allow-update none: resulta na não utilização DNS dinâmico (DDNS).

Por mais que sejam discretas, algumas configurações são de suma importância para o bom funcionamento do servidor DNS.

Criando arquivos de zona para o servidor de DNS Master

Como vimos no início do artigo, os arquivos de zona são itens essenciais para o nosso mecanismo rodar, e o meio para criá-los é necessário defini-lo no arquivo named.conf, inserindo as informações de acordo com o que foi configurado na etapa anterior. Exemplo:

e-tinet.fwd.zone

e-tinet.rev.zone

Em seguida, é necessário criar cópias dos arquivos de amostras / modelos de configuração predefinidos, ou samples de configuração, para criar arquivos de zona de encaminhamento (foward zone files). Para isso, utilize os comandos:

sudo cp /var/named/named.localhost /var/named/e-tinet.fwd.zone

sudo cp /var/named/named.loopback /var/named/e-tinet.rev.zone

Nos próximos tópicos, editaremos esses arquivos e, também, faremos outros procedimentos importantes a fim de assegurar o funcionamento dos servidores.

Criando arquivo de zona de encaminhamento

Edite o arquivo de zona de encaminhamento usando o comando:

sudo vim /var/named/e-tinet.fwd.zone

Com o arquivo aberto, preencha as informações dos servidores de DNS Master e Slave (sempre nessa mesma sequência) e os respectivos hosts que criamos. Você pode se basear no modelo, abaixo.

$TTL 86400

@           IN SOA  masterdns.e-tinet.com.         root.e-tinet.com. (

                                      2014090401        ; serial

                                            3600        ; refresh

                                            1800        ; retry

                                          604800        ; expire

                                           86400 )  ; minimum

; Name server's

@           IN          NS          masterdns.e-tinet.com.

@           IN          NS          slavedns.e-tinet.com.

; Name server hostname to IP resolve.

@           IN          A           192.168.0.100

@           IN          A           192.168.0.102

; Hosts in this Domain

@           IN          A           192.168.0.200

masterdns           IN          A           192.168.0.100

slavedns            IN          A           192.168.0.102

client              IN          A           192.168.0.200

Salve o arquivo conforme o atalho do seu editor de texto.

Criando o arquivo de zona de pesquisa reversa

Prosseguindo, chegou a hora de criar um arquivo de pesquisa reversa (reverse lookup file) utilizando aquela cópia que fizemos há pouco. Digite: sudo vim /var/named/e-tinet.rev.zone e configure conforme o exemplo, abaixo.

$TTL 86400

@           IN SOA  masterdns.e-tinet.com. root.e-tinet.com. (

                                    2014090402          ; serial

                                          3600          ; refresh

                                          1800          ; retry

                                        604800          ; expire

                                         86400 )        ; minimum

; Name server's

@           IN          NS          masterdns.tecmintlocal.com.

@           IN          NS          slavedns.tecmintlocal.com.

@           IN          PTR         e-tinet.com.

; Name server hostname to IP resolve.

masterdns           IN          A           192.168.0.100

slavedns            IN          A           192.168.0.102

;Hosts in Domain

client              IN          A           192.168.0.200

100                 IN          PTR         masterdns.e-tinet.com.

102                 IN          PTR         slavedns.e-tinet.com.

200                 IN          PTR         client.e-tinet.com.

Terminou? Só salvar e fechar o arquivo.

Verificando as configurações aplicadas

Para validarmos e nos certificarmos de que as configurações são funcionais e seguras, mudaremos o grupo para os arquivos de zona. Observação: faça isso caso eles pertençam a usuário root; verifique pelo comando sudo ls -l /var/named.

Digite:

sudo chgrp named /var/named/e-tinet.fwd.zone

sudo chgrp named /var/named/e-tinet.rev.zone

O próximo passo é verificar se os arquivos de zona não têm erros utilizando o comando named-checkconf.

sudo named-checkconf /etc/named.conf

sudo named-checkzone masterdns.e-tinet.com /var/named/e-tinet.fwd.zone

sudo named-checkzone masterdns.e-tinet.com /var/named/e-tinet.rev.zone

Se os resultados exibidos forem “OK” podemos partir para a próxima etapa — caso contrário, sugerimos que revise as configurações. Certo, então qual é o próximo passo? Resolver uma restrição imposta pelo iptables, que é executado por padrão no sistema CentOS. Trata-se de uma restrição ao localhost, fazendo necessária a adição de uma regra na porta 53. Digite a seguinte sequência:

sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

sudo iptables -L INPUT

sudo service iptables save

sudo service iptables restart

Para finalizar, temos alguns testes a fazer com os arquivos de zona do servidor de DNS Master, os quais faremos utilizando as ferramentas dig e nslookup.

sudo dig masterdsn.e-tinet.com

sudo dig -x 192.168.0.100

sudo nslookup e-tinet.com

sudo nslookup masterdsn.e-tinet.com

sudo nslookup slavedns.e-tinet.com

Se os resultados corresponderem aos parâmetros que configuramos em todas as etapas, significa que o servidor de DNS está pronto para uso. Parabéns!

Configurando o host cliente

Vamos fazer a máquina cliente se comunicar com os servidores de DNS recém-criados? Primeiramente, digite no terminal o comando setup e, então, nos campos Primary DNS Server e Secondary DNS Server, preencha com os endereços de IP dos servidores Master e Slave, respectivamente. Selecione a opção OK para confirmar.

Faça o mesmo com o arquivo /etc/resolv.conf por meio do editor de texto de sua preferência, inserindo as seguintes informações:

search e-tinet.com # apenas reiterando que esse campo deve ser substituído pelo domínio que você criou, não necessariamente como neste exemplo

nameserver 192.168.0.100

nameserver 192.168.0.102

Sinta-se livre para fazer os testes via comandos dig e nslookup. Façamos um ping para finalizar a configuração:

ping masterdns.e-tinet.com -c 2

ping slavedns.e-tinet.com -c 2

ping 192.168.0.100 -c 2

ping 192.168.0.102 -c 2

Funcionou? Esperamos que sim. Depois do árduo trabalho, temos os servidores de DNS devidamente configurados e prontos para serem gerenciados de maneira simples, ainda que o setup seja um pouco exaustivo pela quantidade de processos.

No contexto de administração de sistemas, o BIND viabiliza a customização completa dos servidores de DNS, de modo que, ao gerenciar uma variedade muito grande destes, o sysadmin terá facilidade para identificar domínios, endereços de IP, arquivos de zona e respectivos conteúdos.

Quer dominar outros procedimentos incríveis que os sistemas baseados em Linux permitem fazer? Dê uma olhada na página Profissionais Linux e conheça o curso online que o levará do nível básico ao avançado rapidamente, tudo na prática!

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Artigos Recentes

Aprenda a dominar o Linux de uma vez por todas

Aprenda a dominar o Linux de uma vez por todas