Oséias Ferreira wrote:
> Estou configurando um servidor DNS, mais para efeito de testes.
> Criei uma zona no afraid (barata.info.tm), e estou tentando colocar o
> meu servidor para resolver esta zona.
> 
> A conexão com a internet se dá através de um roteador linksys, que
> direciona a porta 53(TCP/UDP), para meu servidor DNS (192.168.0.3).
> 
> Internet ----[189.X.X.X<->roteador<->192.168.0.1]----[192.168.0.3 DNS]

Essa configuração é péssima para um DNS autoritativo público. Você tem
apenas um servidor para o domínio? Cadê o servidor secundário/escravo?

Especialmente fazer pacotes UDP cruzarem um roteador doméstico, não se
sabe quais perversões o roteador irá fazer com os pobres pacotes.

Dei uma olhada no seu domínio:

        ~% host -a barata.info.tm
        Trying "barata.info.tm"
        ;; connection timed out; no servers could be reached

Problema 1: servidor inalcançável. Vamos olhar no domínio superior:

        ~% host -a barata.info.tm ns3.afraid.org.
        Trying "barata.info.tm"
        Using domain server:
        Name: ns3.afraid.org.
        Address: 72.20.25.134#53
        Aliases:
        
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5615
        ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
        
        ;; QUESTION SECTION:
        ;barata.info.tm.                        IN      ANY
        
        ;; AUTHORITY SECTION:
        barata.info.tm.         3600    IN      NS      barata.ath.cx.
        
        Received 59 bytes from 72.20.25.134#53 in 232 ms

Problema 2: Não há "cola" do domínio pai (info.tm) para o seu domínio.
Pior ainda, o NS aponta para um hostname em outro domínio. O correto
seria o afraid.org ter o endereço IP do seu NS (ex: ns1.barata.info.tm)
e fornecê-lo junto com a resposta autoritativa do NS.

        ~% host -a barata.ath.cx
        Trying "barata.ath.cx"
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5845
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 4
        
        ;; QUESTION SECTION:
        ;barata.ath.cx.                 IN      ANY
        
        ;; ANSWER SECTION:
        barata.ath.cx.          60      IN      A       189.102.48.89
        
        ;; AUTHORITY SECTION:
        ath.cx.                 86335   IN      NS      ns4.dyndns.org.
        ath.cx.                 86335   IN      NS      ns2.dyndns.org.
        ath.cx.                 86335   IN      NS      ns3.dyndns.org.
        ath.cx.                 86335   IN      NS      ns1.dyndns.org.
        ath.cx.                 86335   IN      NS      ns5.dyndns.org.
        
        ;; ADDITIONAL SECTION:
        ns2.dyndns.org.         86335   IN      A       204.13.249.75
        ns3.dyndns.org.         86335   IN      A       208.78.69.75
        ns4.dyndns.org.         86335   IN      A       91.198.22.75
        ns5.dyndns.org.         86335   IN      A       203.62.195.75
        
        Received 211 bytes from 127.0.0.1#53 in 206 ms

Problema 3: o TTL do seu nameserver (60 segundos) é baixo demais, o que
apesar é de se esperar uma vez que o endereço é dinâmico, e servido pelo
DynDNS.org.

Esses dois últimos problemas já tornam o seu servidor de nomes
extremamente ruim. Testando pelo primeiro problema, um sniffer de rede
mostra que seu servidor não está respondendo pelas requisições recebidas.

Então, prosseguindo:

> As regras do iptables no roteador:
> 
> # iptables -t nat -L
> Chain PREROUTING (policy ACCEPT)
> target     prot opt source               destination
> DNAT       udp  --  anywhere             189.X.X.X      udp dpt:domain
> to:192.168.0.3:53
> DNAT       tcp  --  anywhere             189.X.X.X      tcp dpt:domain
> to:192.168.0.3:53
> ...
> 
> Chain POSTROUTING (policy ACCEPT)
> target     prot opt source               destination
> SNAT       udp  --  192.168.0.0/24      192.168.0.3       udp
> dpt:domain to:192.168.0.1
> SNAT       tcp  --  192.168.0.0/24      192.168.0.3       tcp
> dpt:domain to:192.168.0.1

Opa. Seu roteador é um Linksys hackeado com Linux? Um DD-WRT da vida?

