FreeBSD

7 de outubro de 2016

Servidor DNS no FreeBSD

Mais artigos de »
Escrito por: Leonardo Souza
Tags:

Servidor DNS no FreeBSD

Todos os computadores conectados a uma rede são identificados por meio de seu nome e IP. Sendo assim, para que uma conexão seja bem sucedida, os computadores envolvidos nela precisam conhecer o IP para onde enviar determinado pacote. Quando um computador não sabe como encontrar um IP específico ele consulta o seu servidor DNS.

Domain Name System ( DNS ) é o protocolo através do qual os nomes de domínio são mapeados para  endereços IP , e vice-versa. O servidor DNS é o responsável por disponibilizar este serviço, ele possui uma base de dados que relaciona os IPs de outros dispositivos, não só computadores tradicionais, com seus respectivos nomes. Em outras palavras podemos dizer que os servidores DNS conhecem os computadores de um determinado domínio e os respectivos IPs deles.

Alguns servidores DNS realizam consulta em outros servidores do mesmo tipo.  Assim, quando um servidor DNS receber uma requisição e não souber qual o IP do computador pesquisado, ele irá pesquisar em outros servidores. Logo, podemos dizer que cada servidor DNS responde por um domínio e quando precisa de um registro referente a outro domínio ele pesquisa no servidor DNS responsável por este domínio.




O maior exemplo deste tipo de consulta é visto em um simples acesso à internet. Quando digitamos no navegador um site específico, nosso computador realiza uma pesquisa no nosso servidor DNS e este por sua vez realiza uma pesquisa procurando pelo servidor DNS responsável pelo domínio que possui associado a ele o IP procurado.

Funcionamento do DNS

Tratando-se de internet, os servidores DNS estão distribuídos de forma a disponibilizar uma gigantesca base de dados, relativa aos IP e nomes dos computadores. Os principais servidores são os chamados “root servers”, 14 servidores espalhados em vários lugares do mundo e tem como principal função atender as requisições de resolução de nomes, isso é feito por meio de servidores menores, estes sim, responsáveis pelos domínios.

Os nomes de domínios são lidos da direita para a esquerda, começando pelos domínios primários TLD’s (top level domains), como os “.com“, “.net“, “.info“, etc. Logo depois os domínios secundários (country code TLD’s), que recebem o prefixo de cada país, como “.com.br“, “.net.br“, etc.

Dessa forma, se perguntamos a nosso servidor DNS pelo domínio “mundofreebsd.com.br”  o servidor DNS que estamos utilizando perceberá que não é o responsável por este domínio e irá interrogar o domínio ’’.br” para descobrir quem é o responsável pelo domínio. Este por sua vez irá encaminhar a solicitação para os subdomínios “.com” e logo seremos encaminhados para o servidor DNS responsável pelo domínio que nos dirá exatamente qual o IP devemos acessar.

Da mesma forma, se nossa pesquisa for pelo host ftp.mundofreebsd.com.br, então quem vai dizer qual o IP do host “ftp”, dentro do domínio “mundofreebsd.com.br”, será o servidor DNS responsável pelo domínio. Isso acontece porque um domínio possui todos os seus subdomínios registrados no servidor DNS responsável por ele.

Estes registros são armazenados no servidor DNS por meio de arquivos de texto, chamados de arquivos de zona.  Estes registros são especificados nos servidores DNS do domínio. É isso que veremos agora.

Existem vários tipos de softwares que implementam o serviço DNS, a grande maioria dos sistemas open source utilizam o BIND. É possível dizer que ele é um dos mais conhecidos meios de se implementar  este serviço.

Instalando o BIND

Desde a versão 10.1, o FreeBSD não possui o BIND como padrão para servidores DNS. Porém, sabemos que existem vários servidores ainda utilizando ele, e por isso vamos apresentar neste artigo a implementação do servidor DNS sobre este software. Para isso, precisaremos instalá-lo no sistema.

