# Usando MaraDNS como um servidor de DNS autoritativo

## Índice

- Requisitos
- O que é uma zona de domínio?
- Configurando um domínio com MaraDNS
- Configurando um arquivo de zona de domínio
- O formato de um arquivo de zona de domínio
- O caractere de atalho %
- Conectando-se aos servidores de root raiz
- Adquirindo dois IPs
- Nomes interno de uma rede

## Requisitos

Para configurar um servidor de DNS autoritativo, a pessoa precisa de um ou ou mais endereços de IP válidos. No Brasil a entidade registro.br exige dois ou mais endereços de IP válidos.

Além disso, a(s) máquina(s) com os endereços de IP válidos precisam estar rodando um servidor de DNS autoritativo, como MaraDNS.

## O que é uma zona de domínio?

Um nome como www.example.com faz parte da zona de domínioexample.com. O nome www.yahoo.com, como outro exemplo, faz parte da zona de domínioyahoo.com. www.maradns.org faz parte da zona de domínio maradns.org.

## Configurando um domínio com MaraDNS

Compile e instaleo MaraDNS no sistema que agirá como um servidor de DNS autoritativo.

Depois de fazer isto, o arquivo `mararc` precisa ser alterado para o MaraDNS funcionar como um servidor de DNS autoritativo.

Um arquivo mararc que pode ser usado para servir um domínio de zona precisa somente ter quatro linhas:

    ipv4_bind_addresses = "10.3.28.79"
    chroot_dir = "/etc/maradns"
    csv2 = {}
    csv2 ["example.com."] = "db.example.com"

Vamos olhar estas quatro linhas. A primeira linha, `ipv4_bind_addresses` é o endereço de IP (ou endereços) que este servidor de DNS terá. Considerando que estamos executando um servidor de DNS autoritativo, é fundamental que este endereço de IP seja roteável, ou seja, um endereço IP que possa ser acessado por qualquer um na internet. Também é importante que qualquer firewall entre esta máquina e a internet garanta a conexão da porta UDP 53 nesta máquina.

O valor de `chroot_dir`é o diretório que contém todos os arquivos de informação para a zona de domínio (estes arquivos normalmente são chamados "arquivo de zona" pelos administradores de DNS). Aqui, colocamos os arquivos de zona no diretório `/etc/maradns`.

A terceira linha, `csv2 = {}`, diz para o MaraDNS que estaremos agindo como um servidor de DNS autoritativo. Esta linha deve ser colocada antes de dizer ao MaraDNS onde todos os arquivos de zona serão encontrados.

A quarta linha, `csv2 ["example.com."] = "db.example.com"` conta para o MaraDNS, que para a zona de domínio "example.com.", o arquivo de zona é chamado "db.example.com".

Em outras palavras, example.com. é o nome da zona de domínio que o arquivo db.example.com contém os dados. Mude example.com. para o nome de zona de domínio que você deseja servir, e db.example.com para o nome do arquivo a ser usado para servir aquela zona de domínio. Importante: o nome da zona de domínio (por exemplo example.com. ) requer um ponto '.' no final.

É possível servir múltiplas zonas de domínios. Por exemplo:

>     csv2 ["example.com."] = "db.example.com"
>     csv2 ["example.org."] = "db.example.org"
>     csv2 ["heaven.af.mil."] = "db.heaven.af.mil"

Também é possível atribuir ao MaraDNS, múltiplos endereços de IP, por exemplo:

    ipv4_bind_addresses = "10.3.28.79, 10.9.87.23",

## Configurando um arquivo de zona de domínio

Supomos que estamos configurando o domínio example.com, onde teremos os seguintes serviços:

- Estamos rodando um servidor de web para example.com e www.example.com no IP 10.10.10.12. Em outras palavras, pessoas podem acessar páginas de web nesta máquina.
- Temos um servidor de correio eletrônico (e-mail) ou agente de transporte de correio para example.com com o IP 10.10.10.15. Em outras palavras, a máquina com o IP 10.10.10.15 é configurada para manipular emails endereçados a name@example.com, onde "name" é qualquer cadeia de caracteres antes do sinal '@'.
- Ambos 10.10.10.11 e 10.10.10.17 estão executando MaraDNS em modo autoritativo para servir solicitações de DNS para example.com.

