sexta-feira, 16 de setembro de 2011

Servidor DNS

História do Sistema de Nomes de Domínio

Nos anos 70, a ARPAnet era muito pequena, um simples arquivo host.txt contendo todas as informações que se precisava conhecer sobre os hosts resolvia o problema.

Quando a rede começou a crescer e se mover para o protocolo TCP/IP, os administradores de rede tiveram várias dificuldades, e dentre elas podemos citar:

Colisão de nomes - duas máquinas com IPs diferentes poderiam ter o mesmo nome, pois a manutenção dos arquivos hosts.txt se tornava complicada. Não existia nada que prevenisse que alguém adicionasse um host com um nome idêntico a outro.
Consistência - quando necessário incluir um novo host, o procedimento precisava ser replicado para todos os outros arquivos. Caso um dos arquivos hosts.txt não fosse atualizado era gerado um problema na resolução de nomes na rede.
Os arquivos hosts.txt não eram escaláveis.

Em 1984 foram liberadas as RFCs 882 e 883 que descreviam o Sistema de Nomes de Domínio.
O Sistema de Nomes de Domínio
O Sistema de Nomes de Domínio é um banco de dados distribuído.

Desta maneira formou-se um sistema robusto com alto desempenho que pudesse ser replicado e armazenado em memória.

Abaixo vemos a estrutura de uma base de nomes que é semelhante ao sistema de arquivos do UNIX.

Cada domínio tem um nome único, como em um diretório. O nome do domínio identifica a posição na base de dados, mas ao contrário do sistema de arquivos do UNIX, o nome é uma a seqüência do nó para a raiz como mostrado a seguir.

Cada domínio pode ser administrado por uma entidade diferente.

Por exemplo, a InterNIC resolve o domínio edu (educational), mas o subdomínio berkley.edu quem resolve é a universidade U.C. Berkeley.

A primeira implementação do Sistema de Nomes de Domínio era chamada JEEVES, escrita por Paul Mockapetris. Posteriormente outra implementação chamada BIND, escrita para o sistema operacional Berkeley's 4.3BSD UNIX foi escrita por Kevin Dunlap. BIND atualmente é mantida pelo Internet Software Consortium.

Os nomes para os hosts no domínio podem ter até 63 caracteres sendo o “.” reservado para a raiz.

A seguir temos alguns domínios do topo da estrutura.

Para cada país é seguida a norma ISO3166 que define dois caracteres para representação do país. Abaixo alguns exemplos.

No Brasil temos alguns subdomínios tais como:

Para maiores informações entre no site registro.br.

Configuração

Este exemplo é baseado em um computador com sistema Linux pré-instalado.

Altere o nome da máquina para ns1.teste.com.br e o gateway padrão.

nano /etc/sysconfig/network

HOSTNAME=ns1.teste.com.br
GATEWAY=192.168.0.254

Ajuste o arquivo /etc/hosts para

127.0.0.1   localhost.localdomain   localhost
::1         localhost6.localdomain6 localhost6
192.168.0.1 ns1.teste.com.br        ns1
Altere o IP da máquina virtual para 192.168.0.1

nano /etc/sysconfig/network-scipts/ifcfg-eth0
DEVICE=eth0
ONBOOT=Yes
IPADDR=192.168.0.1
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
NETWORK=192.168.0.0
Altere o endereço do servidor que irá resolver os nomes em /etc/resolv.conf, coloque inicialmente o endereço do seu provedor ou dns interno.

nameserver 10.2.0.1
Reinicie a máquina virtual para começarmos a configuração do nosso servidor de nomes.
Instalação dos pacotes
Instale os pacotes necessários para o servidor de nomes

yum install bind caching-nameserver bind-chroot

Definição do domínio teste.com.br
Vamos criar o domínio teste.com.br, edite o arquivo de configuração do servidor de nomes.

nano /etc/named.caching-nameserver.conf
Troque as linhas abaixo, que aparecem no arquivo de configuração,
listen-on port 53 { 127.0.0.1; };
view localhost_resolver {
     match-clients { localhost; };
     match-destinations { localhost; };
     recursion yes;
     include "/etc/named.rfc1912.zones";
};

Por