Faremos esta instalação por meio do utilitário “pkg”, utilizando pacotes binários, porém ele também pode ser instalado por meio da coleção de ports. Para detalhes leia o artigo instalação de programas no FreeBSD.

Para instalar o BIND abra o terminal do Shell e digite o comando “pkg install bind99”.

# pkg install bind99

Servidor DNS

Depois de digitar o comando (1), o sistema vai listar todas as dependências que precisam ser instaladas (2) e o espaço necessário em disco (3). Confirme a instalação digitando a tecla “y” (4) e logo o sistema vai concluir a instalação.

Depois de concluir a instalação precisamos inserir uma configuração no arquivo /etc/rc.conf. Abra o arquivo com o editor de textos ee e insira a seguinte linha “named_enable=”YES”” (1).

# ee /etc/rc.conf

named_enable

Dessa forma, estamos configurando o Daemon do BIND, o named, para iniciar junto com o sistema.

Pronto, agora o BIND está devidamente instalado. Porém antes de editar qualquer arquivo de configuração  é importante entender e conhecer os registros que serão configurados para o funcionamento da zona e consequentemente do domínio.

Entendo as configurações

Principal arquivo de configuração do named é o /usr/local/etc/namedb/named.conf. Nas versões anteriores do FreeBSD em que o BIND vinha instalado por default, este arquivo ficava no diretório /etc. Porém, neste caso ele foi instalado manualmente, por isso se encontra neste diretório.

Abra o arquivo do Named com o comando “ee /usr/local/etc/namedb/named.conf” e insira as linhas abaixo:

zona_criada

Estas linhas definem as zonas que pertencem ao domínio configurado. Precisamos, necessariamente, criar no mínimo duas zonas a principal e a reversa, ambas terão as configurações relativas aos registros do domínio.

Cada zona possui as seguintes características:

Zone: é o nome da zona (1), neste caso nossa zona chama-se “dominiobsd.com”.

Type: declaramos aqui o tipo da zona (2), que pode ser master ou slave. A zona que estamos configurando é do tipo master.

File: aqui especificamos o arquivo que contém as configurações desta zona, neste caso o arquivo é /usr/local/etc/namedb/master/zona.db.

Perceba também que temos uma outra zona chamada “20.20.172.in-addr.arpa”, esta é a zona reversa (4), ela é do tipo master (5) e seu arquivo de configuração é o /usr/local/etc/namedb/master/zona.rev. Veremos mais adiante o que é esta zona, para que serve e como configurá-la.

É sempre interessante utilizar um servidor DNS secundário, neste caso, devemos incluir a linha “allow-transfer” na zona, especificando o endereço do segundo servidor.

allow

Perceba que neste caso, o IP do servidor DNS secundário é o 172.30.30.100 (1).

Outra configuração necessária no arquivo /usr/local/etc/namedb/named.conf, é inserir o IP do servidor no campo “listen on”.

listen-on

Neste caso, o IP do nosso servidor é o 172.20.20.100 (1).

Pronto, finalizamos a configuração do arquivo principal do named. Até agora, declaramos nossas zonas, o tipo destas zonas e o arquivo em que suas configurações serão feitas. Agora vamos criar os arquivos destas zonas e realizar a configuração do domínio.

Antes de apresentar um modelo de arquivo, vamos conhecer as principais configurações deste arquivo:

Um arquivo básico de zona inicia com uma linha semelhante a esta:

