Fim de 'férias'. Virada do ano no Rio, muito samba, suor e cerveja, depois visita aos familiares. Bom para desopilar a mente. E cá estou, remando outra vez. Depois do descanso, o ano começou quente (no clima e no figurado), e já estou com a sensação de estar no meio do ano... Esse Schumann e a vida rápida pregando suas peças.

Enfim, acabou a moleza do blog também. O backlog de artigos só cresce, mas antes de atacá-lo vou terminar essa série.

Já temos o NAS com as configurações básicas para uma vida produtiva e WiFi. A esta altura do campeonato você também já deve estar com a sua conta no SixXS e subrede /48 em mãos para a rede IPv6, mas elas não serão necessárias ainda. Neste artigo vou mostrar o setup do DNS, que é mais chatinho, e deixar o caminho livre para o resto dos serviços IPv4.

DNS

A função de um DNS é converter nomes de servidores (ex. registro.br) em endereços IP (ex. 200.160.2.3), e vice-e-versa. Com o servidor de DNS instalado em nossa rede, ao invés de digitarmos 192.0.2.1 no navegador para acessarmos o NAS, vamos digitar apenas xibiu.

Você pode me questionar: "por que complicar minha vida com um DNS se eu tenho tão poucos dispositivos na rede?". Bom, de fato, você não precisa dessa camada de software e de complicação se tudo o que você tem na sua rede é um NAS, um gateway e um computador. Mas há três casos nos quais o DNS pode ser muito útil:

  1. Você pretende ter um ambiente de desenvolvimento web em casa e vai utilizar vários projetos em diferentes virtual hosts. Neste caso, se você colocar um projeto web em um virtual host, a única forma de você conseguir carregar o projeto é através do nome do servidor. Se digitar apenas o IP, sempre chegará na página padrão do servidor web. É claro que você pode resolver este problema usando apenas o /etc/hosts, mas com o DNS é muito mais prático, legal e nerd;
  2. Se você está lendo tudo isto, é porque quer muito ter IPv6 em casa. Neste caso, tenho certeza que você não quer digitar um endereço como 2001:db8:abcd:7ad2:f537:3259:0c5a. E mesmo que você queira, não irá lembrar. Então, instale o diacho DNS;
  3. Essa eu considero a principal delas: ter um cache de DNS dentro de casa para acelerar suas resoluções de nome e, no geral, navegar mais rápido na internet.

Pois bem, como eu disse antes, tenho um Synology. O sistema operacional dele, conhecido como DSM (de DiskStation Manager), é bacana o suficiente para prover uma central de pacotes já milimetricamente preparados para rodar em um Synology. O servidor de DNS é um desses pacotes.

Mas se você não tem um NAS da Synology, a sua vida tabém não deve ser difícil. Nada que um slackpkg install bind (Slackware), pacman -S bind (Arch), apt-get install bind9 (Debian), yast2 -i bind (OpenSUSE) ou yum install bind (CentOS/Fedora) não resolva. E se não resolver, bem, estamos no Linux! Sempre podemos instalar qualquer coisa a partir dos fontes. Há outros pacotes que são úteis para quem roda o BIND e devem ser instalados (ou já estão). Os nomes variam de distro para distro, mas em geral é dnsutils ou bind-utils e bind-libs. Verifique se estes pacotes já estão instalados e, caso não estejam, instale-os.

O BIND é O servidor de DNS da internet. Tem gente que usa outras porcarias, mas o BIND é o BIND. E o pacotinho de servidor de DNS da Synology nada mais é que um BIND com uma carinha bonitinha para configurar. Por isso, eu vou mostrar a configuração dele como é no DSM. Essas configurações nada mais são do que arquivos de zonas (sem trocadilho) e zona reversa (sem trocadilho mesmo) no contexto do BIND. Basta adaptar ao seu caso ou sistema operacional.

Primeiro, vamos ver as zonas (domínios) e zonas reversas sob a autoridade do nosso DNS.

Zonas e zonas reversas pelas quais o servidor de DNS responde.

Cada entrada dessa é equivalente a isso no named.conf do BIND:

zone "sararacrioulo" {
  type master;
  file "sararacrioulo.zone";
};

