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.
sudo apt-get install bind9
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.
A secção options para o ficheiro /etc/bind/named.conf.options.
A secção zone root e zone loopbak para o ficheiro named.conf .
A secção zone ass.estgm.ipb.pt"
Ficheiro de central de configuração do BIND - /etc/named.conf (ubuntu - /etc/bind/named.conf.local).
Informa quais as zonas sob a sua responsabilidade e respectivos ficheiros.
/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:
Por questões de segurança apenas o servidor secundário poderá fazer fazer transferência da zona.
Ficheiro Hints
Este ficheiro contém os nomes e endereços dos servidores root da Internet. Estes conhecem onde os authoritative servers para o seu domínio existem.
Ficheiro Local
Os servidores DNS (Name servers) são mestres ou servidores principais do seu próprio domino loopback (127.0.0.1). O objectivo de criar ficheiros de zonas locais para cada aspecto do nosso localhost é reduzir o tráfego e permitir ao software do servidor .
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 ficheiro reverse zone mapeia os endereços IP aos nomes dos hosts.
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
O ficheiro 0.0.127.in-addr.arpa, indica o named que o nome associado ao IP 127.0.0.1 é localhost. Normalmente vêm configurado por defeito.
/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.
Os restantes são explicados de seguida.
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.
refresh – número de segundo que o servidor secundário deverá esperar antes de verificar novas actualizações.
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
Especificam os servidores de nomes responsáveis pelo domínio. É necessário pelo menos um, no entanto é comum ter dois (primário e secundário).
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.
Se quisemos que o servidor server1.ass.estgm.ipb.pt, trata-se endereços de email do um subdomínio (e.g. user@sub.ass.estgm.ipb.pt), então bastaria colocar:
subdomain.ass.estgm.ipb.pt. MX 10 mail.ass.estgm.ipb.pt. (ou)
subdomain MX 10 mail.ass.estgm.ipb.pt.
Registos A
São os registo mais importantes de DNS. Permitem mapear nomes em endereços IP
Especificar que o ass.estgm.ipb.pt tem o endereço IP 192.168.1.1. Dois modos:
ass.estgm.ipb.pt. A 192.168.1.1 ou
A 192.168.1.1
O servidor www tem o mesmo IP, isto é www.ass.estgm.ipb.pt e ass.estgm.ipb.pt apontam para o mesmo servidor.
www A 192.168.1.1
Por fim os servidores server1.ass.estgm.ipb.pt e ns0.ass.estgm.ipb.pt, em que o segundo tem um IP diferente do primeiro porque é um servidor DNS secundário.
Registos CNAME
Mnemónica para “canonical name”.
webdav CNAME www
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 :
ass.estgm.ipb.pt. TXT "v=spf1 a mx ~all"
mail.ass.estgm.ipb.pt. TXT "v=spf1 a -all"
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).
O início do ficheiro pri.1.168.192.in-addr.arpa é exactamente igual ao pri.ass.estgm.ipb.pt.
/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
Repare nas secções de questão e resposta em ambas as pesquisas. Como se pode verificar as o forward e o reverse lookup corresponderem.
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.