@ IN SOA servidor.dominio.com.br. administrador.dominio.com.br. (

Listamos abaixo o que significa cada uma destas opções:

@: indica a origem do domínio e o início da configuração.

IN: é a abreviação de “internet”.

SOA: sigla de “Start of Autority”.

servidor.dominio.com.br: é o “nome completo” do servidor onde está hospedado o serviço DNS.

administrador@dominio.com.br: é o e-mail de contato do administrador do domínio. Perceba que neste caso o nome da conta é separada do domínio por um “.” e não por uma “@”. O e-mail não precisa ser necessariamente “administrador”, poderia ser qualquer outro, por exemplo, “root.administrador.dominio.com.br”.

ATENÇÃO: perceba que existe um “.” (ponto final) logo depois do nome do servidor e do e-mail. Este ponto faz parte da configuração e, portanto, é obrigatório. Ele se refere ao domínio raiz, de responsabilidade dos “root servers” (já mencionados anteriormente). O servidor configurado responderá pelo dominio “dominiobsd.com“, que por padrão, faz parte do domínio raiz. Como os domínios são lidos da direita para a esquerda, então o cliente faria a seguinte leitura:

hierarquia

Na prática, esta primeira linha diz o seguinte: “na internet, o responsável pelo domínio ‘dominiobsd.com‘ é o computador chamado ‘servidor.dominiobsd.com‘ e o e-mail do responsável por este domínio é o ‘administrador.dominiobsd.com‘ “.

A primeira linha termina com um parênteses aberto, o que indica o inicio da configuração de domínio. Logo embaixo temos configurações semelhantes a esta:

2016100501 1d 12h 1w 3h)

O primeiro valor, neste caso o “2016100501“, é um número serial que permite manter um controle de alterações neste servidor. Ele geralmente é composto pela data no formato aaaammdd seguido de dois dígitos, que podem ser qualquer números. Neste exemplo, vemos que a última alteração neste arquivo ocorreu no dia 05 de outubro do ano 2016 e o serial escolhido foi o número 01. Se tivesse mais de uma alteração o número seria outro.

Os outros campos seguintes orientam o servidor DNS secundário, caso exista um, a como proceder em momentos específicos.

O primeiro valor orienta o servidor secundário a aguardar um tempo entre as atualizações, neste caso 10h. Isso significa que a cada 10 horas o servidor secundário vai consultar o servidor DNS primário procurando por atualizações recentes e caso encontre, elas serão feitas também no secundário. Se o servidor secundário identificar que o primário está indisponível ele tenta assumir a responsabilidade pelo domínio, se tornando, mesmo que temporariamente, o servidor com autoridade sobre o domínio.

O segundo valor indica o tempo que o servidor secundário vai aguardar para tentar assumir novamente o domínio, se a tentativa inicial não for bem sucedida. Ou seja, se não conseguir assumir a responsabilidade pelo domínio, neste exemplo, ele vai aguardar 2 horas e tentar novamente.

O terceiro valor indica o tempo máximo que o servidor secundário poderá ser o responsável pelo domínio, ou seja, tempo de expiração da autoridade deste servidor. No exemplo, escolhemos uma semana, tempo mais que suficiente para que o administrador consiga colocar o servidor principal novamente no ar.

O quarto valor representa o tempo mínimo que o servidor secundário permanecerá como responsável pelo domínio, depois de assumi-lo. Neste exemplo, o servidor secundário só poderia devolver a responsabilidade pelo domínio para o servidor principal depois de 1 dia, se tivesse assumido ele anteriormente.

Estes valores são definidos por padrão e embora possam ser alterados, é interessante que só sejam modificados se houver um bom motivo para isso.

Continuando as configurações temos a seguinte linha:

NS       servidor.dominio.com.br.

Esta opção define as máquinas que hospedam o serviço DNS, ou seja, os servidores DNS responsáveis pelo domínio. Se houver mais de uma, ambas devem ser declaradas:

Ex.

NS       servidor1.dominio.com.br.

NS       servidor2.dominio.com.br.

Depois destas configurações, temos que informar os subdomínios, na prática as máquinas e IPs, destas máquinas que pertencem ao domínio configurado:

Ex:

adm         A         172.20.20.60

vendas   A         172.20.20.145

se houver um servidor secundário, ele deve ser listado aqui também.