A zona sararacrioulo é o nosso domínio local de exemplo. Você pode usar qualquer nome para a sua zona. É esta zona que vai guardar os nomes para os dispositivos da sua rede, os seus virtual hosts etc. Por exemplo: roteador.sararacrioulo.

A zona 2.0.192.in-addr.arpa é a zona reversa, que resolve IPs para nomes de DNS. É importante criar uma zona reversa para a sua rede pois alguns serviços precisam disso para funcionar bem, tipo NFS, NTP e o próprio servidor web (Apache, nginx ou lighttpd).

Já a zona xibiu.sararacrioulo.com.br é uma malandragem. Supondo que você possua o domínio sararacrioulo.com.br no Registro.BR (ou qualquer outro domínio, .br ou não) é mais que natural que você queira ter um nome de servidor para o seu NAS, em sua casa, na internet. Deste modo você poderá acessar o seu NAS, os seus arquivos ou qualquer outro dispositivo da sua rede de qualquer lugar que estiver lembrando apenas um nome. Acontece que os P-U-T-O-S das operadoras te dão um negócio chamado IP dinâmico que, como nome diz, muda de tempos em tempos. Isso você resolve fácil ao configurar um DDNS (ou Dynamic DNS) no seu NAS (vou mostrar isso mais tarde).

Só que: o servidor de DNS que estamos configurando não é autoritativo para o seu domínio na internet, que no nosso exemplo é sararacrioulo.com.br. Então, quando você estiver em casa e digitar no seu navegador sararacrioulo.com.br, béééérrrrrr!!! Você não vai chegar no seu NAS, pois quem vai resolver esse DNS é um servidor de fora, autoritativo do domínio sararacrioulo.com.br, que vai apontar para o IP da sua rede pública (ou IP quente). Como você está dentro de casa, não chegará no IP de fora. Pau, prezado.

Aí entra a malandragem. Vamos criar uma zona autoritativa (master) que vai responder só pelo DNS do nosso servidor de fora, que no caso, apenas como exemplo, darei o delicado nome de xibiu.sararacrioulo.com.br. Você deve inventar o seu. Feito isto, quando tentarmos acessar de dentro de casa, quem vai responder por esse endereço é o nosso DNS interno, e como ele em breve será o cara, nos dará o IP correto da rede interna para o nosso NAS. Problema resolvido.

Agora vamos ver o conteúdo das zonas (sem trocadilho). Para isto não faz sentido eu mostrar as telas do DSM. Vou mostrar o arquivo de zona apenas. Para quem está fazendo isso em um Synology, basta dar dois cliques numa zona e ir adicionando os recursos conforme as configurações abaixo.

Primeiro vamos ver a zona sararacrioulo, que é o nosso domínio da rede local.

$ORIGIN sararacrioulo.
$TTL 86400
sararacrioulo. IN SOA xibiu.sararacrioulo. eu.sararacrioulo.com.br. (
  2013122710
  86400
  180
  2419200
  10800
)
sararacrioulo.                 86400 NS    xibiu.sararacrioulo.
localhost.sararacrioulo.       86400 A     127.0.0.1
xibiu.sararaciroulo.           86400 A     192.0.2.1
notebook1.sararacrioulo.       86400 A     192.0.2.2
cabo.notebook1.sararacrioulo. 86400 A     192.0.2.3
celular.sararacrioulo.         86400 A     192.0.2.4
wifi.sararacrioulo.            86400 A     192.0.2.13
roteador.sararacrioulo.        86400 A     192.0.2.14
horacerta.sararacrioulo.       86400 CNAME xibiu.sararacrioulo.
mexapi.sararacrioulo.          86400 CNAME notebook1.sararacrioulo.

Eu não vou explicar o que isso tudo aí significa, pois esse não é o objetivo deste artigo. Se você quiser (e aconselho que queria) saber do que se trata, leia isso. Se precisar criar seus arquivos de zona, o ZoneFile.org ajudará bastante.

O importante aqui é que cada servidor recebeu uma reserva de DHCP que manterá o seu IP fixo. A este IP fixo é associado um nome. Enquanto estivermos dentro de nossa rede e sob autoridade do nosso DNS, esse nome será usado para acessar os servidores na rede local.

