Objectivo
Instalação e configuração de um servidor DNS.
Introdução
Uma das aplicações mais utilizados como servidores de DNS é o BIND. É esta aplicação, neste caso BIND 9, que será utilizado para configurar um servidor DNS.
Implementação
Instalar BIND 9.
O Bind é composto por três componentes:
named – que é o daemon que correr no lado do servidor DNS.
resolver library – que é o resolver do lado do client do BIND. Faz as queries ao servidores DNS, de modo a traduzir os nomes.
tools for testing – ferramentas para testar o servidor de DNS.
Como se instalou o pacote compilado do Ubuntu os ficheiros do BIND já estão pré-configurados.
O ubuntu divide as configurações do ficheiro named.conf em named.conf.options, named.conf e named.conf.local.
O ficheiro named.conf contém as configurações por defeito comuns a todos os servidores de nomes. Isto é contém por exemplo as configurações referentes às zonas da raíz, loopbak e broadcast (não incluída nesta configuração).
O ficheiro /etc/bind/named.conf.options contém opções.
O ficheiro named.conf.local, será aquele onde serão configuradas as zonas que se pretende identificar no servidor de nomes.
Ter em atenção que o conteúdo do ficheiro /etc/bind/named.conf deverá ser decomposto nos três ficheiros descritos anteriormente.
Ficheiro de central de configuração do BIND - /etc/named.conf (ubuntu - /etc/bind/named.conf.local).
/etc/bind/named.conf
options {
forwarders {
193.136.195.220;
};
// pid-file "/var/run/bind/run/named.pid";
// query-source address * port 53;
// to listen for queries only on certain interfaces
listen-on { 127.0.0.1; 192.168.1.0/24; }
};
//
// a master nameserver config
//
zone "." {
type hint;
file "db.root";
};
zone "localhost" IN {
// a master type means that this server needn't look
// anywhere else for information; the localhost buck stops here.
type master;
file "/etc/bind/zone.localhost";
// don't allow dynamic DNS clients to update info
// about the localhost zone
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" {
type master;
file "/etc/bind/db.local";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/pri.1.168.192.in-addr.arpa";
also-notify { 192.168.1.2; }
};
zone "ass.estgm.ipb.pt" {
type master;
file "/etc/bind/zones/pri.ass.estgm.ipb.pt";
allow-transfer { 192.168.1.2; };
also-notify { 192.168.1.2; }
};
A secção options define o tipo de servidor, a directoria por defeito para o named.
A secção zone identifica a localização de hints, localhost, zone e reverse zone.
Na zona ass.estgm.ipb.pt a linha allow-transfer { 192.168.1.2; } define que:
Ficheiro Hints
Ficheiro Local
Ficheiro Zone
Este ficheiro, é também de chamado de base de dados do domínio. Define a maior parte da informação necessária para resolver as queries do domínio que administramos. Mapeia os nomes em endereços IP e disponibiliza informação sobre os serviços fornecidos sobre os serviços oferecido pela organização incluído: servidor web, ftp, email, telnet, name servers, etc.
O ficheiro zone utiliza diversos record types incluindo o SOA or start of authority; NS ou name server; A or host name to address map; PTR ou apontador pra o endereço que mapeia os nomes; MX ou mail exchanger que identifica os servidor de mail do domínio; e o CNAME ou canonical nome que define um alias para o nome de um host.
Ficheiro Reverse zone
O parâmetro allow-transfer { 192.168.1.2; }; indica que permite a transferência de zones para o servidor secundário.
O parâmetro also-notify { 192.168.1.2; } sempre que o número de série é incrementado e o servidor é reiniciado é enviada uma notificação ao servidor secundário. Este ao verificar que o serial foi incrementado faz a actualização.
Como indica o ficheiro named.conf que na secção das zonas indica onde encontrar a informação sobre as diversas zonas.
Neste caso são cinco ficheiros db.root, zone.localhost, 0.0.127.in-addr.arpa, 1.168.192.in-addr.arpa, ass.estgm.ipb.pt.
O ficheiro db.root ao contrário dos outros é gerido pela The Internet's Network Information Center e caso não exista ou desconfie que esteja desactualizado faça o download de ftp://ftp.internic.net/domain/named.root.
O ficheiro zone.localhost, pode ter outro nome arbitrário, e indica ao named que o endereço de localhost é 127.0.0.1. Normalmente vêm configurado por defeito.
/etc/bind/zone.localhost
; loopback/localhost zone file
;
$TTL 1D
$ORIGIN localhost.
@ IN SOA @ root (
1 ; Serial
8H ; Refresh
15M ; Retry
1W ; Expire
1D) ; Minimum TTL
IN NS @
IN A 127.0.0.1
/etc/bind/0.0.127.in-addr.arpa
; reverse pointers for localhost
;
$TTL 1D
$ORIGIN 0.0.127.in-addr.arpa.
@ IN SOA localhost. root.localhost. (
1 ; serial
8H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
IN NS localhost.
1 IN PTR localhost.
Ficheiro zone pri.ass.estgm.ipb.pt
/etc/bind/zones/pri.ass.estgm.ipb.pt
@ IN SOA server1.ass.estgm.ipb.pt. administrador.ass.estgm.ipb.pt. (
2006012103; serial
28800; refresh, seconds
7200; retry, seconds
604800; expire, seconds
86400 ); minimum, seconds
;
NS server1.ass.estgm.ipb.pt.;
NS ns0.ass.estgm.ipb.pt. ;
;
MX 10 mail.ass.estgm.ipb.pt.;
;
ass.estgm.ipb.pt. A 192.168.1.1
www A 192.168.1.1
server1 A 192.168.1.1
ns0 A 192.168.1.2
ftp A 192.168.1.3
webdav CNAME www
ass.estgm.ipb.pt. TXT "v=spf1 a mx ~all"
mail.ass.estgm.ipb.pt. TXT "v=spf1 a -all"
SOA - refere-se a "Start of Authority"
Assim o nosso ficheiro zona indica onde começa a autoridade. A nossa autoridade começa no ficheiro zone. Os servidor Top Level Domain estão agora à espera que o nosso servidor faça parte do trabalho.
A primeira linha do ficheiro zone.
O "@" refere-se à origem deste ficheiro de zona que é o server1.ass.estgm.ipb.pt. O DnS utiliza esta label para designar o registo Start Of Authority (SOA) que aparece no inicio de qualquer ficheiro zona definindo o domínio.
o próximo item "IN" indica que é Internet. Existem outras classes mas são pouco utilizadas.
o próximo é o email do administrador neste caso administrador@ass.estgm.ipb.pt.
seriel – numero de série da zona. É incrementado cada vez que a zona é alterada, assim o servidor de secundário sabe quando a zona foi alterada.
retry – número de segundos que o servidor secundário ir esperar para fazer um novo pedido depois do seu último pedido falhado.
expire – o número de segundo que o o servidor secundário irá esperar antes de considerar que os seus dados expirados se não conseguir contactar o servidor primário.
ninimum – usado para determinar o mínimo TTL.
Registos NS
Registos MX
Necessário para recebermos mails em ass.estgm.ipb.pt. Este registo indica que os mails para ass.estgm.ipb.pt devem ser entregues em server1.ass.estgm.ipb.pt, com uma prioridade de 10. Pode-se colocar mais de que um servidor de mail.
Quanto maior for o número menor é a prioridade. Os servidores serão contactados pela ordem de prioridade.
Registos CNAME
Mnemónica para “canonical name”.
Significa que webdav.ass.estgm.ipb.pt é um alias para ftp.ass.estgm.ipb.pt e por isso aponta para o mesmo host.
Um CNAME tem sempre que apontar para o registo A. Não devem ser usados registos CNAME com registos SOA.
Os CNAME são benéficos em determinados casos. Imagine que tem centenas de máquinas como registos A apontar para o mesmo IP. Se um dia alterar esse IP terá que alterar todos os registo A. Isso não se passava se utilizasse o CNAME. Só se faria a actualização de um registo A.
Registo TXT
Permitem atribuir informação adicional a uma zona. Estes contém registos SPF (Sender Policy Framework), que especificam que hosts estão permitidos enviar mail com o domínio ass.estgm.ipb.pt. Tecnicamente é possível enviar mail de qualquer host, no entanto, provedores de mail (yahoo, hotmail), utilizam actualmente registos SPF. Isto é se o emissor do domínio não tiver um registo SPF ou enviar de uma máquina que não esteja na lista de registos SPF, o mail é classificado como spam.
Existe um wizard para criar um registos SPF em http://www.openspf.org/wizard.html?mydomain=&x=26&y=8 e em seguida adicionar isso no ficheiro da zona :
Ficheiro Reverse Zone
Agora os programas pode procurar ass.estgm.ipb.pt e o todos os seu subdomínios no DNS, mas é necessário a reverse zone que mapeia os IP em ass.estgm.ipb.pt. O reverse lookup é utilizado pr diversos programas que irão recusar se o reverse lookup e o forward lookup (o lookup normal do ass.estgm.ipb.pt) não corresponderem um com o outro (também utilizado para classificar os mail como spam).
/etc/bind/zones/pri.1.168.192.in-addr.arpa
@ IN SOA server1.ass.estgm.ipb.pt. administrador.ass.estgm.ipb.pt. (
2006012103; serial
28800; refresh, seconds
7200; retry, seconds
604800; expire, seconds
86400 ); minimum, seconds
;
NS server1.ass.estgm.ipb.pt.;
NS ns0.ass.estgm.ipb.pt. ;
1 PTR ass.estgm.ipb.pt.
2 PTR ns0.ass.estgm.ipb.pt.
3 PTR ftp.ass.estgm.ipb.pt.
Agora pode-se testar fazendo o lookup como o comando dig, tentando descobrir o endereço de IP de ass.estgm.ipb.pt (dig ass.estgm.ipb.pt):
; <<>> DiG 9.3.2 <<>> ass.estgm.ipb.pt
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58609
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;ass.estgm.ipb.pt. IN A
;; ANSWER SECTION:
ass.estgm.ipb.pt. 86400 IN A 192.168.1.1
;; AUTHORITY SECTION:
ass.estgm.ipb.pt. 86400 IN NS ns0.ass.estgm.ipb.pt.
ass.estgm.ipb.pt. 86400 IN NS server1.ass.estgm.ipb.pt.
;; ADDITIONAL SECTION:
ns0.ass.estgm.ipb.pt. 86400 IN A 192.168.1.3
server1.ass.estgm.ipb.pt. 86400 IN A 192.168.1.1
;; Query time: 29 msec
;; SERVER: 192.168.123.128#53(192.168.123.128)
;; WHEN: Mon Mar 5 18:04:28 2007
;; MSG SIZE rcvd: 122
E agora fazer o reverse lookup, (dig -x 192.168.1.1):
; <<>> DiG 9.3.2 <<>> -x 192.168.1.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40943
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;1.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.1.168.192.in-addr.arpa. 86400 IN PTR ass.estgm.ipb.pt.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS ns0.ass.estgm.ipb.pt.
1.168.192.in-addr.arpa. 86400 IN NS server1.ass.estgm.ipb.pt.
;; ADDITIONAL SECTION:
ns0.ass.estgm.ipb.pt. 86400 IN A 192.168.1.3
server1.ass.estgm.ipb.pt. 86400 IN A 192.168.1.1
;; Query time: 99 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Mon Mar 5 18:05:26 2007
;; MSG SIZE rcvd: 148
Configurar o Servidor DNS secundário:
De notar que nas configurações do servidor primário está definido que o servidor DNS secundário é ns0.ass.estgm.ipb.pt. Este servidor irá funcionar como servidor de backup caso o servidor principal falhe, permitindo que o serviço de nomes continue a disponibilizar o seu serviço para o domínio e subdomínio de ass.estgm.ipb.pt.
Ficheiro named.conf
options {
//pid-file "/var/run/bind/run/named.pid";
//directory "/etc/bind";
// query-source address * port 53;
};
zone "." {
type hint;
file "db.root";
};
zone "localhost" IN {
type master;
file "/etc/bind/zone.localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" {
type master;
file "db.local";
allow-update { none; };
};
zone "ass.estgm.ipb.pt" {
type slave;
file "/etc/bind/zones/sec.ass.estgm.ipb.pt";
masters { 192.168.1.1; };
};
Escrevendo slave, define-se que se trata de uma slave zone e na linha masters especifica-se o IP do servidor primário. Na linha file especifica-se nome do ficheiro em que a slave zone que deve deve ser guardada.
Reinicie o servidor e brevemente deverá encontrar o ficheiro /etc/bind/sec.ass.estgm.ipb.pt no servidor secundário. Isto aconteceu porque o servidor secundário contactou o primário e este último transferiu a zona para o secundário.
De lembrar que cada vez que é feito um update à zona no servidor primário, deve ser incrementado o número serial, doutro modo a zona não será transferida.
Ter em atenção que se houver firewall em alguns dos servidores primário ou secundário que bloqueie a porta 53 o zona não será transferida.
Bibliografia