Ex:

adm        A         172.20.20.60

vendas  A         172.20.20.145

sn2        A         172.20.20.80

Outra configuração importante é a cláusula “IN MX“, necessária quando se pretende utilizar servidores de e-mail. Essa declaração deve ser feita da seguinte forma:

IN MX 5  mail.dominio.com.br.

IN MX 10 mail2.dominio.com.br.

Os números representam a prioridade de cada servidor. Sendo assim, quanto menor o número maior a prioridade. Dessa forma, o servidor “mail.dominio.com.br.” é o servidor de e-mail primário deste domínio, pois possui prioridade sobre o secundário.

Outra opção de configuração é a diretiva “IN CNAME“, utilizada para criar aliases, o seja, apelidos para subdomínios.

Ex:

suporte            A        172.20.20.200

help                 IN CNAME suporte 

Neste caso uma requisição para “help” enviará o solicitante para suporte.

ATENÇÃO: lembre-se que terá todas estas configurações deve ser o mesmo especificado no arquivo “/usr/local/etc/namedb/named.conf”, arquivo principal do Named, neste caso arquivo de zona é o “/usr/local/etc/namedb/master/zona.db”.

Com estas configurações o servidor já estará totalmente funcional. Segue abaixo um modelo de arquivo de zona.

Modelo de arquivo de zona

Servidor DNS

Vamos agora conhecer a zona reversa e aprender como configurá-la.

Arquivo de zona reversa

O DNS reverso permite que a autenticidade de um domínio seja verificado. Dessa forma, é possível checar se o endereço IP atual corresponde realmente com o IP informado no servidor DNS. Assim, evita-se que alguém utilize um domínio que não lhe pertence, para enviar spam, por exemplo. Isso é possível, porque um servidor configurado para checar o DNS reverso vai descobrir se o IP corresponde com o domínio especificado.

Se retornarmos ao arquivo principal do named veremos que existe nela uma zona chamada “20.20.172.in-addr.arpa“, esta é a zona reversa.

zona_criada-reversa

Já explicamos anteriormente o significado de cada linha, nesta declaração do arquivo principal do Named. Assim, sabemos que o nome da zona é “20.20.172.in-addr.arpa”. Para formar este nome utilizamos o IP do servidor invertido e sem o último octeto. Lembre-se que o endereço do servidor DNS é o 172.20.20.100, se tirarmos o último octeto, ou seja, o “100”, e invertemos o número do IP, teremos o número “20.20.172”. Daí surge a origem do nome da zona reversa.

A primeira parte do arquivo de zona reversa é idêntica ao arquivo de zona principal:

@ IN SOA dns.dominio.com.br. administrador.dominio.com.br. (

2016100501 10h 2h 1W 1D )

NS dns.dominio.com.br.

Porém, existe uma diferença na hora de declarar os hosts presentes na zona, neste caso omitimos os três primeiros octetos do IP do host, restando apenas o último número. Por exemplo, o servidor DNS possui o seguinte endereço: 172.20.20.100, para declará-lo neste arquivo utilizaremos apenas o último octeto do endereço, neste caso o 100.

Ex:

100 PTR dominio.com.br.

30  PTR vendas1.dominio.com.br.

40  PTR vendas2.dominio.com.br.

Na imagem abaixo temos um exemplo de arquivo de zona reversa.

zona-reversa

Finalizamos a configuração nos arquivos do domínio.

Finalizamos as configurações relativas ao domínio, agora precisamos configurar nosso computador para utilizar o domínio desejado. Para isso precisamos acessar o arquivo /etc/resolv.conf e inserir as informações sobre o servidor DNS que iremos utilizar.

Para abrir o arquivo digite o comando:

# ee /etc/resolv.conf

Insira as seguintes linhas:

resolv

Salve as alterações no arquivo.

Depois de concluir a configuração, o serviço já pode ser inicializado. Para isso utilize o comando “/usr/local/etc/rc.d/named start”.

