anúncios

domingo, 25 de setembro de 2011

Configurando servidor DNS (BIND) no Linux

Introdução
Neste post, apresenta um breve resumo do serviço DNS e configuração do Bind no sistema Linux (Slackware), mas pode ser aplicado em qualquer distro, claro apenas muda o modo de instalação, inicialização, localização do bind de distro para distro.

Qual a função do DNS?
A função do DNS é traduzir um domínio para endereço IP.
Imagina você memorizar todos endereços IPs dos sites que costuma acessar: Ex: 200.154.56.80 (www.terra.com.br), 200.18.7.2(www.joinville.udesc.br), etc, então é muito mais fácil lembrar o nome do site do que pelo endereço IP né, por isso que temos o serviço DNS que faz a tradução do site acessado para endereço IP.

O DNS (Domain Name System), é um serviço cliente/servidor baseado em hierarquias, em que a parte cliente é conhecida como resolver (resolvedor) e a parte servidora como name server. As conexões entre o cliente e o servidor se dão através do protocolo UDP e porta 53.

Estrutura de domínios
O servidor DNS é baseado em uma estrutura hierárquica, em que o processo de resolução se dá da hierarquia mais alta para a mais baixa. O ponto mais alto da hierarquia é chamado de root-level-domain, ou domínio raiz, que é representado por um caractere '.'.
O próximo nível da hierarquia são os top-level-domain, ou domínios de primeiro nível. Eles são representados por códigos domínio de primeiro nível. Veja alguns deles:

* com - Organização comercial
* mil - Militar
* net - Redes (backbones para a Internet)
* org - organizações sem fins comerciais
* gov - governamental
* xx - Sigla do país representado por dois caracteres. Ex: br, uk

Zona de autoridade
É a parte do domínio ao qual um servidor de DNS é o responsável. Em cada zona tem-se um arquivo de zona que é a base de referências entre os IPs e nomes desta zona.

Servidor primário

É o servidor onde estão os arquivos originais da zona. Só pode existir um servidor primário por zona.
Servidor secundário
Aqui é onde ficam as réplicas dos arquivos de zona, que podem ser consultados no caso de inoperabilidade do servidor primário. Ao contrário do servidor primário, podem existir vários servidores secundários. No Brasil, para que possamos registrar um domínio é obrigatório ter dois servidores: o Primário e também um Secundário.

Servidor master
É aquele servidor para o qual um servidor secundário irá solicitar as cópias dos arquivos de zona.
Servidor cache
É aquele servidor que não responde por zona alguma. Sua função é apenas armazenar resultados de consultas que ele armazena em cache. Assim, novas consultas ao mesmo registro serão atendidas com mais rapidez.

Instalação
No Debian: #apt-get install bind9
No Slackware: Basta você colocar o CD1 do Slackware, e após montado o CD-ROM , entrar na pasta Slackware/n do CD e digitar no terminal: #installpkg bind-9.4.3_P4-i486-1.txz
PS: Também pode optar para instalar o bind já na instalação do Slackware.

* /etc/named.conf - Arquivo de configuração geral do BIND.
* /usr/sbin/named - O binário (daemon) do BIND.
* /usr/doc/bind-9.4.3-P4/ - Manual em html muito bom do BIND em inglês.
* /var/named/caching-example/ - Diretório com arquivos exemplo de configuração básicos do BIND

Depois de instalado o pacote bind, vamos para configuração dos arquivos.
named.conf

options {
directory "/var/named";
version "PROTECT";
allow-transfer {192.168.1.103;};
listen-on {127.0.0.1; 192.168.1.103;};
allow-recursion {127.0.0.1; localhost; 192.168.1.0/24;};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "caching-example/named.root";
};

zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
zone "103.1.168.192.in-addr.arpa" IN {
type master;
file "caching-example/domain.rev";
allow-transfer {192.168.1.103;};
};
zone "mundodacomputacao.com.br" IN {
type master;
file "caching-example/mundodacomputacao.host";
allow-transfer {192.168.1.103;};
};

