# Tendo MaraDNS como um servidor DNS mestre

Um servidor de DNS mestre (às vezes chamado primário) é um servidor de DNS que outros servidores de DNS podem transferir arquivos de zona automaticamente. Existe limitações para deste modo de transferência de arquivos de zona; arquivos de zona transferidos deste modo perdem todos os comentários e a ordenação dos registros no arquivo de zona normalmente é mudado.

Em outras palavras, o DNS tem um mecanismo para automaticamente ter múltiplo diferentes servidores com os mesmos dados do arquivo de zona. Isto é semelhante ao programa ao `rsync`; assim permite a pessoa mudar um arquivo de zona na máquina mestre, e então as máquinas escravos automaticamente transferiram o arquivo de zona da máquina mestre.

Isto é útil quando se quiser ter múltiplas máquinas que servem dados de DNS. Também é útil quando se quer registrar um domínio, mas só tem único IP válido. Existem vários serviços de DNS secundário (escravo) grátis na internet que se pode usar para ter um segundo IP para um servidor de DNS de um domínio.

Para configurar isto, é preciso rodar o daemon `zoneserver` além do daemon `maradns`. Ambos os daemons usam o mesmo arquivo de configuração `mararc`; Existe algumas variáveis no `mararc` que afetam o daemon `zoneserver` mas não o `maradns` (e vice-versa).

Ao configurar um servidor de DNS mestre, só uma variável adicional no `mararc` precisa ser configurada, `zone_transfer_acl`. Esta variável precisa listar os IPs dos servidores de DNS escravos que transferirão as zonas do servidor mestre. Por exemplo, se os servidores de DNS escravos possuem os IPs 192.168.72.34, 10.34.56.98, e 172.17.23.37, a linha, se parecerá assim:

> `zone_transfer_acl = "192.168.72.34, 10.34.56.98, 172.17.23.37"`

Se você não conhece o IP do servidor de DNS escravo, você pode permitir qualquer computador da internet conectar-se ao servidor de zona:

> `zone_transfer_acl = "0.0.0.0/0"`

Note que isto fará potencialmente informações privadas públicas.

Algo assim também pode ser feito:

> `zone_transfer_acl = "192.168.42.0/24, 10.0.0.0/8, 172.19.0.0/16"`

Isto permitirá qualquer IP que começe com "192.168.42" conectar-se ao servidor de zona, qualquer IP que começe com "10" conectar-se ao servidor de zona, e qualquer IP que começe com "172.19" conectar-se ao servidor de zona.

Aqui é um exemplo do arquivo mararc com o ip 10.1.2.3, e serve a zona `example.com` para o IPs 192.168.72.34, 10.34.56.98, e 172.17.23.37:

    ipv4_bind_addresses = "10.1.2.3"
    chroot_dir = "/etc/maradns"
    csv2 = {}
    csv2["example.com."] = "db.example.com"
    zone_transfer_acl = "192.168.72.34, 10.34.56.98, 172.17.23.37"

## Como registros SOA afetam os servidores de zona escravo?

O registro de SOA diz para o servidor de zona escravo com que freqüência conferir se um arquivo de zona precisa ser recarregado. Aqui é como um registro SOA se parece:

> `example.com. SOA example.com. hostmaster@example.com. 1 7200 3600 604800 1800`

O primeiro campo é o nome da zona para qual esse registro SOA é.

O segundo campo conta ao parser do csv2 que este é um registro de SOA.

O terceiro campo é o nome da máquina que é o servidor de DNS mestre para esta zona.

O quarto campo é o endereço de e-mail da pessoa que administra essa zona.

O quinto campo (primeiro campo numérico) é o que chamo de número "serial". Este número é usado pelo servidores de DNS escravo para ver se o arquivo de zona sofreu alterações. Este número deveria ser aumentado toda vez que um arquivo de zona é mudado. MaraDNS, quando gera um registro SOA sintético, vê quando o arquivo de zona foi mudado pela última vez, e usa um selo de tempo que atualiza a cada seis segundos como um número de série de SOA.

O sexto campo (segundo campo numérico) é o "refresh" para o domínio; este é com que freqüência (em segundos) um servidor de DNS escravo poderá conferir se o número serial do servidor de DNS mestre mudou.

O sétimo campo (terceiro campo numérico) é o "retry" para o domínio; quando o servidor de dns mestre não está rodando, este é com que freqüência o servidor de dns escravo conferirá se o servidor mestre está ativo novamente. Este valor, como todos os valores de tempo, está em segundos.

O oitávo campo (quarto campo numérico) é o "expire" para o domínio; Isto é quanto tempo o servidor escravo esperará antes de já não tentar obter uma zona de um servidor mestre quando o mesmo não estiver rodando. Este deverá ser um valor grande.

O nono campo (quinto campo numérico) é o "minimum" para o domínio; isto não afeta como MaraDNS processa um arquivo de zona e não é usado por servidores de dns escravo (determina TTL padrão/mínimo com outro servidores de dns).

O programa `zoneserver` também pode ser usado para servir outros registros DNS sobre TCP; veja o arquivo dnstcp para detalhes.