# /usr/local/etc/rc.d/named start

Checando as configurações

Depois de concluir as configurações, precisamos checar se estão corretas. Para isso podemos utilizar comandos específicos, para checagem de configuração do Named. Iniciaremos procurando por erros no arquivo /usr/local/etc/namedb/named.conf.

Para checar as configurações do arquivo principal do servidor DNS digitamos o comando “named-checkcon”.

# named-checkconf

Se houver erros neste arquivo, este comando retornará os erros e na maioria das vezes a linha em que se encontram eles. Veja o exemplo abaixo.


named-checkconf11

Perceba que o retorno do comando nos mostra um erro presente na linha 17 do arquivo. Este erro está relacionado a um sinal finalizador de sentença.

Por outro lado, se não houver qualquer erro de sintaxe no arquivo, então nada será apresentado como retorno. Perceba na imagem abaixo.

named-checkconf2

Dessa forma, sabemos que não existem erros no arquivo principal do nosso servidor DNS.

Outra checagem importante, e possível de ser realizada, é no arquivo de zona do domínio. Através desta checagem descobrimos se nosso arquivo foi configurado corretamente ou se existem alguns erros.

Para fazer esta checagem ditamos o comando “named-checkzone” seguido do domínio configurado e logo depois o arquivo de zona deste domínio.

# named-checkzone dominiobsd.com.br /usr/local/etc/namedb/master/zona.db

named-checkzone

Perceba que obtemos uma mensagem dizendo que o arquivo não possui erros. Semelhante ao teste anterior, este retorna a linha do arquivo com erro, caso um erro seja encontrado.

Testando as configurações

Agora vamos testar as configurações do domínio para saber se ele já está funcionando corretamente. Existem dezenas de formas de se fazer isso. Inicialmente faremos este teste por meio do utilitário “DIG”. Este utilitário faz parte do pacote BIND, por isso não precisaremos instalá-lo no sistema.

Digite o comando “dig” seguido do domínio.

# dig dominiobsd.com

Servidor DNS

Perceba que podemos ver no retorno do comando uma entrada especificando o IP do servidor, além de outras informações relativas ao domínio.

Outra forma de testar se o domínio está totalmente funcional é realizar um ping no domínio, se ele estiver “on” então o ping será bem sucedido. Vamos realizar um ping no domínio enviando 5 pacotes.

# ping –c 5 dominiobsd.com

ping-dominio

Perceba que todos os pacotes foram enviados e recebidos com sucesso.

Outra possiblidade é realizar um ping em um host que pertence ao domínio. Vamos utilizar para isso o host chamado “adm”, que está especificado no arquivo de zona.

# ping –c 5 adm.dominiobsd.com

ping-adm

Mais uma vez, podemos ver que o ping é bem sucedido. Isso significa que nosso domínio está totalmente funcional.

Finalizamos assim, a configuração do nosso domínio, o dominiobsd.com.

Considerações Finais

O servidor DNS é um dos serviços mais importantes e essenciais de uma rede de computadores. Podemos dizer que juntamente com o firewall e o DHCP são os serviços mais básicos de uma rede de computadores.  Através deste artigo, podemos observar que a configuração deste serviço é realmente muito simples.

Apresentamos aqui apenas uma configuração básica destes serviço, agora você já pode customizar seu arquivo incrementando seu domínio com as particularidades do seu ambiente.

Espero que o conteúdo tenha sido útil, em caso de dúvidas utilize os comentários.






Sobre o Autor

Foto de perfil de Leonardo Souza
Leonardo Souza
Bacharel em Informática, pós graduado em Segurança de Redes de Computadores e analista de Segurança da Informação. Entusiasta de Segurança da Informação e usuário FreeBSD, porém sem xiismo.




0 Comments


Seja o Primeiro a Comentar!


You must be logged in to post a comment.