# Guia do Linux/Iniciante+Intermediário/Rede/Resolvedor de nomes (DNS)
## Resolvedor de nomes (DNS)

DNS significa Domain Name System (sistema de nomes de domí­nio). O DNS converte os nomes de máquinas para endereços IPs que todas as máquinas da Internet possuem. Ele faz o mapeamento do nome para o endereço e do endereço para o nome e algumas outras coisas. Um mapeamento é simplesmente uma associação entre duas coisas, neste caso um nome de computador, como www.cipsga.org.br, e o endereço IP desta máquina (ou endereços) como 200.245.157.9.
O DNS foi criado com o objetivo de tornar as coisas mais fáceis para o usuário, permitindo assim, a identificação de computadores na Internet ou redes locais através de nomes (é como se tivéssemos apenas que decorar o nome da pessoa ao invés de um número de telefone). A parte responsável por traduzir os nomes como www.nome.com.br em um endereço IP é chamada de resolvedor de nomes.
O resolvedor de nomes pode ser um banco de dados local (controlador por um arquivo ou programa) que converte automaticamente os nomes em endereços IP ou através de servidores DNS que fazem a busca em um banco de dados na Internet e retornam o endereço IP do computador desejado. Um servidor DNS mais difundido na Internet é o bind.
Através do DNS é necessário apenas decorar o endereço sem precisar se preocupar com o endereço IP (alguns usuários simplesmente não sabem que isto existe...). Se desejar mais detalhes sobre DNS, veja o documento DNS-HOWTO.

### O que é um nome?

Você deve estar acostumado com o uso dos nomes de computadores na Internet, mas pode não entender como eles são organizados. Os nomes de domí­nio na Internet são uma estrutura hierárquica, ou seja, eles tem uma estrutura semelhante aos diretórios de seu sistema.
Um domí­nio é uma famí­lia ou grupo de nomes. Um domí­nio pode ser colocado em um sub-domí­nio. Um domí­nio principal é um domí­nio que não é um sub-domí­nio. Os domí­nios principais são especificados na RFC-920. Alguns exemplos de domí­nios principais comuns são:
* COM - Organizações Comerciais
* EDU - Organizações Educacionais
* GOV - Organizações Governamentais
* MIL - Organizações Militares
* ORG - Outras Organizações
* NET - Organizações relacionadas com a Internet
* Identificador do Paí­s - São duas letras que representam um paí­s em particular.
Cada um dos domí­nios principais tem sub-domí­nios. Os domí­nios principais baseados no nome do paí­s são frequentemente divididos em sub-domí­nios baseado nos domí­nios .com, .edu, .gov, .mil e .org. Assim, por exemplo, você pode finaliza-lo com: com.au e gov.au para organizações comerciais e governamentais na Austrália; note que isto não é uma regra geral, as organizações de domí­nio atuais dependem da autoridade na escolha de nomes de cada domí­nio. Quando o endereço não especifica o domí­nio principal, como o endereço www.unicamp.br, isto quer dizer que é uma organização acadêmica.
O próximo ní­vel da divisão representa o nome da organização. Subdomí­nios futuros variam em natureza, frequentemente o próximo ní­vel do sub-domí­nio é baseado na estrutura departamental da organização mas ela pode ser baseada em qualquer critério considerado razoável e significantes pelos administradores de rede para a organização.
A porção mais a esquerda do nome é sempre o nome único da máquina chamado hostname, a porção do nome a direita do hostname é chamado nome de domí­nio e o nome completo é chamado nome do domí­nio completamente qualificado (Fully Qualified Domain Name).
Usando o computador www.debian.org.br como exemplo:
* br - Paí­s onde o computador se encontra
* org - Domí­nio principal
* debian - Nome de Domí­nio
* www - Nome do computador
A localização do computador www.debian.org.br através de servidores DNS na Internet obedece exatamente a sequência de procura acima. Os administradores do domí­nio debian.org.br podem cadastrar quantos sub-domí­nios e computadores quiserem (como www.non-us.debian.org.br ou cvs.debian.org.br).

### Arquivos de configuração usados na resolução de nomes

Abaixo a descrição dos arquivos usados no processo de resolver um nome no sistema GNU/Linux.

#### /etc/resolv.conf

