<HEAD><TITLE>Solucionando oscilações de registro CNAME</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso8859-1">

</HEAD>
<BODY>

<!-- Copyright 2005 Sam Trenholme

    TERMS

    Redistribution and use, with or without modification, are permitted 
    provided that the following condition is met:

    1. Redistributions must retain the above copyright notice, this 
       list of conditions and the following disclaimer.

    This documentation is provided 'as is' with no guarantees of 
    correctness or fitness for purpose.

 -->

Existem dois casos que podem fazer a mensagem "dangling CNAME" 
aparecer:
 

<ul>
<li><A href="#nonlocal">Quando um CNAME aponta para um nome 
de host externo.
</a>
 <li><A href="#local">Quando um CNAME possui erros de escrita ou
o host que o CNAME aponta está com erro de escrita.
</a>
 </ul>

<A name=nonlocal>
<h3>CNAMEs apontando para nomes de host externos</h3>
</a>

As vezes, as pessoas podem desejar ter nomes locais apontando para entradas
externas com registros CNAME.  Por exemplo, pode ser desejável ter o atalho 
"google" para "www.google.com." Um modo que a pessoa possa desejar fazer
isto é:
<pre>
google.example.com. +86400 CNAME www.google.com.
</pre>

A configuração padrão do MaraDNS não completará o registro. 
Em outras palavras, algumas pessoas podem esperar que o Mara
produza o seguinte para "google.example.com":
<pre>
	google.example.com. +86400 CNAME www.google.com.
	www.google.com. +900 A 66.102.7.104
</pre>

Ao invés, Mara simplesmente reproduz: 

<pre>
	google.example.com. +86400 CNAME www.google.com.
</pre>

Eu chamo isto de um registro "dangling CNAME", já que o registro 
CNAME não é resolvível por alguns servidores toscos. Para solucionar
o dangling CNAME, MaraDNS pode ser configurado desta maneira:
 
<ul>
<li>Executarmos dois servidores MaraDNS em dois IPs diferentes. 
<li>Por causa deste exemplo, supormos que a pessoa do servidor 
envie requisições para solucionar nomes de hosts que tem o IP 192.168.1.1.
Vamos supor mais adiante que há um servidor que tem o dangling CNAME 
com o IP 192.168.1.2
<li>Configure 192.168.1.1 para usar 192.168.1.2 como um servidor upstream
usando a variável upstream_servers do mararc. 
<li>Configure 192.168.1.2 para ser tanto um servidor autoritativo e recursivo de DNS, 
e tenha registros de dangling CNAME dentro da metade do autoritativo.
 </ul>

Isto resolverá completamente o problema de dangling CNAME; aqui é o
que os dois servidores MaraDNS fazem para solucionar tal registro:
 
<ol>
<li>Um determinador servidor tosco pergunta para 192.168.1.1 o endereço de IP para, digamos "google.example.com"
 <li>192.168.1.1 pede para 192.168.1.2 o endereço de IP "google.example.com" 
<li>192.168.1.2 diz que 192.168.1.1 "google.example.com é um CNAME para www.google.com, e eu não tenho um IP para isto"
 <li>192.168.1.1, vendo que tem um CNAME sem um IP, pede para 192.168.1.2 o IP "www.google.com"
 <li>192.168.1.2 recursivamente soluciona o IP para www.google.com, e dá este IP para 192.168.1.1
 <li>Agora que 192.168.1.1 têm um registro completo, enviará este registro ao tosco.
Em outras palavras, 192.168.1.1 contará ao tosco que google.example.com é um CNAME para www.google.com, e então distribuirá o IP para www.google.com.

 
</ol>

Aqui é um exemplo do arquivo <TT>mararc</TT> para 192.168.1.1: 
 
<pre>
ipv4_bind_addresses = "192.168.1.1"
chroot_dir = "/ etc/maradns"
recursive_acl = "192.168.1.0/24"
upstream_servers = "192.168.1.2"
</pre>

Aqui é um exemplo do arquivo <TT>mararc</TT> para 192.168.1.2: 
 
<pre>
ipv4_bind_addresses = "192.168.1.2"
chroot_dir = "/ etc/maradns"
recursive_acl = "192.168.1.1"
csv2 = {}
csv2 ["example.com".] = "db.example.com"
</pre>

Se dangling CNAME não é problema para uma determinada configuração, ou se foi
resolivido através dos exemplos anteriores, as advertências sobre dangling 
CNAME podem ser desabilitadas adicionando o seguinte num arquivo mararc:

<pre>
no_cname_warnings = 1
</pre>

<A name=local>
<h3>Um erro de digitação pode causar um registro dangling CNAME</h3>
</a>

Um erro de digitação também pode causar um registro de dangling CNAME.
Por exemplo: 

<pre>
www.example.com. CNAME hoost1.example.com.
host1.example.com. A 10.1.2.3
</pre>

Aqui, nós cometemos um erro no registro CNAME; pretendíamos digitar
"host1.example.com" mas digitamos "hoost1.example.com." . Nós também
podemos adquirir um CNAME oscilando deste modo:
 
<pre>
www.example.com. CNAME host1.example.com.
hoost1.example.com. A 10.1.2.3
</pre>

Ou por um erro no arquivo arquivo <TT>mararc:</TT> 
 
<pre>
csv2 ["exammple.com".] = "db.example.com"
</pre>

(Nós digitamos exammple.com quando nós deveríamos ter digitado "example.com") 

<P>

Seguido por um arquivo de zona que se parece: 

<pre>
www.example.com. CNAME host1.example.com.
host1.% A 10.1.2.3
</pre>

Desde que o % se expandirá a "exam<B>m</B>ple.com" em vez de "example.com." 
 
<P>
Em todos estes casos, os avisos de dangling CNAME desapareceram quando o erro
for encontrado e corrigido.
 
</BODY>
</HTML>

