Servidor Linux: Configurando Zonas de DNS e VirtualHosts no Apache 2

Iremos configurar as zonas de domínios e sub-domínios, e fazer com que o Apache 2 responda por esses domínios no ambiente WEB. Em suma, o que vou demonstrar é como configurar o domínio nossoserver.com, o sub-domínio guarani.campeaobrasileiro.com.br e fazer com que através do navegador consigamos acessá-los pelos endereços http://www.nossoserver.com e http://guarani.campeaobrasileiro.com.br.

O processo aqui descrito é basicamente o mesmo apresentado na documentação oficial do Ubuntu Intrepid Ibex (Ubuntu 8.10), na seção de configuração do BIND. Porém gosto de entender cada linha e cada parâmetro configurado, então tentei deixar o mais detalhado possível, explicando em detalhes a configuração do arquivo de zona e os principais tipos de registro DNS. Finalizarei com as configurações para o Apache 2, que por sinal, são bem simples.

Adicionando uma zona Primary Master

Vamos editar o arquivo /etc/bind/named.conf.local para inserirmos as informações da zona de DNS.

# vi /etc/bind/named.conf.local

Basta inserir as linhas abaixo lembrando de substituir o domínio nossoserver.com pelo domínio de sua escolha.

zone "nossoserver.com" {
type master;
file "/etc/bind/zonas/db.nossoserver.com";
};

Entendendo cada linha:

  • zone – onde deverá ser inserido o nome do domínio, no nosso caso nossoserver.com;
  • type – o tipo de configuração da zona, em nosso caso é master, pois o responderá de forma autoritária por todas as consultas feitas ao domínio. Outros tipos são: forward, hint, slave (utilizado para configuração em servidores secundários de DNS), stub e delegation-only. No final deste post, na seção fontes, é possível acessar um link que detalha cada um dos tipos;
  • file – caminho do arquivo de configuração da zona de de DNS.

Após inserir as linhas, salve o arquivo (:wq!).

A melhor forma de configurarmos o arquivo de zona é utilizando o modelo fornecido pelo próprio BIND no arquivo /etc/bind/db.local. Então vamos criar o diretório onde ficarão as zonas (por questão de organização eu coloco em um diretório em separado, no caso o diretório se chama zonas) e copiar o modelo:

# mkdir /etc/bind/zonas
# cp /etc/bind/db.local /etc/bind/zonas/db.nossoserver.com

Agora vamos editar o arquivo db.nossoserver.com:

# vi /etc/bind/zonas/db.nossoserver.com

Você deverá alterá-lo deixando-o como abaixo:
;
;BIND data file for local loopback interface
;
$TTL 86400
@ IN SOA zenon.nossoserver.com. root.nossoserver.com. (
2009041701 ;Serial
43200 ;Refresh
900 ;Retry
2419200 ;Expire
3600) ; Negative Cache TTL
;
@ IN NS zenon.nossoserver.com.
@ IN A 192.168.0.2
zenon IN A 192.168.0.2
careca IN A 192.168.0.4
www IN CNAME careca.nossoserver.com
bozo IN A 192.168.0.1

 

Faça as alterações conforme suas configurações locais.

Antes de entendermos cada linha, vale avisar que o ponto-e-virgula deve preceder comentários.

Entendendo cada linha:

  • $TTL – (time-to-live) é o tempo, em segundos, que a informação da zona DNS deverá ser armazenada em cache, ou seja, os servidores que armazenaram as informações da zona, deverão considerar a informação válida apenas dentro do período TTL e caso seja necessária uma nova consulta e o TTL já tenha expirado, então o servidor DNS deve ser consultado novamente. O tempo recomendado pela RFC 1912 é de um dia. Se o TTL for zero, então a informação não será armazenada em cache;
  • SOA – é a linha de definição da autoridade do domínio. Define o nome da zona, servidor de DNS e e-mail do responsável. Possui cinco colunas:
