tcp-upstream em unbound não funciona. Use o TCP para servidores DNS de consulta a montante realmente funciona no mundo real?

3

Hoje eu tenho jogado com algumas opções no unbound.conf apenas por diversão. Eu habilitei tcp-upstream mas não funciona com alguns domínios.

SO: OpenBSD atual. Não consolidado: 1.4.19

Exemplos com tcp-upstream ativado:

--> dig www.google.com  

; <<>> DiG 9.4.2-P2 <<>> www.google.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30362
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         43200   IN      A       173.194.34.210
www.google.com.         43200   IN      A       173.194.34.212
www.google.com.         43200   IN      A       173.194.34.211
www.google.com.         43200   IN      A       173.194.34.209
www.google.com.         43200   IN      A       173.194.34.208

;; Query time: 579 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Feb 20 01:01:54 2013
;; MSG SIZE  rcvd: 112

--> dig www.facebook.com  

; <<>> DiG 9.4.2-P2 <<>> www.facebook.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 48116
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.facebook.com.              IN      A

;; Query time: 4529 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Feb 20 01:02:05 2013
;; MSG SIZE  rcvd: 34

/var/log/messages mostra este erro para a consulta do facebook:

unbound: [29654:0] error: tcp connect: Connection refused

Com o tcp-upstream desativado:

--> dig www.facebook.com  

; <<>> DiG 9.4.2-P2 <<>> www.facebook.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50721
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.facebook.com.              IN      A

;; ANSWER SECTION:
www.facebook.com.       43200   IN      CNAME   star.c10r.facebook.com.
star.c10r.facebook.com. 43200   IN      A       173.252.101.26

;; Query time: 692 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Feb 20 01:06:20 2013
;; MSG SIZE  rcvd: 74

Eu acho que o problema é que alguns servidores não permitem clientes tcp. Alguns solução alternativa para este problema? É o tcp-upstream realmente utilizável no mundo real?.

Eu sei que o UDP é um protocolo melhor para o DNS. Não preciso de resposta como "use UDP". Só estou perguntando sobre esse problema com o DNS sobre TCP e se isso é confiável no mundo real.

    
por Rufo El Magufo 20.02.2013 / 02:58

3 respostas

2

O DNS trabalha com pequenas mensagens e respostas na maioria das vezes (basta fazer um respingo de consultas aleatórias e pensar no espaço necessário para uma representação compacta da consulta e da resposta). Para isso, o UDP é ideal (sem custos de configuração / desmontagem da conexão). Algumas consultas têm respostas volumosas (por exemplo, observe a saída de nslookup -query=any google.com ), que não se encaixam em um datagrama UDP mínimo. São perguntados e respondidos sobre o TCP.

    
por 20.02.2013 / 03:40
2

Com a disponibilidade do EDNS ( link ), a maioria das consultas DNS, incluindo IPv6 e DNSSEC, pode ser respondida usando o UDP. Portanto, muitos provedores de servidor não permitem conexões de entrada para a porta TCP 53. O uso de TCP é geralmente restrito a transferências de zona.

Portanto, se você está planejando criar um servidor DNS recursivo para clientes locais, ele deve ser baseado em UDP, pois todos os servidores suportam UDP e a maioria não suporta TCP.

    
por 20.02.2013 / 05:39
1

Confira na documentação não vinculada:

   outgoing-num-tcp: <number>
          Number  of  outgoing TCP buffers to allocate per thread. Default
          is 10. If set to 0, or if do_tcp is  "no",  no  TCP  queries  to
          authoritative servers are done.

   incoming-num-tcp: <number>
          Number  of  incoming TCP buffers to allocate per thread. Default
          is 10. If set to 0, or if do_tcp is "no", no  TCP  queries  from
          clients are accepted.
    
por 16.07.2013 / 06:57