Como fazer o Firefox usar TCP para DNS

4

Eu quero usar o TCP para DNS, para ignorar os servidores DNS lentos e quebrados do meu ISP. Eu não estou usando (e não quero usar) um proxy.

Nota: Eu quero usar DNS sobre TCP, porque se eu usá-lo sobre o udp, não importa o servidor que eu configurei, eu recebo respostas do DNS do meu provedor.

Repare que eu irei ferozmente votar em quem sugerir:

  • programas para fazer TCP sobre DNS,
  • a configuração em about:config para fazer o DNS passar também pelo proxy: não estou usando um proxy,
  • use outro DNS: já configurei o Google como meu DNS, mas sou interceptado.

Exemplo do que quero dizer ao dizer interceptar:

$ dig @8.8.8.8 thepiratebay.se

; <<>> DiG 9.8.1 <<>> @8.8.8.8 thepiratebay.se
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24385
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;thepiratebay.se.               IN      A

;; ANSWER SECTION:
thepiratebay.se.        28800   IN      A       83.224.65.41

;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 16 22:51:06 2012
;; MSG SIZE  rcvd: 49

$ dig +tcp @8.8.8.8 thepiratebay.se

; <<>> DiG 9.8.1 <<>> +tcp @8.8.8.8 thepiratebay.se
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15131
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;thepiratebay.se.               IN      A

;; ANSWER SECTION:
thepiratebay.se.        436     IN      A       194.71.107.15

;; Query time: 61 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 16 22:51:10 2012
;; MSG SIZE  rcvd: 49

Se for importante, estou usando o Firefox 14 no Gentoo Linux.

    
por miniBill 16.09.2012 / 21:27

9 respostas

3

Se você estiver usando a glibc, você pode usar a opção use-vc não documentada (veja resolv/res_init.c no código-fonte glib) que força o resolvedor da libc a sempre usar o TCP.

Configure globalmente no resolv.conf:

options use-vc nameserver 1.2.3.4

Ou passe a opção no ambiente:

RES_OPTIONS=use-vc firefox

Ele não funcionará se o aplicativo implementar seu próprio suporte para DNS sem usar as funções libc res_init/res_query/… . Está funcionando com o Firefox (provavelmente desde que você não esteja usando a opção "DNS remoto" nas configurações de proxy do SOCKS).

    
por 12.02.2015 / 10:03
7

Instale o Unbound , e apenas altere "tcp-upstream: no" para "yes" no arquivo de configuração unbound.conf.

# upstream connections use TCP only (and no UDP), "yes" or "no"
# useful for tunneling scenarios, default no.
# tcp-upstream: no

E para resolver tudo através de um resolvedor upstream, adicione algo como:

forward-zone:
    name: "."
    forward-addr: 213.154.224.3

Você também pode usar o dnssec-trigger , uma interface de usuário conveniente para o Unbound, que o configura para encapsulamento tudo através de uma conexão SSL.

    
por 20.09.2012 / 09:12
4

Uma forma de contornar o problema do ISP é executar o seu próprio servidor DNS local. Isso não é especialmente difícil no Linux.

Existe uma questão relacionada anterior que abrange alguns dos pontos relevantes: O que fazer quando um ISP intercepta solicitações NXDOMAIN? E outro artigo aqui .

DNSsec ( WikiPedia ) deve remover este problema a longo prazo. Também o DNSCrypt do OpenDNS corrige o problema, mas apenas para estações de trabalho Mac e Windows.

Existem vários artigos interessantes sobre como configurar seu próprio DNS:

por 16.09.2012 / 22:28
2

make Firefox use TCP for DNS?

Você não pode

O Firefox não toma essa decisão, apenas chama uma API do sistema operacional como gethostbyname()

O resolvedor do sistema operacional transfere isso para um servidor DNS.

Você pode pensar que poderia configurar seu próprio servidor DNS interno e configurá-lo para usar somente o TCP.

Aqui está uma postagem relevante de alguém que provavelmente sabe mais sobre o DNS do que qualquer outra pessoa.

08-11-2008 03:20 AM

Re: Is it possible to force BIND to use TCP exclusively?

"Joe Baptista" writes:

Are there any configuration changes that can be made to BIND to force it to use TCP exclusively and never use UDP? Possible?

     

não.

     

-
  Paul Vixie

Provavelmente de qualquer maneira

Em teoria, você pode encontrar, escrever ou modificar um encaminhador de DNS que faz o que você quer.

Teoricamente, você pode encontrar ou escrever um plugin do Firefox que intercepte e substitua qualquer chamada para gethostbyname() com o código do cliente DNS personalizado - não tenho idéia se a arquitetura do plug-in do Firefox torna isso possível, mas pode valer a pena uma olhada.

    
por 17.09.2012 / 12:04
1

Eu tive o mesmo problema. Acabou não tendo nada a ver com qualquer configuração no Firefox, qualquer configuração no sistema operacional ou TCP versus UDP. O problema está realmente no roteador do seu provedor. Ele está interceptando todo o tráfego "porta 53" e redirecionando-o para os servidores DNS do seu ISP. O reencaminhamento é feito reescrevendo os pacotes enviados e recebidos (semelhante ao NAT) de tal forma que você não pode dizer o que aconteceu (o endereço do servidor DNS nos pacotes parece ser o que você pretendia, mesmo que o pacote realmente foi para o servidor DNS do próprio ISP).

Acesse seu roteador (geralmente navegando na web para 192.168.1.1 e digitando um nome e senha), encontre o local em que ele diz servidor DNS e altere esse endereço do servidor DNS do seu ISP para aquele que você realmente deseja usar ( OpenDNS? Google? ...?).

A configuração do roteador quase certamente fará com que pareça que o endereço é usado apenas pelo próprio roteador. Provavelmente não vai dizer nada sobre interceptar ou sobre o seu computador. Não acredite. A interceptação de DNS por roteadores tem a intenção de impedir que usuários SOHO ignorem temporariamente um DNS filtrado para procurar em um site ilícito e, como tal, é um grande segredo: tão minimamente documentado que geralmente parece nem existir.

    
por 29.01.2013 / 19:07
1

Use dnscrypt + unbound. Por padrão, o dnscrypt envia as consultas do DNS para o OpenDNS no 443 / udp.

Eu ainda não descobri uma maneira de encapsular esse serviço de dns para outras máquinas na minha LAN. Nenhum mothod funciona, não netcat, socat ou udptunnel.

    
por 23.03.2013 / 19:17
0

Use os servidores DNS públicos do Google. Eles são rápidos e confiáveis. Aqui estão as rotas para usá-las em vários sistemas operacionais.

    
por 16.09.2012 / 21:35
0

Tente bloquear solicitações DNS de saída do UDP usando iptables:

iptables -A OUTPUT -p udp --dport 53 -j REJECT

A pesquisa deve falhar para o UDP e, em seguida, (esperamos) ser repetida usando o TCP.

    
por 17.09.2012 / 10:27
0

Eventualmente, você pode seguir o mesmo caminho que muitos usuários TPB usam e usar TOR ou um serviço VPN.

    
por 17.09.2012 / 15:38