Nome Classe RR Nome do Servidor E-mail do responsável
@ IN SOA zenon.nossoserver.com. root.nossoserver.com.
  • Nome – normalmente utiliza-se @, pois é a referência ao nome original da zona definido (em nosso caso) no arquivo /etc/bind/named.conf.local;
  • Classe – historicamente existem mais duas opções HS e CH, porém são padrões do MIT e não são mais utilizados, portanto deve se utilizar IN como referência a Internet;
  • Nome do servidor – parâmetro MNAME referente ao nome do servidor DNS e deve ser finalizado por ponto “.”;
  • E-mail do responsável – parâmetro RNAME que indica o e-mail do responsável pela zona.
  • Serial – deve ser incrementado a cada alteração no arquivo de zona, por isso que deixei como 1. Porém alguns administradores de rede preferem deixar a data da última alteração, por exemplo 2009041701, ou seja 17/14/2009 e 01 por ser a primeira configuração. Servidores secundários fazem a atualização da sua configuração caso o valor seja aumentado;
  • Refresh – informa ao servidor secundário de DNS quando deverá ser atualizada a informação da zona. Também é configurado em segundos e o recomendado é doze horas, ou seja 43200 segundos;
  • Retry – define o tempo entre cada tentativa (sem sucesso) de contato entre o servidor de DNS secundário e o primário. Também definido em segundos e o tempo recomendado é de três a quinze minutos;
  • Expire – usado apenas por servidores de DNS secundário. Tem como função indicar quando o servidor secundário parará de responder pela zona e contatará o servidor principal;
  • Negative Cache TTL – tempo que um erro de DNS fica em cache. (Sinceramente não consegui concluir o objetivo deste parâmetro).

Os tempos definidos na configuração de SOA não precisam ser escritos diretamente em segundos, o que reflete em menos uso de calculadora. Você pode utilizar letras como atalhos da configuração. Explicando melhor: No TTL quando definimos 86400 segundos, ou seja, 1 dia, então poderíamos ter configurado como 24H ou 1D, para o Refresh que definimos como 43200 segundos, ou seja, 12 horas, poderíamos ter colocado 12H.

Registros do DNS

Além da configuração básica da zona, também é necessário configurar os demais registros do DNS. É importante destacar que a estrutura aplicada aos demais RRs (resource records) é o mesmo da definição do SOA.

Em nosso caso, a linha registro zenon IN A 192.168.0.2 faz com que todos as máquinas que utilizem este servidor DNS possam acessar a máquina zenon.nossoserver.com apenas com um a palavra zenon, pois foi mapeada com o RR A para o IP 192.168.0.2. Já o registro www é necessário para que configuremos o domínio http://www.nossoserver.com para que responda no servidor careca.nossoserver.com. Então foi mapeado para o servidor 192.168.0.4.

Repare que as últimas duas linhas de registro são referência aos demais servidores, ou seja, o servidor WEB chamado de careca.nossoserver.com e o gateway que foi chamado de bozo.nossoserver.com. Cada um deles foi mapeado para seu IP.

Principais tipos de registros DNS

Existem outros tipos de registros, porém os mais comuns são A, MX, CNAME e NS:

  • A – faz o mapeamento de um nome à um IP em formato IPv4. Exemplo:
    www IN A 192.168.0.2
  • CNAME – faz o mapeamento de nome (apenas de nomes) para o nome do servidor. Exemplo:
    web IN CNAME www.nossoserver.com.
  • MX – especifica o nome e a preferencia do servidor de e-mail. Exemplo:
    IN MX 10 mail.nossoserver.com.
    mail IN A 192.168.0.100
  • NS – aponta qual é o servidor que responde pelo domínio. Exemplo:
    @ IN NS zenon.nossoserver.com.
  • PTR – utilizado na configuração do dns reverso (veremos mais abaixo) mapeia um IP a um nome, ou seja, faz o papel inverso do tipo A. Exemplo:
    2 IN PTR www.nossoserver.com
  • SRV – tentando ser bem sucinto, a função deste registro é mapear serviços e é utilizado por serviços de diretórios como o LDAP. Voltaremos ao assunto no próximo post quando trataremos da integração entre o Active Directory e o Bind. Por hora, acesse o link com maiores detalhes: http://www.zytrax.com/books/dns/ch8/srv.html.

Configurando a zona reversa

Primeiro vamos entender o que é e pra que serve a zona reversa de DNS. Zona reversa tem como objetivo revelar o nome de um host a partir de um IP. Ou seja, é baseado no tipo de registro PTR.

A criação da zona reversa segue o mesmo procedimento da criação do arquivo de zona, onde o registro SOA tem a mesma configuração de uma zona “normal”. A única diferença é relativo aos registros PTR, onde devemos mapear um IP para um nome (host name). Então vamos utilizar o próprio arquivo de zona como modelo.

Vamos copiá-lo e editá-lo:

# cp /etc/bind/zonas/db.nossoserver.com /etc/bind/zonas/db.192
# vi /etc/bind/zonas/db.192

O código deverá ficar como abaixo, porém é necessário que você faça as alterações conforme suas configurações:

