Mostrando postagens com marcador DNS. Mostrar todas as postagens
Mostrando postagens com marcador DNS. Mostrar todas as postagens

domingo, 4 de outubro de 2015

Anúncio de Servidores DNS em Roteadores Linux (RDNSS)

Olá Pessoal.

Vamos a uma dica rápida sobre a autoconfiguração SLAAC do IPv6...

Recentemente escrevi um artigo intitulado "Anúncio de Prefixos IPv6 em Roteadores Linux" explicando o processo de instalação do pacote RADVD no Linux para fazer o anúncio dos prefixos IPv6 para toda uma rede local (link) através da autoconfiguração de endereços denominada SLAAC. No Linux o RADVD permite o envio periódico das mensagens ICMPv6 Tipo 134 (RA) para todos os clientes através do endereço ff02::1 (multicast-all-nodes) com o anúncio dos prefixos configurados.

Ocorre que uma limitação bastante reconhecida da autoconfiguração SLAAC é que ela originalmente permitia apenas a autoconfiguração do prefixo da rede e do endereço de gateway (fe80 do roteador responsável pelos anúncios RA). De fato um recurso muito interessante, mas pouco útil na prática por não permitir a configuração de um ou mais endereços de servidores DNS para fazer a resolução de nomes no contexto da Internet. 

Essa limitação foi solucionada e revisada em 2010 com a publicação da RFC 6106, oportunidade em que o daemon RADVD do Linux passou a oferecer suporte à configuração de parâmetros adicionais que permitem anunciar também, além do prefixo e gateway, um ou mais servidores DNS para os clientes autoconfiguradores via SLAAC. A configuração em si é bastante simples, bastando adicionar a declaração de um bloco RDNSS (Recursive DNS Server) no arquivo de configuração /etc/radvd.conf, conforme observado na figura abaixo. Também pode ser declarado um bloco DNSSL (DNS Search List) para informar aos clientes o sufixo do domínio.


Agora sim a autoconfiguração SLAAC se torna mais atrativa no IPv6!
Façam seus testes...

Samuel. 

quarta-feira, 23 de setembro de 2015

Configuração de Registros IPv6 em Servidores DNS

Olá Pessoal.

No livro "IPv6 - O Novo Protocolo da Internet" explico ao leitor que uma particularidade do DNS é que, diferente do que acontece com outros serviços, não existe uma versão DNSv4 e outra DNSv6. O serviço DNS continua sendo o mesmo em execução nos servidores, o que muda na realidade é que existe uma nova classe de registros para IPv6 denominada AAAA (quad-A).

No IPv4 o mapeamento entre endereços v4 e nomes de domínio é realizado adicionando novas entradas A, procedimento detalhado em outro artigo intitulado "Servidor DNS no Sistema Operacional Linux". Ocorre que para endereços IPv6 essas entradas chamam AAAA, uma alusão ao fato de que os endereços v6 são quatro vezes mais extensos do que os endereços v4.

Este artigo tem por objetivo apresentar o processo de configuração de endereços IPv6 nas zonas direta e reversa de um servidor DNS baseado em Linux Debian rodando o Bind. As configurações estão baseadas na topologia abaixo, em que temos um servidor DNS primário (2001:db8:cafe::201) e outro secundário (2001:db8:cafe::202) responsáveis pelo domínio "nome.com.br" na rede 2001:db8:cafe:0::/64.




A primeira etapa consiste na instalação do pacote "bind9" para que o Linux possa ser posteriormente configurado como servidor primário DNS na rede. Essa tarefa é simples e rápida através do APT.

root@ns1:/# apt-get install bind9

Os arquivos de configuração ficam armazenados em "/etc/bind". No arquivo de configuração "/etc/bind/named.conf.local" são realizadas as primeiras configurações da zona direta de domínio (forward) e da zona reversa.

#--- em /etc/bind/named.conf.local

zone "nome.com.br"
{
type master;
file "/etc/bind/nome.com.br.forward";
allow-transfer { 2001:db8:cafe::202; };
};


zone "0.0.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa"
{
type master;
file "/etc/bind/nome.com.br.reverse.ipv6";
allow-transfer { 2001:db8:cafe::202; };
};