Bom, essas regras estão incompletas. Poste as regras originais
(argumentos passados para o iptables), ou a saída do iptables com -v. Eu
teria que ver quais interfaces as regras na tabela PREROUTING estão
sendo aplicadas (você pode estar dando um tiro no pé sem saber), e sem o
parâmetro -v o iptables não mostra essas colunas. Eu sugeriria não
fornecer porta alguma para o --to da regra DNAT, pois subentende-se que
a porta deverá ser reescrita, o que não é necessário no seu caso.

Já as regras na tabela POSTROUTING estão completamente erradas. Não sei
o que você tentou fazer, mas não faz sentido. O que você deveria ter é
algo parecido com:

        iptables -t nat -A POSTROUTING -o ethX -s 192.168.0.0/24 \
                -j SNAT --to 189.X.X.X

Onde ethX é sua interface de saída para a internet.

> Estou usando views para diferenciar as pesquisas feitas dentro da lan
> e fora (internet).
> (...)
> options {
>         (...)
>         listen-on-v6 { any; };

Está faltando fechar a cláusula "options" aqui.

> view "int" IN {
>         (...)
>         zone "barata.info.tm" {
>                 type master;
>                 file "barata.info.tm-INT";
>                 allow-update { none; };
>         };
>         (...)
> };
> 
> view "ext" IN {
>         (...)
>         zone "barata.info.tm" {
>                 type master;
>                 file "barata.info.tm-EXT";
>                 allow-update { none; };
>         };
>         (...)
> };

Você está servindo zonas *diferentes* para os clientes de dentro e fora
da rede para o mesmo domínio? Alguma razão especial para isso?

> Dentro da rede interna  a resolução funciona normal.
> Quando tento resolver num host na internet:
> 
> dig barata.info.tm @189.X.X.X

Basicamente a mesma coisa que eu vi.

> Porém os logs indicam que:
> 
> 23-Mar-2009 11:13:36.178 queries: client 201.X.X.X#1463: view ext:
> query: barata.info.tm IN A +

Suspeito que seja alguma regra de firewall do roteador ou do servidor
DNS. Como você só postou a tabela "nat", e só um pedaço dela, fica
difícil dizer.

Se eu estiver correto, essa regra deve resolver:

iptables -I FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED

Mas é claro, seria melhor ver como está o seu firewall antes, para saber
se essa regra é sequer relevante,

> tcpdump -i ethX -n proto UDP
> 11:41:52.783267 IP 201.X.X.X.1464 > 192.168.0.3.53: 45124+ A?
> barata.info.tm. (32)
> 11:41:52.785128 IP 192.168.0.3.53 > 201.X.X.X..1464: 45124*- 1/1/0 A
> 189.X.X.X (75)

Esse dump foi tirado no servidor DNS ou no roteador? Por ele tudo indica
que é problema de firewall em um ponto mais adiante na rede. Se o
roteador não tiver conntrack pode ocorrer esse problema também.

> dig barata.info.tm @::1

Isso só mostra que a interface "lo" não está filtrada, o que não é nada
espantoso.

> ;; AUTHORITY SECTION:
> barata.info.tm.         43200   IN      NS      meuhost.noip

Mas isso é ruim. Seu NS fornecido pelo domínio pai difere do NS
fornecido pelo seu servidor autoritativo. Tanto em TTL quanto,
aparentemente, nome também. Isso causa uma confusão imensa.

> Ou seja, não é problema com a view.

*HÁ* um problema com a view. Pelo menos você não deveria estar servindo
zonas diferentes para clientes internos e externos.

> Alguém já implementou um DNS com bind9 atrás de um NAT?
> É necessário outras portas além da TCP/UDP 53?

De entrada, só as portas 53/tcp e 53/udp mesmo. De saída, todas.

> Estou usando slackware 12.2 com bind 9.4.1-P1.
> Não existe nenhuma regra de firewall no DNS.

O problema está parecendo as regras de firewall do roteador.

Abraços,
Juliano.

-- 
Juliano F. Ravasi ·· http://juliano.info/
5105 46CC B2B7 F0CD 5F47 E740 72CA 54F4 DF37 9E96

"A candle loses nothing by lighting another candle." -- Erin Majors

* NOTE: Don't try to reach me through this address, use "contact@" instead.
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a