;
;BIND data file for local loopback interface
;
$TTL 86400
@ IN SOA zenon.nossoserver.com. root.nossoserver.com. (
2009041701 ;Serial
43200 ;Refresh
900 ;Retry
2419200 ;Expire
3600) ; Negative Cache TTL
;
@ IN NS zenon.
2 IN PTR zenon.nossoserver.com.
4 IN PTR careca.nossoserver.com.
1 IN PTR bozo.nossoserver.com.

Agora basta salvar o arquivo e reinicializar o serviço BIND:

# /etc/init.d/bind9 restart

Verifique qualquer ocorrência no log com o comando:

# cat /var/log/syslog | grep named

Testando as configurações

Para testar se as configurações estão corretas, antes mesmo de reinicializar o serviço BIND, basta utilizar os comandos abaixo:

# named-checkzone nossoserver.com /etc/bind/zonas/db.nossoserver.com
# named-checkzone nossoserver.com /etc/bind/db.192

Os resultados devem aparecer como estes:

zone nossoserver.com/IN: loaded serial 2
OK

zone nossoserver.com/IN: loaded serial 1
OK

A ferramenta named-checkzone é muito útil para validarmos e verificarmos se nossos arquivos de zona estão configurados corretamente com o domínio definido.

Depois de reinicializado o serviço BIND, você poderá testar suas configurações de DNS com os comandos:

# ping nossoserver.com
# dig axfr nossoserver.com

Configurando um sub-domínio

Agora vamos adicionar o sub-domínio guarani.campeaobrasileiro.com.br. O processo é bem simples e caso você tenha lido com atenção as informações acima, você não precisará dedicar muito tempo a esta parte do tutorial.

Primeiramente vamos editar o arquivo /etc/bind/named.conf.local e adicionar as linhas abaixo:

# vi /etc/bind/named.conf.local
zone "guarani.campeaobrasileiro.com.br"{
type master;
file "/etc/bind/zonas/db.guarani.campeaobrasileiro.com.br";
};

Após salvar o arquivo, então vamos criá-lo no diretório zonas e deixá-lo como o exemplo abaixo:

# vi /etc/bind/zonas/db.guarani.campeaobrasileiro.com.br

;
;BIND data file for local loopback interface
;
$TTL 86400
@ IN SOA zenon.nossoserver.com. root.nossoserver.com. (
2009041701 ;Serial
43200 ;Refresh
900 ;Retry
2419200 ;Expire
3600) ; Negative Cache TTL
;
@ IN NS zenon.nossoserver.com.
@ IN A 192.168.0.4

Pronto, salve o arquivo, reinicialize o serviço BIND e o sub-domínio estará configurado. Porém, é necessário configurarmos o Apache 2 para que o sub-domínio seja acessível via navegador.

Configurando o Apache 2 para responder pelo domínio

Agora, depois de explicar e detalhar a configuração da zona dns e criarmos nosso domínio e sub-domínio, vamos fazer com que eles sejam acessíveis via navegador, sendo assim, será possível acessá-los digitando no navegador: http://www.nossoserver.com e http://guarani.campeaobrasileiro.com.br.

Supondo que você tenha o Apache 2 instalado e configurado. Vamos acessar o servidor careca.nossoserver.com e editar o arquivo /etc/apache2/sites-available/default inserindo as informações do domínio e do sub-domínio.

# vi /etc/apache2/sites-available/default

Insira as linhas abaixo:

<VirtualHost *:80>
ServerName www.nossoserver.com
DocumentRoot /var/www/www.nossoserver.com
</VirtualHost>
<VirtualHost *:80>
ServerName guarani.campeaobrasileiro.com.br
DocumentRoot /var/www/guarani.campeaobrasileiro.com.br
</VirtualHost>

Entendendo as linhas inseridas:

  • VirtualHost – deixei para que qualquer entrada na porta 80 seja entendido pela configuração;
  • ServerName – o nome do servidor, um pouco óbvio, porém é o endereço do domínio ou sub-domínio que será digitado no navegador;
  • DocumentRoot – caminho onde estão localizados os arquivos que deverão ser exibidos no site, por exemplo, arquivos html, php, png, etc.

Vale lembrar que é necessário existir os diretórios configurados na tag DocumentRoot. E para que você possa ter um resultado mais consistente, eu sugiro que seja criada uma página chamada index.html dentro de cada um dos diretórios.

Agora basta reinicializar o serviço Apache 2 e testar em seu navegador.

# /etc/init.d/apache2 force-reload

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *