Configuração de DNS

Esta demonstração destina-se a fornecer os conhecimentos básicos para instalar e configurar um servidor DNS num sistema Linux Fedora. Para além de algum conteúdo teórico, inclui alguns exercícios práticos onde se podem exercitar os conhecimentos.

Esta demonstração usa o conteúdo da página http://www.linuxhomenetworking.com/ e do Configuração de servidor DNS BIND como páginas de referência para o conteúdo teórico. No entanto, acrescenta mais alguma informação retirada do livro "DNS and Bind 5th Edition", de Paul Albitz e Cricket Liu, publicado pela O'Reilly.


Índice


1. Comandos para consultar o serviço DNS

Para Linux:
  • host

O comando host aceita como argumentos o nome do domínio ou o endereço IP e retorna os resultados mostrados abaixo

Exemplo de pesquisa directa
$ host -t AAAA tele1.dee.fct.unl.pt 193.136.120.1

Using domain server:

Name: 193.136.120.1
Address: 193.136.120.1#53
Aliases:
tele1.dee.fct.unl.pt has AAAA address 2001:690:2040:a400::10

Exemplo de pesquisa inversa
$ host 193.136.127.217 193.136.120.1

Using domain server:
Name: 193.136.120.1
Address: 193.136.120.1#53
Aliases:
217.127.136.193.in-addr.arpa domain name pointer tele1.dee.fct.unl.pt.

Para obter mais informações corra o comando "man host"

  • dig

O comando dig permite fazer resoluções directas de nomes ou indirectas de endereços. No entanto, por omissão retorna muito mais informação do que o comando host.

Exemplo de pesquisa directa
$ dig @193.136.120.1 tele1.dee.fct.unl.pt AAAA

; <<>> DiG 9.2.5 <<>> @193.136.120.1 tele1.dee.fct.unl.pt AAAA
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47644
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;tele1.dee.fct.unl.pt. IN AAAA

;; ANSWER SECTION:
tele1.dee.fct.unl.pt. 86400 IN AAAA 2001:690:2040:a400::10

;; AUTHORITY SECTION:
dee.fct.unl.pt. 86400 IN NS ns2.fct.unl.pt.
dee.fct.unl.pt. 86400 IN NS ns.di.fct.unl.pt.
dee.fct.unl.pt. 86400 IN NS ns1.fct.unl.pt.

;; ADDITIONAL SECTION:
ns.di.fct.unl.pt. 86400 IN A 193.136.122.1
ns1.fct.unl.pt. 86400 IN A 193.136.120.1
ns2.fct.unl.pt. 86400 IN A 193.136.120.2

;; Query time: 64 msec
;; SERVER: 193.136.120.1#53(193.136.120.1)
;; WHEN: Wed Mar 16 22:24:23 2005
;; MSG SIZE rcvd: 170

Exemplo de pesquisa inversa
$ dig @193.136.120.1 -x 193.136.127.217

; <<>> DiG 9.2.5 <<>> @193.136.120.1 -x 193.136.127.217
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24851
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;217.127.136.193.in-addr.arpa. IN PTR

;; ANSWER SECTION:
217.127.136.193.in-addr.arpa. 3600 IN PTR tele1.dee.fct.unl.pt.

;; AUTHORITY SECTION:
127.136.193.in-addr.arpa. 3600 IN NS ns2.fct.unl.pt.
127.136.193.in-addr.arpa. 3600 IN NS ns-rev.dns.pt.
127.136.193.in-addr.arpa. 3600 IN NS ns.di.fct.unl.pt.
127.136.193.in-addr.arpa. 3600 IN NS ns1.fct.unl.pt.

;; ADDITIONAL SECTION:
ns.di.fct.unl.pt. 86400 IN A 193.136.122.1
ns1.fct.unl.pt. 86400 IN A 193.136.120.1
ns2.fct.unl.pt. 86400 IN A 193.136.120.2
ns-rev.dns.pt. 3626 IN A 193.136.0.3

;; Query time: 88 msec
;; SERVER: 193.136.120.1#53(193.136.120.1)
;; WHEN: Wed Mar 16 22:21:08 2005
;; MSG SIZE rcvd: 225

Para obter mais informações corra o comando "man dig"

Para Windows:
  • nslookup

O comando nslookup pode ser usado em Windows (ou em Linux) para realizar traduções directas ou inversas.

Exemplo de tradução directa
C:\> nslookup www.linuxhomenetworking.com
Server:  192-168-1-200.my-site.com
Address:  192.168.1.200
Non-authoritative answer:
Name:    www.linuxhomenetworking.com
Address:  65.115.71.34

Exemplo tradução inversa
C:\> nslookup 65.115.71.34
Server:  192-168-1-200.my-site.com
Address:  192.168.1.200
Name:    65-115-71-34.my-isp.com
Address:  65.115.71.34

O nslookup também pode ser usado no modo de consola, introduzindo simplesmente "nslookup".
Neste modo, a versão windows aceita os seguintes comandos (os identificadores são apresentados em maiúsculas, [] significa
opcional):

NAME - imprimir informações sobre o NAME do anfitrião/domínio utilizando o servidor predefinido
NAME1 NAME2 - como o anterior, mas utilizando NAME2 como servidor
help ou ? - imprimir informações sobre os comandos comuns
set OPTION - definir uma opção
    all - imprimir opções, servidor actual e anfitrião
    [no]debug - imprimir informações de depuração
    [no]d2 - imprimir informações de depuração exaustivas
    [no]defname - acrescentar o nome do domínio a cada consulta
    [no]recurse - pedir uma resposta recursiva para a consulta
    [no]search - utilizar a lista de procura de domínios
    [no]vc - utilizar sempre um circuito virtual
    domain=NAME - definir o domínio predefinido como NAME
    srchlist=N1[/N2/.../N6] - definir o domínio como N1 e a lista de procura como N1,N2, etc.
    root=NAME - definir o servidor raiz como NAME
    retry=X - definir o número de repetições para X
    timeout=X - definir o intervalo de tempo de espera inicial como X segundos
    type=X - definir o tipo de consulta (ex. A,ANY,CNAME,MX,NS,PTR,SOA,SRV)
    querytype=X - o mesmo que o tipo
    class=X - definir a classe de consulta (ex. IN (Internet), ANY)
    [no]msxfr - utilizar a transferência de zona rápida de MS
    ixfrver=X - a versão actual a utilizar num pedido de transferência IXFR
    server NAME - definir o servidor predefinido como NAME, utilizando o servidor predefinido actual
    lserver NAME - definir o servidor predefinido como NAME, utilizando o servidor inicial
    finger [USER] - finger do NAME opcional no anfitrião predefinido actual
    root - definir o servidor predefinido actual como raiz
    ls [opt] DOMAIN [> FILE] - lista de endereços no DOMAIN (opcional: saída para FILE)
        -a - lista de nomes canónicos e aliases
        -d - lista de todos os registos
        -t TYPE - lista os registos do tipo indicado (ex.:. A,CNAME,MX,NS,PTR etc.)
    view FILE - ordena um ficheiro de saída 'ls' e apresenta-o com pg
    exit - sair do programa

Exercício

Use um dos comandos apresentados acima para descobrir o conteúdo dos registos de recursos (RR) dos seguintes nomes:

tele1.dee.fct.unl.pt
fct.unl.pt

Relembra-se alguns dos tipos disponíveis no DNS:

Tipo

Significado

Conteúdo

A

IPv4 Host Address

32-bit IP address

AAAA

IPv6 Host Address

128-bit IP address

CNAME

Canonical Name

Canonical Domain Name for an alias

MX

Mail Exchanger

16-bit preference and name of host that acts as mail exchanger for the domain

NS

Name Server

Name of authoritative server for domain

HINFO

CPU & OS

Name of CPU and Operating System

MINFO

Mailbox info

Information about a mailbox or mail list

PTR

Pointer

Domain name (like a symbolic link)

SOA

Start of Authority

Multiple fields that specify which parts of the naming hierarchy a server implements

TXT

Arbitrary text

Uninterpreted string of ASCII text


2. Ficheiros de configuração do DNS no Linux Fedora Core

Cliente DNS

Os nomes de domínios podem ser resolvidos utilizando o ficheiro /etc/hosts ou o serviço DNS. A ordem porque os serviços são consultados é definida no ficheiro /etc/host.conf:

order hosts,bind

A configuração do cliente DNS é feita no ficheiro /etc/resolv.conf:

search alunos.dee.fct.unl.pt fct.unl.pt
nameserver 193.136.120.1
nameserver 193.136.120.2
nameserver 193.136.122.1

A configuração inclui a lista de servidores DNS que devem ser usados, e a lista de domínios que devem ser testados quando se resolve um nome (ou localdomain quando não existe um domínio definido na zona).

Campos:

Keyword

Value

Nameserver

IP address of your DNS nameserver. There should be only one entry per "nameserver" keyword. If there is more than one nameserver, you'll need to have multiple "nameserver" lines.

Domain

The local domain name to be used by default. If the server is bigboy.my-site.com, then the entry would just be my-site.com

Search

If you refer to another server just by its name without the domain added on, DNS on your client will append the server name to each domain in this list and do an DNS lookup on each to get the remote servers' IP address. This is a handy time saving feature to have so that you can refer to servers in the same domain by only their servername without having to specify the domain. The domains in this list must separated by spaces.

Servidor DNS

O servidor DNS mais usado designa-se de BIND e foi desenvolvido pela ISC.

A distribuição Fedora Core inclui uma versão modificada do BIND, que corre como um utilizador diferente de "root" (administrador de sistema), designado de BIND chroot. Esta distribuição tem os ficheiros de configuração num local diferente o BIND regular.

File

Purpose

BIND chroot Location

Regular BIND Location

named.conf

Tells the names of the zone files to be used for each of your website domains.

/var/named/chroot/etc

/etc

rndc.key

rndc.conf

Files used in named authentication

/var/named/chroot/etc

/etc

zone files

Links all the IP addresses in your domain to their corresponding server

/var/named/chroot/var/named

/var/named

A configuração principal de um servidor DNS é realizada no ficheiro named.conf.

A parte inicial deste ficheiro tem a definição de opções genéricas do servidor:

options {
    directory "/var/named";                                                           
    dump-file "/var/named/data/cache_dump.db";                         
    statistics-file "/var/named/data/named_stats.txt";
   /*
    * If there is a firewall between you and name servers 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;
};


Para controlar os pedidos que são realmente efectuados ao servidor DNS local, pode-se acrescentar uma secção opcional de logging a ligar o log de pedidos. Os pedidos são acescentados ao ficheiro geral /etc/log/messages, juntamente com todos os outros logs do sistema operativo.

logging { category queries { default_syslog; }; };


A parte seguinte tem um registo para cada zona (domínio) guardada no servidor DNS local. O suporte da resolução directa é feito através de um ficheiro do tipo:

zone "rit2.pt" {
    type master;                      // Servidor primário
    notify no;                          // Opcional; Não envia notificação de modificações para servidor secundário
    allow-query { any; };        // Opcional; Pode-se modificar para permitir pedidos só de "192.168.1.0/24;" ...
    allow-update { none; };    // Opcional; Não permite actualizações
    file "rit2.zone";                 // Ficheiro com dados da zona
};

Um exemplo de um conteúdo possível para a zona "rit2.zone" poderia ser:

;
; Example of zone file for rit2.pt
;
$TTL 3D         ; TTL para os registos do domínio
@       IN      SOA     rit2.pt. mail.dee.fct.unl.pt. (             ; name-server and e-mail address after SOA
                        200503166       ; serial#
                        3600            ; refresh, seconds
                        3600            ; retry, seconds
                        3600            ; expire, seconds
                        3600 )          ; minimum, seconds
;
          NS      ns              ; Inet Address of nameserver
;
pc-11            A       172.16.33.11                                       
; IPv4
pc-11           AAAA    2001:690:2005:10:33::b                  ; IPv6
;
local          CNAME   pc-11                                                ; alias
ns              CNAME   local
www          CNAME   local


Na parte final é comum aparecer um registo para domínio local, para suportar resoluções inversas. Em IPv4, para a rede 172.16.33.0/24, tem o seguinte formato (note que o endereço aparece invertido no nome da zona):

zone "33.16.172.in-addr.arpa" {
    type master;
    notify no;
    file "172-16-33.zone";
};

A ordem inversa do endereço IP numa secção de zona é importante pois é por esse motivo que apenas os três primeiros octetos são representados. O último é definido no ficheiro de definição de zona. Um exemplo de conteúdo possível para o ficheiro "172-16-33.zone" seria:

;
; Example of zone file for 172.16.33.x
;
$TTL 3D
@       IN        SOA       
rit2.pt. mail.dee.fct.unl.pt. (
                        200503167       ; serial#
                        3600            ; refresh, seconds
                        3600            ; retry, seconds
                        3600            ; expire, seconds
                        3600 )          ; minimum, seconds
;
                  NS        ns.rit2.pt.         ; Name server Address
;
11                PTR        pc-11.rit2.pt.


Para IPv6, o procedimento é semelhante excepto que o endereço de rede é escrito numa cadeia de digitos hexadecimais, do menos significativo para o mais significativo, com o sufixo .ipv6.arpa.. seguido do sufixo. Por exemplo, o endereço IPv6 4321:0:1:2:3:4:567:89ab é escrito na forma: b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ipv6.arpa. Um exemplo de campo de resolução inversa para IPv6 seria:

zone "3.3.0.0.0.1.0.0.5.0.0.2.0.9.6.0.1.0.0.2.ipv6.arpa" IN {
    type master;
    allow-update { none; };
    file "2001-690-2005-10-33.zone";
};


Um exemplo de conteúdo possível para o ficheiro "2001-690-2005-10-33.zone" seria:

;
; Example of zone file for 2001:690:2005:10:33:x
;
$TTL 3D
@       IN        SOA        
rit2.pt. mail.dee.fct.unl.pt. (
                        200503168       ; serial#
                        3600            ; refresh, seconds
                        3600            ; retry, seconds
                        3600            ; expire, seconds
                        3600 )          ; minimum, seconds
;
                  NS        
ns.rit2.pt.         ; Nameserver Address
;
B.0.0.0.0.0.0.0.0.0.0.0      PTR        pc-11.rit2.pt.


Para obter mais informações sobre a configuração das zonas em Linux recomenda-se a consulta da página http://www.linuxhomenetworking.com/. 

Podem-se arrancar mais do que um servidor DNS (/usr/sbin/named) no mesmo computador, desde que cada servidor use um número de porto diferente.

Podem-se obter os parâmetros do comando named invocando o comando “man named”


3. Servidor DNS local só para caching

O serviço DNS Fedora Core já vem origem configurado para funcionar no modo caching:

//
// named.conf for Red Hat caching-nameserver
 

//
options {
    directory "/var/named";
    dump-file "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
   /*
    * 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
//

controls {
    inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
    type hint;
    file "named.ca";     // Lista com 13 servidores DNS raiz
};

zone "localdomain" IN {
    type master;
    file "localdomain.zone";
    allow-update { none; };
};

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

zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
    allow-update { none; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
    type master;
    file "named.ip6.local";
    allow-update { none; };
};

zone "255.in-addr.arpa" IN {
    type master;
    file "named.broadcast";
    allow-update { none; };
};

zone "0.in-addr.arpa" IN {
    type master;
    file "named.zero";
    allow-update { none; };
};

include "/etc/rndc.key";

Para funcionar correctamente basta arrancar o servidor DNS e modificar a configuração do cliente DNS.

Exercício

Configure o seu computador para usar o servidor DNS local no modo caching. Teste a resolução de nomes no sistema.

NOTA: foi colocado na área rit2 o ficheiro "init_named" que corre o comando "/etc/init.d/named" seguido dos parâmetros que a invocação tiver, ou com o parâmetro “restart” se forem omitidos os parâmetros, permitindo arrancar com o servidor DNS.

NOTA2: Para conseguir aceder ao ficheiro protegido /etc/var/messages foi colocado na área rit2 o ficheiro “get_log” que obtém todas as linhas relacionadas com o serviço de nomes.


4. Servidor DNS local com reenvio

Para optimizar a utilização de caching no serviço DNS, pode-se configurar um servidor DNS para reenviar um pedido para outro servidor sempre que a resposta não exista em cache, ou pertença a um domínio local. Isso é feito com a opção forwarders:

options {
    ...
    forwarders { 193.136.120.1; 193.136.120.2; 193.136.122.1; };
};

Exercício

Configure o servidor DNS do seu computador para usar com DNS de nível superior os três servidores DNS do domínio fct.unl.pt. Teste a resolução de nomes no sistema.


5. Definição de domínio local com um servidor DNS 

Exercício

Configure o domínio gn.rit2.pt no servidor DNS local, de maneira a conter entradas do tipo A e AAAA para todas as máquinas do laboratório, PTR para a resolução inversa, e CNAME com o nome router para a máquina 172.16.33.3. Configure o servidor para suportar a resolução directa e inversa tanto em IPv4 como em IPv6. Acrescente registos do tipo TXT com a identificação do número de grupo e dos membros do grupo, e do tipo HINFO com os dados da máquina local. Teste o seu servidor local.


6. Definição de subdomínio remoto 

A definição de subdomínios é realizada através de mais um registo de zona e de um recurso do tipo NS dentro do domínio raiz do novo subdomínio.

Exercício

Crie um subdomínio (sgn.gm.rit2.pt) na sua máquina local (n), de um domínio de um outro grupo num computador ao seu lado (m). Configure o subdomínio com as mesmas entradas do tipo A e AAAA do domínio principal. Peça aos seus colegas para configurarem o RR NS que torna o seu subdomínio válido. Configure na sua máquina o domínio dual (sgm.gn.rit2.pt), de maneira a que os seus colegas possam aceder ao subdomínio local deles.


7. Definição de um servidor DNS secundário 

Para além do tipo master é possível configurar uma zona com o tipo slave, de maneira a configurar servidores DNS secundários.
Para criar um servidor secundário, com uma cópia de um servidor primário, é necessário começar por copiar o ficheiro de configuração named.conf e o conteúdo dos ficheiros da directoria /var/named/chroot/var/named para a directoria correspondentes na máquina remota. Pode usar o comando scp:

scp /var/named/chroot/etc/named.conf guest@pc-0:/var/named/chroot/etc/named.conf
cd /var/named/chroot/var/named; scp * guest@pc-0:/var/named/chroot/var/named


No servidor secundário deve-se modificar a configuração da zona:

zone "rit2.pt" {
    type slave;                      // Servidor secundário
    file "bak.rit2.pt";       // Ficheiro criado pelo servidor com cópia local dos dados do primário; não cria ficheiro se omitido
    masters {172.16.33.11; };
};

Deve-se ainda ligar a notificação de modificações, de maneira a que o servidor secundário seja actualizado automaticamente.

Exercício

Juntamente com os mesmos colegas com que realizou o ponto anterior, desligue o subdomínio, e sorteie quem vai correr o servidor secundário.
Não se esqueçam de modificar a configuração da zona, de maneira a incluir dois servidores responsáveis pelo domínio. Teste a resolução de nomes no sistema, incluindo o teste do desligar do servidor primário.


Há muito mais a dizer sobre o serviço DNS do que o que aparece neste documento: DNS seguro; DNS dinâmico; zonas específicas para redes internas, estatísticas, etc.
Convida-se os alunos a lerem mais sobre o assunto...


Luis Bernardo
Copyright © 2008 FCT-UNL. All rights reserved.
Revised: 1-mar-2020