Para o exemplo da topologia apresentada neste artigo, a configuração do arquivo da zona direta deve ficar da seguinte maneira:

;--- /etc/bind/nome.com.br.forward
; BIND - Zona Direta (nome.com.br)
;---
$TTL    604800
@       IN      SOA     ns1.nome.com.br. root.nome.com.br. (
                        2014051801       ; Serial
                            604800       ; Refresh
                             86400       ; Retry
                           2419200       ; Expire
                            604800 )     ; Negative Cache TTL
;
@       IN     NS       ns1.nome.com.br.
@       IN NS ns2.nome.com.br.
;
host1   IN     AAAA     2001:db8:cafe::37
ns1 IN AAAA     2001:db8:cafe::201
ns2 IN AAAA 2001:db8:cafe::202
gateway IN AAAA     2001:db8:cafe::254

Outra observação importante diz respeito à entrada do endereço IPv6 reverso, aquele que faz a resolução inversa de endereços em nomes. O endereço reverso não pode ser abreviado, cada caractere é separado por ponto, ele é totalmente escrito de trás para frente e seu domínio raíz é ip6.arpa (RFC 3596). Por exemplo, veja nas configurações que a versão reversa do prefixo 2001:db8:cafe:0::/64 é 0.0.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa, enquanto que o mapeamento reverso (PTR) do host 2001:db8:cafe:0::1 na zona reversa do prefixo anterior seria:

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0     IN     PTR     host.nome.com.br.

Obs.: Nesse sentido, de fato a configuração de DNS para endereços IPv6 ficou mais complicada, não porque seja diferente do processo de configuração de endereços IPv4, mas só porque os endereços são mais complexos.

A configuração do arquivo de zona reversa ficaria da seguinte maneira:

;--- /etc/bind/nome.com.br.reverse.ipv6
; BIND - Zona Reversa IPv6 (nome.com.br)
;---
$TTL 604800
@ IN SOA ns1.nome.com.br. root.nome.com.br. (
2015091802 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@  IN   NS   ns1.nome.com.br.
@  IN   NS   ns2.nome.com.br.
;
7.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN   PTR   host1.nome.com.br.
1.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0  IN   PTR   ns1.nome.com.br.
2.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0  IN   PTR   ns2.nome.com.br.
4.5.2.0.0.0.0.0.0.0.0.0.0.0.0.0  IN   PTR   gateway.nome.com.br.

Antes de tentar inicializar o serviço é importante fazer uma verificação de erros de sintaxe nos arquivos de configuração através das ferramentas named-checkconf e named-checkzone. Se algum erro for indicado, verifique novamente os arquivos.

root@ns1:/# named-checkconf /etc/bind/named.conf.local
root@ns1:/# named-checkzone nome.com.br /etc/bind/nome.com.br.forward
root@ns1:/# named-checkzone 0.0.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa /etc/bind/nome.com.br.reverse.ipv6

Por fim, depois de configurado o servidor, basta iniciar o serviço para validar todas as configurações realizadas. A partir de agora os clintes da rede já podem utilizar o servidor de nomes interno, algo ainda mais importante no contexto do IPv6 em que os endereços são mais complexos. 

root@ns1:/# service bind9 start
ok ] Starting domain name service...: bind9.

No servidor secundário basta configurar o arquivo named.conf.local da maneira abaixo que os arquivos das zonas direta e reversa serão transferidos automaticamente a partir do servidor primário:

#--- em /etc/bind/named.conf.local

zone "nome.com.br"
{
type slave;
file "/etc/bind/nome.com.br.forward";
masters { 2001:db8:cafe::201; };
};


zone "0.0.0.0.e.f.a.c.8.b.d.0.1.0.0.2.ip6.arpa"
{
type slave;
file "/etc/bind/nome.com.br.reverse.ipv6";
masters { 2001:db8:cafe::201; };
};

Façam seus testes...

Samuel.

sexta-feira, 18 de setembro de 2015

Integração dos Servidores DNS e DHCP no Linux

Olá Pessoal.