O /etc/resolv.conf é o arquivo de configuração principal do código do resolvedor de nomes. Seu formato é um arquivo texto simples com um parâmetro por linha, e os endereços de servidores DNS externos são especificados nele. Existem três palavras chaves normalmente usadas que são:

##### domain

    Especifica o nome do domí­nio local.

##### search

    Especifica uma lista de nomes de domí­nio alternativos ao procurar por um computador, separados por espaços. A linha search pode conter no máximo 6 domí­nios ou 256 caracteres.

##### nameserver

    Especifica o endereço IP de um servidor de nomes de domí­nio para resolução de nomes. Pode ser usado várias vezes.
Como exemplo, o /etc/resolv.conf se parece com isto:
Este exemplo especifica que o nome de domí­nio a adicionar ao nome não qualificado (i.e. hostnames sem o domí­nio) é maths.wu.edu.au e que se o computador não for encontrado naquele domí­nio então a procura segue para o domí­nio wu.edu.au diretamente. Duas linhas de nomes de servidores foram especificadas, cada uma pode ser chamada pelo código resolvedor de nomes para resolver o nome.

#### /etc/host.conf

O arquivo /etc/host.conf é o local onde é possí­vel configurar alguns í­tens que gerenciam o código do resolvedor de nomes. O formato deste arquivo é descrito em detalhes na página de manual resolv . Em quase todas as situações, o exemplo seguinte funcionará:
Este arquivo de configuração diz ao resolvedor de nomes para checar o arquivo /etc/hosts (parâmetro hosts) antes de tentar verificar um servidor de nomes (parâmetro bind) e retornar um endereço IP válido para o computador procurado e multi on retornará todos os endereços IP resolvidos no arquivo /etc/hosts ao invés do primeiro.
Os seguintes parâmetros podem ser adicionados para evitar ataques de IP spoofing:
O parâmetro nospoof on ativa a resolução reversa do nome da biblioteca resolv (para checar se o endereço pertence realmente í quele nome) e o spoofalert on registra falhas desta operação no syslog.

#### /etc/hosts

O arquivo /etc/hosts faz o relacionamento entre um nome de computador e endereço IP local. Recomendado para IPs constantemente acessados e para colocação de endereços de virtual hosts (quando deseja referir pelo nome ao invés de IP). A inclusão de um computador neste arquivo dispenda a consulta de um servidor de nomes para obter um endereço IP, sendo muito útil para máquinas que são acessadas frequentemente. A desvantagem de fazer isto é que você mesmo precisará manter este arquivo atualizado e se o endereço IP de algum computador for modificado, esta alteração deverá ser feita em cada um dos arquivos hosts das máquinas da rede. Em um sistema bem gerenciado, os únicos endereços de computadores que aparecerão neste arquivo serão da interface loopback e os nomes de computadores.
Você pode especificar mais que um nome de computador por linha como demonstrada pela primeira linha, a que identifica a interface loopback. Certifique-se de que a entrada do nome de domí­nio neste arquivo aponta para a interface de rede e não para a interface loopback, ou terá problema com o comportamento de alguns serviços.
OBS: Caso encontre problemas de lentidão para resolver nomes e até para executar os aplicativos (como o mc, etc), verifique se existem erros neste arquivo de configuração.
Estes sintomas se confundem com erros de memória ou outro erro qualquer de configuração de hardware, e somem quando a interface de rede é desativada (a com o IP não loopback). Isto é causados somente pela má configuração do arquivo /etc/hosts. O bom funcionamento do Unix depende da boa atenção do administrador de sistemas para configurar os detalhes de seu servidor.

#### /etc/networks

O arquivo /etc/networks tem uma função similar ao arquivo /etc/hosts. Ele contém um banco de dados simples de nomes de redes contra endereços de redes. Seu formato se difere por dois campos por linha e seus campos são identificados como:
Abaixo um exemplo de como se parece este arquivo:
Quando usar comandos como route, se um destino é uma rede e esta rede se encontra no arquivo /etc/networks, então o comando route mostrará o nome da rede ao invés de seu endereço.

### Executando um servidor de nomes

Se você planeja executar um servidor de nomes, você pode fazer isto facilmente. Por favor veja o documento DNS-HOWTO e quaisquer documentos incluí­dos em sua versão do BIND (Berkeley Internet Name Domain).