Ferramentas do usuário

Ferramentas do site


espec:servico_dns

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
espec:servico_dns [2009/08/17 00:06]
teigao
espec:servico_dns [2011/08/26 15:32] (atual)
maziero
Linha 1: Linha 1:
 +====== O Serviço DNS ======
 +
 +O serviço DNS (//Domain Name System//) é o principal responsável pela resolução de nomes na Internet. Esse serviço é construído por um conjunto de servidores operando de forma descentralizada. Cada servidor DNS é responsável por um domínio ou sub-domínio de nomes na Internet. Neste módulo são apresentadas as principais características do serviço DNS e seu modo de funcionamento.
 +
 +===== Funções do servidor DNS =====
 +
 +Um servidor DNS normalmente executa as seguintes atividades:
 +
 +  * responde a consultas de clientes ou servidores externos (vindas da Internet) sobre nomes registrados em seu domínio local;
 +  * realiza resoluções de nomes de domínio na Internet para seus clientes locais (máquinas dentro de seu domínio);
 +  * guarda em cache local as resoluções de nomes solicitadas por seus clientes, para agilizar consultas futuras.
 +
 +{{ :​espec:​dns-servidor.png |}}
 +
 +Quanto à sua funcionalidade,​ um servidor DNS pode ser:
 +
 +  * **Primário**:​ É o servidor responsável por um domínio. A inclusão, alterações ou exclusão dos registros desse domínio são feitas neste servidor.
 +  * **Secundário**:​ funciona como backup do servidor primário, recebendo dele os registros do domínio através de um processo chamado //zone transfer//; ​ também responde às requisições dos clientes quando requisitado.
 +  * **Caching-only**:​ servidor DNS que apenas efetua consultas e retorna resultados, mantendo uma cache local. Não é responsável por nenhum domínio, sua única função é melhorar o desempenho das resoluções de nome para os clientes locais usando seu cache.
 +
 +===== Consultas DNS =====
 +
 +Em relação aos seus clientes locais, um servidor DNS pode operar com dois tipos de consultas: **iterativas** e **recursivas**. O modo de operação default, suportado por todos os servidores, é o de consultas iterativas, na qual o cliente DNS pode receber do servidor local uma resposta parcial. Assim, ele terá de contactar sucessivamente outros servidores DNS para conseguir resolver o nome desejado. Veja um exemplo de consulta iterativa na figura a seguir:
 +
 +{{ :​espec:​dns-consulta-iterativa.png |}}
 +
 +No modo de consulta recursiva, o servidor local se encarrega de encaminhar a consulta do cliente a todos os servidores DNS necessários até que ela seja resolvida, devolvendo ao cliente apenas a resposta final. Esse modo de operação é opcional e não precisa ser implementado por todos os servidores. Um exemplo de consulta recursiva:
 +
 +{{ :​espec:​dns-consulta-recursiva.png |}}
 +
 +No caso de consultas iterativas, a resposta de um servidor DNS ao cliente pode ser:
 +
 +  * //​Authoritative//:​ quando ele é o servidor responsável pelo domínio objeto da consulta;
 +  * //​Non-authoritative//:​ quando ele respondeu por já ter a resposta em seu cache local.
 +
 +A cada domínio local sob a responsabilidade de um servidor DNS corresponde um **arquivo de zona** (arquivo-texto que contém as definições dos nomes pertencentes a um determinado domínio e seus respectivos endereços IP). Para cada domínio também deve estar presente um **arquivo de zona reversa**, que relaciona os endereços IP aos nomes existentes no domínio.
 +
 +===== Arquivos de zona =====
 +
 +Cada servidor DNS armazena localmente as informações sobre os domínios de sua responsabilidade em arquivos de texto denominados "​arquivos de zona" (//zone files//). As informações sobre o domínio são armazenadas em arquivos de zona direta (para os mapeamentos nome -> IP) e de zona reversa (para os mapeamentos IP -> nome). Eis um exemplo (hipotético) de arquivo de zona direta para o domínio ''​pucpr.br'':​
 + 
 +<​code>​
 +pucpr.br. IN SOA ns1.pucpr.br. postmaster.pucpr.br. (
 + 1        ; Serial number (increase it after edit)
 + 10800 ​   ; Refresh after 3 hours (3 x 3600 sec)
 + 3600 ​    ; Retry after 1 hour (1 x 3600 sec)
 + 604800 ​  ; Expire after 1 week (7 x 24 x 3600 sec)
 + 86400 )  ; Minimum TTL of 1 day (24 x 2600 sec)
 +
 +; Name server for this domain
 +pucpr.br. IN NS ns1.pucpr.br.
 +
 +; Mail server for this domain
 +pucpr.br. IN MX 10 mailer1.pucpr.br.
 +
 +; Addresses for local names
 +localhost.pucpr.br. IN A 127.0.0.1
 +
 +ns1.pucpr.br. IN A 200.192.112.2
 + TXT "​Servidor de nomes primario"​
 + HINFO "​PC P4" "Linux Slackware 8"
 +
 +alfa.pucpr.br. IN A 200.192.112.168
 + TXT "​Servidor de e-mail"​
 + HINFO "​Sun UltraServer 5" "​Solaris 9"
 +
 +; Aliases
 +mailer1.pucpr.br. IN CNAME alfa.pucpr.br.
 +</​code>​
 +
 +Eis o arquivo hipotético correspondente de zona reversa para o mesmo domínio ''​pucpr.br'':​
 +
 +<​code>​
 +112.192.200.in-addr.arpa. IN SOA ns1.pucpr.br. postmaster.pucpr.br.(
 + 1        ; Serial number (increase it after edit)
 + 10800 ​   ; Refresh after 3 hours (3 x 3600 sec)
 + 3600 ​    ; Retry after 1 hour (1 x 3600 sec)
 + 604800 ​  ; Expire after 1 week (7 x 24 x 3600 sec)
 + 86400 )  ; Minimum TTL of 1 day (24 x 3600 sec)
 +
 +; Name servers
 +112.192.200.in-addr.arpa. IN NS ns1.pucpr.br.
 +
 +; Addresses point to canonical name
 +2.112.192.200.in-addr.arpa. IN PTR ns1.pucpr.br.
 +182.112.192.200.in-addr.arpa. IN PTR alfa.pucpr.br.
 +</​code>​
 +
 +Um arquivo de zona direta ou reversa contém normalmente os seguintes campos:
 +
 +^ Campo ^ Função ^
 +| ''​SOA''​ | indica quem é o responsável por essa zona (a autoridade) |
 +| ''​NS''​ | indica um servidor de nomes para a zona |
 +| ''​MX''​ | indica um servidor de e-mail para a zona |
 +| ''​A''​ | indica o endereço IP relativo a um dado nome de domínio (resolução direta) |
 +| ''​TXT''​ | string descrevendo o host |
 +| ''​HINFO''​ | indica dados de hardware e software do host |
 +| ''​CNAME''​ | indica um alias (sinônimo) de nome de domínio |
 +| ''​PTR''​ | indica o nome de domínio relativo a um dado endereço IP (resolução reversa) |
 +
 +===== O Servidor DNS Bind =====
 +
 +A construção de um servidor DNS implica na instalação e configuração do software apropriado. O servidor DNS mais usado no mundo UNIX é o BIND, que vem por default nas distribuições Linux. Os principais arquivos do servidor BIND em uma distribuição Linux no padrão RedHat são os seguintes:
 +
 +  * ''/​etc/​rc.d/​init.d/​named''​ : script de inicialização,​ que lança um daemon denominado named. Ele deve ser  invocado com um dos seguintes parâmetros:​
 +    * ''​start''​ : lança o serviço (gera mensagens de inicialização em /​var/​log/​messages)
 +    * ''​stop''​ : para o serviço
 +    * ''​restart''​ : reinicia o serviço
 +    * ''​status''​ : verifica o status do serviço
 +  * ''/​etc/​named.conf''​ : configuração de inicialização do servidor.
 +  * ''/​var/​named''​ : diretório que contem as informações de cada zona de domínio, e os arquivos de zonas reversas respectivas.
 +
 +Nas próximas seções são apresentados os arquivos de exemplo para a configuração de um servidor de nomes no domínio ''​pucpr.br''​.
 +
 +=== Arquivo /​etc/​named.conf ===
 +
 +Este é o arquivo central de configuração do Bind, que informa quais as zonas sob sua responsabilidade e seus respectivos arquivos.
 +
 +<​code>​
 +# BIND configuration file for pucpr.br
 +
 +options {
 + directory "/​var/​named";​
 +};
 +
 +zone "​pucpr.br"​ in {
 + type master; ​ # authoritative server for this zone
 + file "​zone-pucpr.br";​
 +};
 +
 +zone "​112.192.200.in-addr.arpa"​ in {
 + type master; ​ # authoritative server for this zone
 + file "​zone-200.192.112";​
 +};
 +
 +zone "​0.0.127.in-addr.arpa"​ in {
 + type master; ​ # loopback zone
 + file "​zone-127.0.0";​
 +};
 +
 +zone "​."​ in {
 + type hint;   # local cache start contents
 + file "​zone-cache";​
 +};
 +</​code>​
 +
 +=== Arquivo /​var/​named/​zone-pucpr.br ===
 +
 +Este arquivo contém as informações de zona direta do domínio pucpr.br.
 +
 +<​code>​
 +pucpr.br. IN SOA ns1.pucpr.br. postmaster.pucpr.br. (
 + 1        ; Serial number (increase it after edit)
 + 10800 ​   ; Refresh after 3 hours (3 x 3600 sec)
 + 3600 ​    ; Retry after 1 hour (1 x 3600 sec)
 + 604800 ​  ; Expire after 1 week (7 x 24 x 3600 sec)
 + 86400 )  ; Minimum TTL of 1 day (24 x 2600 sec)
 +
 +; Name server for this domain and sub-domains
 +pucpr.br. IN NS ns1.pucpr.br.
 +
 +; Mail server for this domain
 +pucpr.br. IN MX 10 mailer1.pucpr.br.
 +
 +; Addresses for local names
 +localhost.pucpr.br. IN A 127.0.0.1
 +
 +ns1.pucpr.br. IN A 200.192.112.2
 + TXT "​Servidor de nomes primario"​
 + HINFO "​PC P4" "Linux Slackware 8"
 +
 +ppgia.pucpr.br. IN A 200.192.112.141
 + TXT "​Servidor principal PPGIA"
 + HINFO "​PC P4" "Free BSD 4.9"
 +
 +alfa.pucpr.br. IN A 200.192.112.168
 + TXT "​Servidor de e-mail"​
 + HINFO "​Sun UltraServer 5" "​Solaris 9"
 +
 +; Aliases
 +mailer1.pucpr.br. IN CNAME alfa.pucpr.br.
 +</​code>​
 +
 +=== Arquivo /​var/​named/​zone-200.192.112 ===
 +
 +Este arquivo contém as informações de zona reversa do domínio pucpr.br.
 +
 +<​code>​
 +112.192.200.in-addr.arpa. IN SOA ns1.pucpr.br. postmaster.pucpr.br.(
 + 1        ; Serial number (increase it after edit)
 + 10800 ​   ; Refresh after 3 hours (3 x 3600 sec)
 + 3600 ​    ; Retry after 1 hour (1 x 3600 sec)
 + 604800 ​  ; Expire after 1 week (7 x 24 x 3600 sec)
 + 86400 )  ; Minimum TTL of 1 day (24 x 3600 sec)
 +
 +; Name servers
 +112.192.200.in-addr.arpa. IN NS ns1.pucpr.br.
 +
 +; Addresses point to canonical name
 +2.112.192.200.in-addr.arpa. IN PTR ns1.pucpr.br.
 +141.112.192.200.in-addr.arpa. IN PTR ppgia.pucpr.br.
 +182.112.192.200.in-addr.arpa. IN PTR alfa.pucpr.br.
 +</​code>​
 +
 +=== Arquivo /​var/​named/​zone-127.0.0.1 ===
 +
 +Este arquivo contém as informações de zona reversa da interface loopback.(127.0.0.1).
 +
 +<​code>​
 +0.0.127.in-addr.arpa. IN SOA ns1.pucpr.br. postmaster.pucpr.br. (
 + 1        ; Serial
 + 10800 ​   ; Refresh after 3 hours
 + 3600 ​    ; Retry after 1 hour
 + 604800 ​  ; Expire after 1 week
 + 86400 )  ; Minimum TTL of 1 day
 +
 +0.0.127.in-addr.arpa. IN NS ns1.pucpr.br.
 +
 +1.0.0.127.in-addr.arpa. IN PTR localhost.
 +</​code>​
 +
 +=== Arquivo /​var/​named/​zone-cache ===
 +
 +Este arquivo define o conteúdo inicial do cache do servidor DNS, que consiste basicamente dos endereços dos servidores raiz (rootservers). Este arquivo deve ser atualizado periodicamente a partir [[ftp://​ftp.rs.internic.net/​domain/​named.root|deste servidor]].
 +
 +<​code>​
 +; This file holds the information on root name servers needed to initialize
 +; cache of Internet domain name servers ...
 +;
 +. 3600000 ​ IN  NS    A.ROOT-SERVERS.NET.
 +A.ROOT-SERVERS.NET. 3600000 ​     A     ​198.41.0.4
 +;
 +; formerly NS1.ISI.EDU
 +;
 +. 3600000 ​     NS    B.ROOT-SERVERS.NET.
 +B.ROOT-SERVERS.NET. 3600000 ​     A     ​128.9.0.107
 +;
 +; formerly C.PSI.NET
 +;
 +. 3600000 ​     NS    C.ROOT-SERVERS.NET.
 +C.ROOT-SERVERS.NET. 3600000 ​     A     ​192.33.4.12
 +;
 +; formerly TERP.UMD.EDU
 +;
 +. 3600000 ​     NS    D.ROOT-SERVERS.NET.
 +...
 +; End of File
 +</​code>​
 +
 +Caso o servidor DNS não tenha acesso direto ao exterior (aos DNS //​rootservers//​) mas possa acessar outro servidor DNS, então uma configuração de //​forwarding//​ se torna interessante. Com ela, o servidor encaminha as solicitações recebidas a outro(s) servidor(es),​ e guarda os resultados recebidos em uma cache local. A configuração para habilitar o //​forwarding//​ no servidor Bind é a seguinte (a ser editada no arquivo ''/​etc/​named.conf''​):​
 +
 +<​code>​
 +options {
 +
 + ...
 +
 + forward only ;
 + forwarders {
 + nnn.nnn.nnn.nnn ;
 + ...
 + };
 +};
 +</​code>​
 +
 +Com isso, todas as consultas de DNS endereçadas a seu servidor serão encaminhadas ao(s) servidor(es) indicados, naquela ordem, até obter uma resposta. Caso a linha ''​forward only''​ seja omitida, o servidor tentará a resolução do endereço em suas tabelas locais e depois, caso não tenha sucesso, nos servidores indicados.
 +
 +===== Dig e nslookup =====
 +
 +Os utilitários ''​dig''​ e ''​nslookup''​ permitem efetuar consultas a servidores DNS via linha de comando. Eles são muito utilizados para verificar configurações e diagnosticar problemas no serviço DNS. O comando ''​nslookup''​ vem sendo substituido pelo ''​dig'',​ por isso somente este último será apresentado aqui.
 +
 +A sintaxe básica de uso do comando ''​dig''​ é a seguinte (campos entre colchetes são opcionais):
 +
 +<​code>​
 +dig [@server] name [type]
 +</​code>​
 +
 +onde:
 +
 +  * ''​@server''​ (opcional) indica o servidor DNS a consultar;
 +  * ''​name''​ indica o nome de domínio a consultar;
 +  * ''​typ''​e indica o registro desejado: A (default), NS, MX, CNAME, etc.
 +
 +Alguns exemplos de uso do dig:
 +
 +  * ''​dig %%ftp.unicamp.br%%''​ : consulta direta de endereço (campos A) usando o servidor de nomes default (definido em ''​resolv.conf''​).
 +  * ''​dig @myserver %%ftp.unicamp.br%%''​ : consulta de endereço (campos A) usando o servidor de nomes ''​myserver''​.
 +  * ''​dig unicamp.br MX''​ : consulta do campo MX do domínio unicamp.br usando o servidor default.
 +  * ''​dig -x 200.192.112.141''​ : consulta de DNS reverso usando o servidor default.
 +
 +Segue abaixo um exemplo de consulta simples usando o comando ''​dig'':​
 +
 +<​code>​
 +host:~> dig www.unifor.br
 +
 +; <<>>​ DiG 9.2.1 <<>>​ www.unifor.br
 +;; global options: printcmd
 +;; Got answer:
 +;; ->>​HEADER<<​- opcode: QUERY, status: NOERROR, id: 7382
 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
 +
 +;; QUESTION SECTION:
 +;​www.unifor.br. IN A
 +
 +;; ANSWER SECTION:
 +www.unifor.br. 86400 IN A 200.253.187.1
 +
 +;; AUTHORITY SECTION:
 +unifor.br. 86400 IN NS www.unifor.br.
 +
 +;; Query time: 65 msec
 +;; SERVER: 200.192.112.2#​53(200.192.112.2)
 +;; WHEN: Tue May 25 00:28:41 2004
 +;; MSG SIZE rcvd: 61
 +</​code>​