Recentemente escrevi dois artigos relacionados abaixo descrevendo o processo de configuração de um servidor DNS no Linux Debian utilizando o Bind (pacote bind9) e também como configurar um servidor DHCP no Linux Debian utilizando o ISC DHCP Server (pacote isc-dhcp-server). Pois bem, o objetivo deste artigo é mostrar ao leitor como integrar esses dois serviços de maneira que a aplicação Bind (servidor DNS) possa se comunicar com a aplicação ISC-DHCP-Server (servidor DHCP) para que as máquinas endereçadas dinamicamente na rede sejam automaticamente atualizadas nas relações de zonas direta e reversa do serviço de nomes, ou seja, dispensando qualquer esforço (inviável) de configuração manual para manutenção da integridade dos registros. 




Antes de praticar essa tarefa é recomendada a leitura dos dois artigos citados previamente, uma vez que o foco deste artigo é apenas as alterações necessárias nos arquivos de configuração dos serviços DNS e DHCP para implementar aquilo que chamamos de DNS dinâmico. A topologia abaixo apresenta a proposta de topologia para exemplificar o processo de configuração dos serviços de maneira integrada.




1. Alterações no Arquivo de Configuração do Serviço DNS (Bind)

Abaixo trago um exemplo de configuração do arquivo /etc/bind/named.conf, onde há destaques em amarelo nas alterações necessárias no servidor DNS. No diretório /etc/bind existe um arquivo denominado rndc.key que contém uma chave única que utilizaremos em ambos os serviços DNS e DHCP para fins de autenticação, permitindo a comunicação entre as aplicações.


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

include "/etc/bind/rndc.key";

zone "nome.com.br"
{
type master;
file "/etc/bind/nome.com.br.forward";
allow-transfer { 192.168.221.202; };
allow-update   { key "rndc-key"; };
};


zone "221.168.192.in-addr.arpa"
{
type master;
file "/etc/bind/nome.com.br.reverse";
allow-transfer { 192.168.221.202; };
allow-update   { key "rndc-key"; };
};


Obs.: Uma observação muito importante é que, por padrão, o diretório /etc/bind pertence ao usuário root, mas é necessário que a aplicação Bind tenha acesso de escrita ao diretório para criar e atualizar os novos arquivos dinâmicos das zonas direta e reversa. Por isso é importante ajustar os provilégios de acesso ao diretório através do comando: chown bind:bind /etc/bind.


2. Alterações no Arquivo de Configuração do Serviço DHCP

Abaixo trago um exemplo de configuração do arquivo /etc/dhcp/dhcpd.conf, onde há destaques em amarelo nas alterações necessárias no servidor DHCP. Reparem que estamos referenciando a mesma chave (rndc-key) utilizada anteriormente na configuração do Bind. Se os serviços DNS e DHCP estiverem instalados na mesma máquina, é possível fazer referência direta ao arquivo através da instrução include apontando para o mesmo arquivo na máquina local. Outra opção é inserir o conteúdo da chave manualmente, como é feito no exemplo abaixo. Além disso, também informamos as zonas direta e reversa previamente configuradas no servidor DNS que responde pelo IP informado no parâmetro primary.

#--- /etc/dhcp/dhcpd.conf

ddns-updates on;
ddns-update-style interim;
update-static-leases on;

key "rndc-key"
{
algorithm hmac-md5;
secret "aqui_vem_sua_chave";
};

authority;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

zone nome.com.br
{
primary 192.168.221.201;
key "rndc-key";
}


zone 221.168.192.in-addr.arpa
{
primary 192.168.221.201;
key "rndc-key";
}

subnet 192.168.221.0 netmask 255.255.255.0
{
range 192.168.221.101 192.168.221.199;
option routers 192.168.221.254;
option domain-name "nome.com.br";
option domain-name-servers 192.168.221.201, 192.168.221.202;
}


Façam seus testes...

Samuel.

quinta-feira, 29 de maio de 2014

Servidor DNS no Sistema Operacional Linux

Olá Pessoal.