Note porém as entradas CNAME. Elas são 'apelidos' para nomes. Assim, se eu digitar no navegador o endereço horacerta.sararacrioulo, vou acabar chegando no NAS, porque este nome é um apelido para o nome xibiu.sararacrioulo, que por sua vez resolve o IP para 192.0.2.1. Isso será útil depois para definir outros serviços na rede.

Agora a zona reversa.

$ORIGIN 2.0.192.in-addr.arpa.
$TTL 86400
2.0.192.in-addr.arpa. IN SOA 1.2.0.192.in-addr.arpa. eu.sararacrioulo.com.br. (
  2013122707
  86400
  180
  2419200
  10800
)
2.0.192.in-addr.arpa.    86400  NS  xibiu.saracrioulo.
1.2.0.192.in-addr.arpa.  86400  PTR xibiu.saracrioulo.
2.2.0.192.in-addr.arpa.  86400  PTR notebook1.saracrioulo.
3.2.0.192.in-addr.arpa.  86400  PTR cabo.notebook1.saracrioulo.
4.2.0.192.in-addr.arpa.  86400  PTR celular.saracrioulo.
13.2.0.192.in-addr.arpa.  86400 PTR wifi.saracrioulo.
14.2.0.192.in-addr.arpa.  86400 PTR roteador.saracrioulo.

Essa zona é a mesma coisa que a anterior, só que ao contrário. Quando alguém perguntar ao nosso DNS 'qual é o nome do servidor 192.2.0.1?', ele responderá xibiu.sararacrioulo.

Por último, a zona da malandragem (foda-se o trocadilho).

$ORIGIN xibiu.sararacrioulo.com.br.
$TTL 86400
xibiu.sararacrioulo.com.br. IN SOA xibiu.sararacrioulo.com.br.
eu.sararacrioulo.com.br. (
  2013110101
  86400
  180
  2419200
  10800
)
xibiu.sararacrioulo.com.br. 86400 NS  xibiu.sararacrioulo.com.br.
xibiu.sararacrioulo.com.br. 86400 A 192.0.2.1

Como vimos acima, a única função dessa zona é responder pelo endereço público do NAS com um IP da rede interna.

Agora só resta ajustar nosso DNS como um encaminhador (forwader). Isto fará com que ele encaminhe as requisições de resolução de nomes para domínios externos para um servidor de DNS público e cacheie essas requisições pelo tempo permitido pelo TTL dos servidores de DNS autoritativos dos domínios públicos. Parece complicado, mas em termos de configuração é bem simples e você quer fazer isso.

Se estiver no DSM, clique em Resolução, marque Habilitar serviços de resolução e Habilitar encaminhadores, digite o IP dos encaminhadores nas caixas apropriadas e clique em Aplicar. Você pode usar os DNS públicos do Google para isso, que são 8.8.8.8 e 8.8.4.4. Você também pode preferir usar os DNSes da sua operadora de serviço de internet, mas geralmente (por aqui) eles são lentos e mal configurados (inseguros). Se você é sysadmin de operadora, chupa essa manga.

Se você estiver usando o BIND, a configuração de forwarders fica no named.conf e é assim:

options {
  /* outras configurações */
  forward first;
  forwarders {
    8.8.8.8;
    8.8.4.4;
  };
};

Se você estiver em um Linux que não seja o DSM, será preciso recarregar o BIND (service named reload ou algo semelhante) para que as configurações entrem em vigor. Se estiver no DSM, ele já recarrega as configurações quando você aplica qualquer coisa, então não é preciso se preocupar com reiniciar nada.

Agora, vá no seu navegador e digite http://xibiu/. Rá! Você não precisa nem colocar o domínio sararacrioulo. Se você se lembrar, colocamos o domínio lá no DHCP. Com essa informação, os clientes 'autocompletam' o domínio por você quando não houver um. Não deixe de experimentar navegar para http://xibiu.sararacrioulo.com.br/, ou qualquer que seja o domínio externo que você tenha usado.

Bacana, não?

É isso. Nosso DNS está pronto. Daqui pra frente é melzinho na chupeta, dois palitos. Pelo menos a parte do IPv4.

Mas eu conto no próximo artigo.