O arquivo de zona para a situação a acima seria como no exemplo abaixo. Nota que as linhas que inciam com o símbolo `#` são puramente comentários (linhas ignoradas pelo MaraDNS).

    # This is an example zone file for the imaginary domain example.com.

    # We have two records which handle the serving of web pages.  These
    # are simple name-to-ip translations.  In other words, we have one
    # record which states "The IP for exmaple.com. is 10.10.10.12" and
    # another that states "The IP for www.example.com. is 10.10.10.12"
    example.com. 10.10.10.12
    www.example.com. 10.10.10.12

    # We also need to set up an IP for the machine that serves email for
    # example.com.  Becuase of how DNS is designed, we both need
    # a record which states "The machine which handles mail for
    # exmaple.com is called mail1.example.com" and a record which states
    # "The IP address for mail1.example.com is 10.10.10.15":
    example.com. MX 10 mail1.example.com.
    mail1.example.com. 10.10.10.15

Agora, para adaptar este arquivo a uma outra zona, precisamos simplesmente fazer as seguintes mudanças:

- Substitua o nome example.com pelo o nome do domínio que deseja configurar.
- Substitua o IP 10.10.10.12 pelo o IP da máquina que executa o servidor de web para o domínio.
- Substitua o IP 10.10.10.15 pelo o IP da máquina que executa o servidor de email para o domínio.

Nota que a variável `chroot_dir` do mararc diz para o MaraDNS qual diretório contém os arquivos de zona de domínio.

## O formato de um arquivo de zona de domínio

Aqui estão algumas linhas de exemplo de um arquivo de zona de domínio, que é um exemplo de alguém usando o mesmo IP varias vezes. Por exemplo, se a pessoa estiver usando 10.10.10.19 como um servidores de DNS, servidor de email, e um servidor web, a pessoa teria registros assim:

    example.com.      NS ns1.example.com.
    ns1.example.com.        10.10.10.19
    example.com.            10.10.10.19
    www.example.com.        10.10.10.19
    example.com.      MX 10 mail1.example.com.
    mail1.example.com.      10.10.10.19

Traduzido as linhas anteriores, elas dizem:

