Essa é uma série de artigos que apresentará alguns dos arquivos de configuração de rede dos sistemas
Linux. Esse artigo é baseado no
Slackware Current, e pode apresentar pequenas diferenças de localização ou função para outros sistemas, esteja atento. Não sei quantas partes a série vai ter, mas aviso quando acabar.
Conceitos básicos
Um nome de host é algo criativo (mas, não maluco!) usado para diferenciar um host de outro host em uma rede local. Nomes de hosts DEVEM ser coisas simples como: gandalf, frodo, mordor, server-01-ab, monkey2you ou bee-0800. As regras de formação desses nomes também são simples. Um nome de host:
- DEVE usar letras do código ASCII em minúsculas - [a-z].
- PODE usar números de [0-9], exceto como primeiro caractere
- JAMAIS usar caracteres acentuados ou especiais (ã, é, í,ü @, &,#, etc.)
- NÃO pode haver dois nomes iguais na mesma rede (mesmo domínio)
- NÃO podem conflitar com nomes da internet (por segurança)
- DEVEM fazer sentido para humanos normais (por mais que você insista em chamar seu host de ha4k3r-f0da0.com, isso não é normal).
- Podem ter traços (sinal de menos)
Você pode dizer que o endereço IP já é usado para diferenciar um host de outro host, o que é verdade. Todavia, a sacada sobre os nomes de hosts é que eles tornam seu servidor transparente para o usuário. Assim, se você usa um endereço IPv4 como 192.168.0.100 para seu servidor web da intranet e resolve mudar isso (por uma razão qualquer) para 192.168.0.200 os usuários (que são os navegadores) não vão localizar seu servidor automaticamente; será preciso avisar todos os usuários humanos sobre a mudança de endereço IP do servidor para eles avisarem aos navegadores, e isso dá trabalho, uma coisa que administradores não gostam de fazer, pois exige contato com humanos normais.
Agora, se você chamar seu servidor intranet de gandalf.intranet.bit os navegadores da sua rede continuam localizando seu host independente do endereço IP que ele estiver usando. Isso não é mágica, vejamos como funciona:
A tradução de endereços na internet (e também na intranet) é feita por um serviço de rede chamado DNS - Domain Name Server - que pega o nome de um site como www.vivaolinux.com.br e traduz para um endereço IP (pode ser IPv4 ou IPv6) que é o valor realmente utilizado para fazer a conexão. Sem DNS você não navega na internet, a menos que saiba o IP numérico do site que procura.
Um site público como o Google ou YouTube possui um (ou mais) registro(s) no sistema DNS público que permite que seus nomes sejam localizados por qualquer navegador de internet. Sites públicos são aqueles que estão abertos para os usuários da internet global (mesmo que exijam uma senha de login). Você pode acessar o gmail.com.br do Japão, da África do sul ou de qualquer lugar do Brasil. Isso é possível por causa do DNS. Vamos deixar o DNS de lado um pouco e voltar para o arquivo
/etc/host.
O nome de host
Um nome de host (hostname) têm duas partes (gandalf + intranet.bit). A primeira parte é nome do host (gandalf) e a segunda parte é o nome do domínio (intranet.bit). Assim como um nome completo é primeiro nome + o sobrenome da família. Por exemplo, Roberto da Silva Sauro nos diz que: na família Silva Sauro existe um Roberto. O Roberto da família Silva Sauro deve ser único, e não pode haver outro Roberto na mesma família. Pode haver um Roberto de Carvalho ou Roberto Medina, que são de outras famílias (ou domínios, por analogia).
Esse nome completo (do Roberto e do host) é chamado de nome canônico (um jeito chique de falar nome completo). Canônico significa "nome de acordo com as regras". Em computação um nome canônico é chamado de nome FQDN (Full Qualified Domain Name ou Nome de Domínio Totalmente Qualificado).
Agora, para os mais chegados o Roberto da Silva Sauro é chamado de Bebeto. Bebeto é um apelido do Roberto (em computação um apelido é chamado de alias). O alias de um FQDN é seu nome não-qualificado, ou seja, seu nome curto.
Por exemplo, em gandalf.intranet.bit o alias principal é gandalf, mas podem haver outros alias como Mithrandir ou Branco, que são outros nomes pelos quais gandalf também é conhecido na terra média (sua rede local).
Um host na rede local tem um IP interno (chamado de IP privado) que não é roteável pela internet (não pode vazar na internet). Nosso host servidor é fechado para uso apenas pela nossa rede local interna, em outras palavras, nosso host não faz parte da internet. Isso leva a conclusão que nosso host não pode (e não DEVE) ser localizado por qualquer pessoa da internet usando o sistema DNS público da internet. Mas como eu localizo um host na minha rede local por nome? Existem duas opções:
1. Montar um servidor de DNS local, para redes que são realmente grandes com 20 computadores ou mais. Um servidor DNS (BIND) está fora do escopo deste artigo, mas existem vários artigos sobre isso por aí.
2. Usar o arquivo
/etc/hosts é a solução para redes pequenas. Logicamente, se essa rede pequena tem um computador em cada um dos dez andares de um prédio, ela se torna fisicamente grande apesar de ter poucos computadores e isso pode ser um problema sério neste caso.
O arquivo /etc/hosts
Esse arquivo é escrito em texto puro (ASCII ou UTF-8), sendo responsável por armazenar uma base de dados estática que associa nomes de hosts com seus endereços IP, na forma de um registro por linha na seguinte sintaxe:
Endereço_IP nome_canônico \[alias1 alias2 \]
As entradas na linha são separadas por espaço ou tabulações. Linhas que começam com um sinal de hash "#" são comentários de linha e são ignorados. Os nomes de host podem conter traços (sinal de menos) ou pontos, que são separadores de nível.
Antes da invenção do DNS (BIND) era assim que todos os nomes de hosts de servidores da internet era atualizado. Apesar da existência do DNS, o arquivo
/etc/hosts ainda é utilizado por questões de compatibilidade, para hosts isolados e para configurar serviços durante o boot, enquanto DNS não está disponível. Uma modificação neste arquivo entra em vigor imediatamente, exceto para sistemas que utilizam algum tipo de cache local de DNS. Diferente de DNS que é dinâmico, as entradas em
/etc/hosts precisam ser atualizadas manualmente, por isso não deve ser utilizado em redes grandes. O nome do host nunca deve ser configurado como 127.0.0.1 (localhost), pois alguns programas falham se isso acontecer. A seguir um modelo de
/etc/hosts básico:
Referências:
- Internet RFC 952
- man hosts(5)