O DNS é um dos serviços mais importantes na Internet porque é responsável pela tradução dos endereços nominais (nomes) em números (IPs) e vice-versa (resolução reversa). Os nomes são mais fáceis de serem memorizados pelas pessoas e esse serviço será ainda mais importante com a disseminação do IPv6 que possui endereços mais complexos. Esse serviço pode ser implementado no Linux através do BIND. Para exemplificar seu processo de configuração em distribuições baseadas no Debian irei utilizar o cenário abaixo que pode ser facilmente reproduzido no VirtualBox. 


A primeira etapa consiste na instalação do pacote "bind9" para que o Linux possa ser posteriormente configurado como servidor primário DNS na rede. Essa tarefa é simples e rápida através do APT.

root@ns1:/# apt-get install bind9

Os arquivos de configuração ficam armazenados em "/etc/bind". No arquivo de configuração "/etc/bind/named.conf.local" são realizadas as primeiras configurações da zona direta de domínio (forward) e da zona reversa. 

#--- em /etc/bind/named.conf.local
zone    "nome.com.br"   
{
        type master;
        file    "/etc/bind/nome.com.br.forward";
        allow-transfer { 192.168.221.202; };
};

zone    "221.168.192.in-addr.arpa"        
{
        type master;
        file    "/etc/bind/nome.com.br.reverse";
        allow-transfer { 192.168.221.202; };
};

A primeira seção do arquivo de configuração faz referência à zona direta, enquanto que a segunda seção faz referência à zona reversa. O parâmetro type informa que esse servidor será mestre e o parâmetro allow-transfer permite a troca de informações com outro servidor que configuraremos mais adiante. O parâmetro file informa o caminho onde podem ser encontrados os arquivos de configuração das zonas direta e reversa. Respeitando os caminhos informados na configuração anterior, devem ser criados os arquivos das zonas direta e reversa. 

É recomendado gerar esses arquivos a partir de outros já existentes para evitar erros de sintaxe. O arquivo "/etc/bind.db.local" pode servir como modelo de zona direta, enquanto que o arquivo "/etc/bind/db.127" pode servir como modelo de zona reversa. 

root@ns1:/# cp /etc/bind/db.local /etc/bind/nome.com.br.forward
root@ns1:/# cp /etc/bind/db.127   /etc/bind/nome.com.br.reverse 

Para o exemplo da topologia apresentada na imagem, a configuração do arquivo da zona direta deve ficar da seguinte maneira:

;--- /etc/bind/nome.com.br.forward
; BIND - Zona Direta (nome.com.br)
;---
$TTL    604800
@       IN      SOA     ns1.nome.com.br. root.nome.com.br. (
                        2014051801       ; Serial
                            604800       ; Refresh
                             86400       ; Retry
                           2419200       ; Expire
                            604800 )     ; Negative Cache TTL
;
@       IN     NS       ns1.nome.com.br.
@       IN NS ns2.nome.com.br.
gateway IN A 192.168.221.1
client IN A 192.168.221.37
ns1 IN A 192.168.221.201
ns2 IN A 192.168.221.202
router IN CNAME gateway
winxp IN CNAME client

O registro NS faz referência aos próprios servidores DNS responsáveis pelo domínio (autoritativo), que são ns1 e ns2 neste exemplo. Os registros A são mapeamentos diretos entre nomes e endereços IPv4, sendo que para endereços IPv6 os registros são AAAA (quad-A). Os registros CNAME são apelidos que podem ficar associados com nomes que já existem, por exemplo: gateway <> router.

A configuração do arquivo da zona reversa fica da seguinte maneira:

;--- /etc/bind/nome.com.br.reverse
; BIND - Zona Reversa (nome.com.br)
;---
$TTL    604800
@       IN      SOA     ns1.nome.com.br. root.nome.com.br. (
                        2014051801       ; Serial
                            604800       ; Refresh
                             86400       ; Retry
                           2419200       ; Expire
                            604800 )     ; Negative Cache TTL
;
@ IN  NS ns1.nome.com.br.
@ IN NS ns2.nome.com.br.
1 IN PTR gateway.nome.com.br.
37 IN PTR client.nome.com.br.
201 IN PTR ns1.nome.com.br.
202 IN PTR ns2.nome.com.br.