- Um servidor de nome para example.com é chamado ns1.example.com.
- O IP para ns1.example.com é 10.10.10.19.
- O IP para example.com (em outras palavras, a máquina que um navegador de web deve contactar se a pessoa digitar http://example.com) é 10.10.10.19.
- O IP para www.example.com é 10.10.10.19.
- O nome da máquina que processa a entrada de email tem uma prioridade de dez (números de prioridade mais baixos são mais importantes), é chamada mail1.example.com.
- O IP para mail1.example.com é 10.10.10.19

Uma linha em um arquivo de zona de domínio contém um único registro de DNS. Os dados tem múltiplos campos separados por um espaço ou pelo caractere `|`, e está neste formato:

- A primeira porção do registro de DNS, é o nó de DNS para o qual este registro é anexado.
- A próxima porção de um registro de DNS, que é opcional, diz para o MaraDNS que tipo de registro de DNS é este. Uma lista dos registros de DNS que são suportados pelo MaraDNS é descrito aqui. Se este campo estiver ausente, MaraDNS assume que o registro é do tipo "A" (endereço de IP 32-bit), e que a segunda porção é o endereço de IP em questão.
- Se o registro não é do tipo "A", os campos subseqüentes descrevem o registro DNS em questão. O formato para estes dados depende do tipo do registro DNS a ser usado, que é descrito aqui.

A razão para usar diferentes nomes para diferentes funções é de minimizar o número de problemas a ser encontrados, se precisar mudar os IPs deles mais tarde.

## O atalho %

Se alguém estiver configurando múltiplas zonas de domínio, que tenham mais ou menos os mesmos dados, é conveniente ter um modelo de arquivo de domínio que as diferentes zonas possam usar sem necessitar modificar o arquivo em questão.

MaraDNS tem suporte para isto usando o símbolo `%`. Sempre que MaraDNS encontra `%` em um arquivo de zona csv2, MaraDNS irá substituir o símbolo de porcentagem pelo nome da zona em questão. Por exemplo, se o arquivo em questão é o arquivo da zona example.com, o % será trocado por "example.com.". Se o arquivo da zona em questão é para maradns.org, o % é trocado por "maradns.org.". Conseqüentemente, nós podemos, contanto que o arquivo de zona seja para example.com, ter um arquivo de zona assim:

    # We have two records which handle the serving of web pages.  These
    # are simple name-to-ip translations.
    %     10.10.10.12
    www.% 10.10.10.12

    # We also need to set up an IP for the machine that serves email for
    # our zone.  Becuase of how DNS is designed, we both need
    # a record which states "The machine which handles mail for
    # out zone is called mail1." and a record which states
    # "The IP address for mail1. is 10.10.10.15":
    % MX  10 mail1.example.com.
    mail1.%  10.10.10.15

Este arquivo de zona funcionaria identicamente ao primeiro arquivo de zona do exemplo mostrado anteriormente.

## Conectando-se aos servidores de dns raiz

Um servidor de DNS autoritativo não servirá um domínio efetivamente a menos que os servidores de nome raiz estejam atentos que um determinado servidor de DNS serve um determinado nome de domínio.

Quando um servidor de DNS recursivo tenta achar um IP, por exemplo, www.example.com, ele primeiro pede ao servidor de dns raiz por este IP. Os servidores de nome raiz enviam uma resposta dizendo que "Nós não sabemos a resposta para esta solicitacao, mas você pode contatar o servidor de DNS 10.1.2.3 para essa resposta". Neste momento, o servidor de DNS recursivo contata 10.1.2.3, pedindo pelo IP de www.example.com. (De fato, os servidores de nome raiz distribuem os servidores de nomes .com que distribui os servidores de nomes example.com mas o princípio é o mesmo)

Para que a comunidade da internet inteira possa estar atenta a um domínio, o domínio deve ser registrado com os servidores de nome raiz, de forma que os servidores de nome raiz saibam que os IPs das máquinas que são servidores de DNS autoritativos para o domínio em questão. (Novamente, você realmente está registrando com, digamos, servidores .com)

As políticas exatas de como registrar um domínio depende do registrador em questão (No Brasil, é o Registro.br que faz esse trabalho).

Há um grande número de registradores por aí para servir nomes de domínio. No Brasil você pode usar intermediários, mas no final das contas tudo é feito pelo Registro.br http://registro.br Para registrar um domínio, você precisará conhecer os servidores de zona para seu domínio. Você mesmo pode configurar isso (veja abaixo para um exemplo), ou usar o tutorial do `askmara` para descobrir os servidores de nome para seu domínio.

Para usar a ferramenta `askmara`, faça uma requisição deste modo:

> `askmara Nexample.com. 127.0.0.1`

Substitua `example.com` pelo nome do domínio a ser registrado, e `127.0.0.1`com o IP do servidor de DNS. A saída da consulta se parecerá algo como:

    # Querying the server with the IP 127.0.0.1
    # Question: Nexample.com.
    example.com. +86400 ns synth-ip-0a010203.example.com.
    example.com. +86400 ns synth-ip-0a040506.example.com.
    # NS replies:
    # AR replies:
    #synth-ip-0a010203.example.com. +86400 a 10.1.2.3
    #synth-ip-0a040506.example.com. +86400 a 10.4.5.6

Os nomes para os servidores que nós desejamos submeter ao registrador são o nomes acima `synth-ip-0a010203.example.com` e `synth-ip-0a040506.example.com` . Estes nomes pouco longos são os nomes dos servidores de nome para o (no exemplo anterior) `example.com.`. Ao término da saída de `askmara`, você pode ver os IPs para estes servidores; coloque estes IPs no campo onde eles pedem pelo IP dos servidores de nome do seu domínio.

Por exemplo, se a formulário do registrador se parece assim:

    Nome de domínio: _________________

    Nameserver 1 nome: ____________________________________
    Nameserver 1 IP:   ____________________________________
    Nameserver 2 nome: ____________________________________
    Nameserver 2 IP:   ____________________________________
    Nameserver 3 nome: ____________________________________
    Nameserver 3 IP:   ____________________________________
    Nameserver 4 nome: ____________________________________
    Nameserver 4 IP:   ____________________________________

Baseado na saída anterior do `askmara`, nós preencheríamos desta forma:

    Nome de domínio: example.com

    Nameserver 1 nome: synth-ip-0a010203.example.com.
    Nameserver 1 IP:   10.1.2.3
    Nameserver 2 nome: synth-ip-0a040506.example.com.
    Nameserver 2 IP:   10.4.5.6
    Nameserver 3 nome: ____________________________________
    Nameserver 3 IP:   ____________________________________
    Nameserver 4 nome: ____________________________________
    Nameserver 4 IP:   ____________________________________

Se você só tiver um servidor de NS, pode precisar adquirir um segundo para registrar um domínio. O procedimento para fazer isto é descrito na seção seguinte.

## Adquirindo dois IPs

Como declarado no começo deste documento, muitas registradoras de domínios requerem no mínimo dois IPs para registrar um domínio. Se a pessoa tem um computador com dois ou mais IPs válidos roteáveis, é bastante simples ver o MaraDNS lidar com estes IPs. Apenas mude a variável `ipv4_bind_addresses` para incluir todos os IPs que a pessoa deseja que o MaraDNS lide, como no exemplo seguinte,:

> `ipv4_bind_addresses = "10.1.2.3, 10.5.6.7",`

Naturalmente, substitua "10.1.2.3" e "10.5.6.7" pelos IPs que sua máquina possui.

Mas se você tem um único IP, é necessário achar alguém que proverá um DNS secundário para seu domínio, e configure o MaraDNS para ser um servidor de zona. Informaçoes de como fazer isto é mostrado no documento DNS mestre .

## Nomes interno a uma rede

Às vezes as pessoas teram vários computadores em um escritório, ou em outra rede pequena, com vários nomes diferentes. É desejável usar DNS para dar a estas máquinas de escritório endereços de IP. Vamos supor que nós temos uma empresa com computadores nomeados "Mascota", "Paloma", e "Vela." Se desejarmos ter computadores no escritório acessíveis apenas pelo nome (como "Vela"), nós configuramos então o que é conhecido como um sufixo de domínio padrão. Supondo que a empresa em questão tem o domínio chamado de "example.com." Nós damos então para nossos computadores os nomes "mascota.example.com ", " paloma.example.com", e "vela.example.com". Nós dizemos então aos computadores no escritório que, quando é dado um nome sem sufixo, acrescentá-se o sufixo "example.com" ao procurar nomes do host.

Em UNIX, BSD, e máquinas Linux em um escritório, isto é feito acrescentando uma linha assim ao arquivo `/etc/resolv.conf:`:

> `search example.com`

No Windows XP, vá para Painel de controle - Conexões de Rede - Conexão de Área Local (ou qualquer conexão no computador que usa para seguir a LAN) -> Propriedades -> Protocolo de Internet (TCP/IP) (isto está debaixo de "Os usos de conexão os artigos seguintes" e você podem ter que rolar até vê isto) -> Avançado -> DNS -> "Acrescente estes sufixos de DNS (em ordem) " -> Some e digite "example.com" (ou tudo que) como o sufixo de Domínio.

Uma vez feito isto, crie uma zona para example.com. Considerando que nós estamos dando apenas IP para três computadores, o arquivo de zona para example.com é acrescentado ao arquivo mararc com esta linha:

> `csv2 ["example.com".] = "db.example.com"`

Nós colocamos então, no diretório apontado para `chroot_dir` no mararc arquivo, o arquivo `db.example.com` que se parece:

    mascota.% 10.1.2.3
    paloma.% 10.5.6.7
    vela.% 10.9.8.4

Veja acima para uma explicação do que o símbolo `%` faz.

As três linhas anteriores são um arquivo de zona csv2 completo, sendo um resumo para o seguinte:

    # The SOA record.  If a zone doesn't have a SOA record, MaraDNS will
    # synthesize an appropriate one for a given zone.  This is information
    # about who is in charge of the example.com zone; basically the zone
    # name "example.com.", SOA "It's a Start of Authority record",
    # "example.com." (this is the name of the machine in charge of
    # example.com), "hostmaster@example.com." (the email address of the
    # person in charge of example.com.)
    example.com.    SOA     example.com. hostmaster@example.com.
    # The following numbers, part of the SOA record, give some technical
    # information about transferring information about this zone to other
    # DNS servers.  If you use rsync to share zone files, these numbers
    # do not need to be worried about.
                            1 7200 3600 604800 1800

    # NS records.  If a zone doesn't have NS record, MaraDNS will, again
    # synthesize appropriate NS records for a given zone.  This is a list
    # of all of the DNS servers that have the example.com zone file.
    example.com. NS ns1.example.com.
    example.com. NS ns2.example.com.

    # The NS records above need IPs.  Note that "A" (this is an IP) is
    # optional
    ns1.example.com.  A 10.1.2.3
    ns2.example.com.  A 10.4.5.6

    # Now that we have the SOA and NS records taken care of (again, MaraDNS
    # will automatically take care of these records if they are not in a
    # zone), we can add the records for the zone in question

    # mascota.example.com. has the IP address 10.1.2.3
    mascota.example.com.    A       10.1.2.3
    # mascota.example.com. has the IP address 10.5.6.7
    paloma.example.com.     A       10.5.6.7
    # mascota.example.com. has the IP address 10.9.8.4
    vela.example.com.       A       10.9.8.4

Informações sobre como configurar um servidor recursivo na forma que estes nomes são hostnames privado, estão disponível na seção de hostname privado na documentação do servidor recursivo.