Explicação do arquivo named.conf
*directory - Aqui você indica qual será o diretório onde ficará os arquivos de registros DNS.
*version - versão do bind. Pensando na segurança é comum esconder a versão do bind, por exemplo nesse caso 'PROTECT'.
*minimal-responses - Se habilitado, quando o servidor gerar respostas, somente adicionará registros na autoridade quando requerido. Esta opção aumenta a performance do servidor.
*allow-transfer - Aqui você indica quem poderá fazer transferência de autoridades.
*listen-on - Aqui você especifica quais interfaces estão habilitadas a "escutar" conexões no protocolo UDP e porta 53.
*allow-recursion - Caso vá usar um DNS que será acessível pela Internet, é bom que você não deixe que esse pessoal faça recursões, ou seja, que eles pesquisem outros domínios que não sejam os que você tem cadastrado no seu servidor.

Zona Reversa (domain.rev)

$TTL 86400
$ORIGIN mundodacomputacao.com.br.
@ IN SOA Slackware.mundodacomputacao.com.br. root.Slackware.mundodacomputacao.com.br. (
4 ; Serial de sincronização
604800 ; refresh
86400 ; retry
2419100 ; expiry
640800 ) ; Negative cache TTL
IN NS Slackware.mundodacomputacao.com.br.
1 IN PTR Slackware.mundodacomputacao.com.br.
1 IN PTR ftp
1 IN PTR www

Explicação:
O $TTL se refere ao time-to-live, o tempo de vida do registro que é medido em segundos. Então, no nosso exemplo, o tempo de vida é de 86400 segundos.
$ORIGIN é uma variável que o BIND usa para registros que não entende. É onde você coloca o nome do seu domínio em qualquer registro não-qualificado.
Domínio (mundodacomputacao.host)

$TTL 86400
@ IN SOA Slackware.mundodacomputacao.com.br. root.Slackware.mundodoacomputacao.com.br. (
4 ; Serial de sincronização
694800 ; refresh
86400 ; rety
2419100 ; expiry
640800 ) ; Negative cache TTL
NS Slackware.mundodacomputacao.com.br.
IN MX 10 mundodacomputacao.com.br.
localhost IN A 127.0.0.1
mundodacomputacao.com.br. IN A 192.168.1.103
dns IN A 192.168.1.103
www IN A 192.168.1.103
ftp IN A 192.168.1.103

Conclusão
Depois de configurado inicie o serviço (bind).
No Debian: #/etc/init.d/bind9 start
No Slackware: #/etc/rc.d/rc.bind start

Como verificar erros de sintaxe do Bind?
No terminal digite:
#named-checkconf /etc/named.conf
Você pode querer chroot para o diretório de forma que incluem diretório no arquivo de configuração são redirecionadas por um nome semelhante:
#named-checkconf -t /var/named/chroot /etc/named.conf
Se não há saída, a configuração é considerada correta e você pode com segurança reiniciar o daemon Bind. Se houver um erro será exibida na tela:
#named-checkconf /etc/named.conf

Na máquina cliente, coloque o DNS do servidor que acabou de configurar e faça um teste.
Nesse caso: $ping mundodacomputacao.com.br
Se obter resposta, então esta OK!

Algumas observações:
1. nesse caso foi configurado o serviço DNS com domínio 'mundodacomputacao.com.br', hostname 'Slackware' e IP 192.168.1.103. Substitua para seu caso.
2. atenção na sintaxe do bind, pois é comum esquecer '.' e ';' no arquivo de configuração.
3. testado na distribuição Linux Slackware 13.1

Feito!

3 comentários:

  1. Valeu por compartilhar conhecimento!
    Fiz a configuração do BIND no Debian Squeeze seguindo este post e funcionou certinho!

    ResponderExcluir
  2. Acabei de tentar fazer, sem sucesso...

    Tentei do Debian 7 pelo VMWare Player... O unico "erro" que o checkconf indica no named.conf é 'options' redefined near 'options' e o bind não inicia...

    ResponderExcluir
    Respostas
    1. Enilton,

      No arquivo named.conf olhe os includes e ver onde ele inclui o arquivo chamado named.conf.options.

      Este é onde você coloca as suas opções. Deve redefinir os includes do named.conf é por isso que tem um erro fatal.

      No Debian 7 teve algumas mudanças.

      Feito!

      Excluir