Os registros PTR fazem referência ao mapeamento reverso, por isso as referidas linhas começam com um número referente a porção do endereço IP que remete ao host informado na sequência. Por exemplo, o host 37 dentro da rede 192.168.221.0/24 (192.168.221.37) responde pelo nome client.nome.com.br.

Antes de tentar inicializar o serviço é importante fazer uma verificação de erros de sintaxe nos arquivos de configuração através das ferramentas named-checkconf e named-checkzone. Se algum erro for indicado, verifique novamente os arquivos. 

root@ns1:/# named-checkconf /etc/bind/named.conf.local
root@ns1:/# named-checkzone nome.com.br /etc/bind/nome.com.br.forward
root@ns1:/# named-checkzone 221.168.192.in-addr.arpa /etc/bind/nome.com.br.reverse

Por fim, depois de configurado o servidor, basta iniciar o serviço para validar todas as configurações realizadas anteriormente. A partir de agora, todos os clientes da rede já podem utilizar o servidor de nomes interno. 

root@ns1:/# service bind9 start
[ ok ] Starting domain name service...: bind9.

Obs.: Quando um novo serviço é instalado no Debian, ele passa a ser automaticamente inicializado em caso de boot do servidor. A ferramenta update-rc.d pode ser utilizada para remover/adicionar serviços no processo de inicialização automática, por ex.: "update-rc.d -f bind9 remove" ou "update-rc.d bind9 defaults".

O arquivo local "/etc/resolv.conf" deve ser atualizado com o endereço localhost como próprio servidor de nomes. Estamos nos adiantando ao informar o servidor secundário (192.168.221.201) que será configurado na sequência. 

#--- em /etc/resolv.conf
search nome.com.br
nameserver 127.0.0.1
nameserver 192.168.221.202

Há várias ferramentas de diagnóstico que podem ser utilizadas para verificar se o servidor DNS está operando corretamente. Através do comando dig é possível buscar os registros A e PTR (reverso). É recomendado que o leitor consulte as ferramentas apresentadas abaixo:

root@Host:/# dig gateway.nome.com.br
root@Host:/# dig –x 192.168.221.1
root@Host:/# nslookup <hostname|IP>
root@Host:/# host     <hostname|IP>

Uma vez configurado e funcionando o servidor mestre ns1, configurar o servidor escravo ns2 é bastante simples porque os arquivos de configuração das zonas direta e reversa serão replicados. Primeiramente vamos instalar o bind no servidor seguindo o mesmo procedimento visto anteriormente:

root@ns2:/# apt-get install bind9

No arquivo de configuração "/etc/bind/named.conf.local" devem ser informada as zonas direta e reversa, fazendo referência ao master. Observem que os arquivos das zonas não podem ficar no diretório /etc/bind, como fizemos anteriormente com o servidor master onde o arquivo foi criado e editado manualmente. Ao informar apenas os nomes dos arquivos das zonas (destaque em amarelo), sem nenhum caminho, o sistema se encarrega de armazená-los no diretório /var/cache/bind, onde devem ficar os arquivos dinâmicos (escritos pelo sistema) porque existe permissão de escrita. Pronto, as demais configurações serão sincronizada a partir do master. :-)

zone    "nome.com.br"   
{
        type slave;
        file    "nome.com.br.forward";
        masters { 192.168.221.201; };
};

zone   "221.168.192.in-addr.arpa"        
{
       type slave;
       file    "nome.com.br.reverse";
       masters { 192.168.221.201; };
};

O arquivo local "etc/resolv.conf" deve ser atualizado com o endereço localhost como próprio servidor de nomes. Reparem que estamos informando o servidor master como secundário, já que ns2 também é um servidor de nomes. 

#--- em /etc/resolv.conf
search nome.com.br
nameserver 127.0.0.1
nameserver 192.168.221.201

Feito isso já existem dois servidores DNS instalados no ambiente e que respondem pelo domínio nome.com.br (servidores autoritativos). Os dois servidores irão sincronizar todos os registros de nomes com os servidores raízes espalhados pela Internet e todas as máquinas da rede local farão suas consultas DNS no contexto local, evitando consultas externas que têm maior latência. 

Abraço.

Samuel.