listen-on port 53 { 127.0.0.1; 192.168.0.1;};
view interno {
     match-clients { localhost; 192.168.0.0/24;};
     allow-query { localhost; 192.168.0.0/24;};
     recursion yes;
     include "/etc/named.rfc1912.zones";
     include "/etc/teste.com.br.zone";
};

Isto fará o servidor esperar por conexões no IP 192.168.0.1 vindas da rede 192.168.0.0/24, e indicará o arquivo onde será definido o domínio teste.com.br.

Como foi instalado o bind-chroot todos os arquivos referentes ao servidor de nomes se encontram no diretório /var/named/chroot. Vamos criar a zona teste.com.br.

nano /var/named/chroot/etc/teste.com.br.zone

Adicione neste arquivo as linhas abaixo.

zone "teste.com.br" IN {
     type master;
     file "teste.com.br.hosts";
     allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
     type master;
     file "teste.com.br.rev";
     allow-update { none; };
};

Altere as permissões deste arquivo para somente leitura e escrita pelo usuário root, e leitura para o grupo named.

O grupo proprietário deste arquivo deve ser o grupo named.
Criação da zona teste.com.br
Edite o arquivo da zona direta onde se cadastram as máquinas.

nano /var/named/chroot/var/named/teste.com.br.hosts
O arquivo deve conter as linhas abaixo.
$TTL 86400
@ IN SOA ns1.teste.com.br. root.ns1.teste.com.br. (
     2007082501 ; serial
     3H ; refresh
     15M ; retry
     1W ; expiry
     1D ) ; minimum
     IN NS ns1.teste.com.br.
     IN NS ns2.teste.com.br.
ns1 IN A 192.168.0.1
ns2 IN A 192.168.0.2
As permissões deste arquivo devem estar como no caso anterior.

Criação da zona teste.com.br reversa

Edite o arquivo da zona direta onde se cadastram as máquinas.

nano /var/named/chroot/var/named/teste.com.br.rev

O arquivo deve conter as linhas abaixo.

$TTL 86400
@ IN SOA ns1.teste.com.br. root.ns1.teste.com.br. (
     2007082501 ; Serial
     3H ; refresh
     15M ; retry
     1W ; expiry
     1D ) ; minimum
IN NS ns1.teste.com.br.
IN NS ns2.teste.com.br.
1.0.168.192.in-addr.arpa IN PTR ns1.teste.com.br.
2.0.168.192.in-addr.arpa. IN PTR ns2.teste.com.br.
As permissões deste arquivo devem estar como no caso anterior.

Testes
Inicie o serviço

/etc/init.d/named start

Resolução do nome

nslookup ns1.teste.com.br 127.0.0.1

A resposta deve ser

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: ns1.teste.com.br
Address: 192.168.0.1

Resolução do nome reverso

nslookup 192.168.0.1 127.0.0.1

A resposta deve ser

Server: 127.0.0.1
Address: 127.0.0.1#53

1.0.168.192.in-addr.arpa name = ns1.teste.com.br.

Colocando para funcionar

Altere o arquivo /etc/resolv.conf para

search teste.com.br
nameserver 127.0.0.1

Faça os testes de resolução de nomes novamente.

Configuração do Servidor de Nomes Secundário

Em outro servidor instale os mesmos pacotes instalados no servidor de nomes primário.

Repita o passo 1 colocando em listen-on a linha abaixo

listen-on port 53 { 127.0.0.1; 192.168.0.1;};
No passo 2 quando for criar as zonas direta e reversa, coloque
zone "teste.com.br" IN {
     type slave;
     file "slaves/teste.com.br.zones";
     masters { 192.168.0.1; };
};

zone "0.168.192.in-addr.arpa" IN {
     type slave;
     file "slaves/teste.com.br.rev";
     masters { 192.168.0.1; };
};

Copie a chave que está no arquivo /etc/rndc.key do servidor primário para o secundário.

Altere no servidor primário, inclua a opção para o domínio na definição da zona direta e reversa, abaixo do allow-update;

allow-transfer { 192.168.0.2; };
Testes
Inicie o servidor DNS e veja se os arquivos do domínio foram transferidos.

ls /var/named/chroot/var/named/slaves/

0 comentários:

Postar um comentário