Как заставить Firefox использовать TCP для DNS

Я хочу использовать TCP для DNS, чтобы обойти медленные и сломанные DNS-серверы моего интернет-провайдера. Я не использую (и не хочу использовать) прокси.

Примечание. Я хочу использовать DNS через TCP, потому что, если я использую его поверх udp, независимо от того, какой сервер я устанавливаю, я получаю ответы от DNS моего ISP.

Заметьте, что я буду отчаянно завышать тех, кто предлагает:

  • Программы для работы с TCP через DNS,
  • Параметр about:config чтобы DNS перешел через прокси: я не использую прокси,
  • Используйте другой DNS: я уже настроил Google как мой DNS, но меня перехватили.

Пример того, что я имею в виду, говоря перехват:

 $ 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 

Если это имеет значение, я использую Firefox 14 на Gentoo Linux.

Если вы используете glibc, вы можете использовать недокументированную опцию use-vc (см. resolv/res_init.c в исходном коде glib), которая вынуждает libc resolver всегда использовать TCP.

Либо установите его глобально в resolv.conf:

options use-vc nameserver 1.2.3.4

Или передайте этот параметр в среде:

RES_OPTIONS=use-vc firefox

Он не будет работать, если приложение выполнит собственную поддержку DNS без использования res_init/res_query/… libc res_init/res_query/… Он работает с Firefox (возможно, до тех пор, пока вы не используете параметр «удаленный DNS» в настройках прокси-сервера SOCKS).

Установите Unbound и просто измените «tcp-upstream: no» на «yes» в файле конфигурации unbound.conf.

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

И для того, чтобы распознать все через восходящий преобразователь, добавьте что-то вроде:

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

Вы также можете использовать dnssec-trigger , удобный пользовательский интерфейс для Unbound, который настраивает его для туннелирования через SSL-соединение.

Один из способов обойти проблему интернет-провайдера – запустить собственный локальный DNS-сервер. Это не особенно сложно для Linux.

Есть предыдущий связанный вопрос, который охватывает некоторые из соответствующих вопросов: что делать, когда интернет-провайдер перехватывает запросы NXDOMAIN? И еще одна статья здесь .

DNSsec ( WikiPedia ) должен устранить эту проблему в долгосрочной перспективе. Также DNSCrypt из OpenDNS исправляет проблему, но только для рабочих станций Mac и Windows.

Существует ряд хороших статей о настройке собственного DNS:

  • Ubuntu
  • Красная Шапка
  • Debian

Заставить Firefox использовать TCP для DNS?

Вы не можете

Firefox не принимает такого решения, он просто вызывает API операционной системы, такой как gethostbyname()

Решитель операционной системы передает это на DNS-сервер.

Вы могли бы подумать, что можете настроить свой собственный внутренний DNS-сервер и настроить его только на использование TCP.

Вот релевантная статья от кого-то , кто , вероятно, знает больше о DNS, чем кто-либо другой.

08.11.2008 03:20

Re [2]: Можно ли заставить BIND использовать TCP исключительно?

«Джо Баптиста» пишет:

Существуют ли какие-либо изменения конфигурации, которые могут быть внесены в BIND, чтобы заставить его использовать TCP исключительно и никогда не использовать UDP? Возможное?

нет.


Пол Викси

Наверное, так или иначе

В теории вы можете найти, написать или изменить DNS-пересылку, которая делает то, что вы хотите.

Теоретически вы можете найти или написать плагин Firefox, который перехватывает и заменяет любые вызовы gethostbyname() с помощью пользовательского кода клиента DNS. Я понятия не имею, позволяет ли это использовать плагиновую архитектуру Firefox, но, возможно, стоит посмотреть.

У меня такая же проблема. Он не имел никакого отношения ни к какой настройке в Firefox, ни к какой настройке в ОС, ни к TCP, ни к UDP. Проблема действительно в маршрутизаторе от вашего интернет-провайдера. Он перехватывает весь трафик «порт 53» и перенаправляет его на DNS-серверы вашего интернет-провайдера. Перенаправление выполняется путем перезаписи как отправленных, так и полученных пакетов (аналогично NAT) таким образом, что вы не можете сказать, что произошло (адрес DNS-сервера в пакетах, по-видимому, тот, который вы намеревались, хотя пакет Действительно пошел на собственный DNS-сервер ISP).

Получите доступ к маршрутизатору (часто с помощью веб-браузера до 192.168.1.1 и ввода имени и пароля), найдите место, где он говорит DNS-сервер, и измените этот адрес с DNS-сервера вашего провайдера на тот, который вы действительно хотите использовать (OpenDNS? Google ? …?).

Конфигурация маршрутизатора почти наверняка заставит себя казаться, что адрес используется только самим маршрутизатором. Вероятно, он ничего не скажет о перехвате или о вашем компьютере. Не верьте этому. DNS-перехват маршрутизаторами предназначен для того, чтобы пользователи SOHO временно обходили фильтрованный DNS, чтобы посмотреть на незаконный сайт, и, как таковой, является большим секретом: минимально документированное его, как правило, кажется, даже не существует.

Используйте dnscrypt + unbound. По умолчанию dnscrypt отправляет запросы DNS на OpenDNS на 443 / udp.

Я не понял способ туннелировать эту службу DNS на другие компьютеры в моей локальной сети. Не работает mothod, а не netcat, socat или udptunnel.

Используйте общедоступные DNS-серверы Google. Они быстрые и надежные. Вот инструкции по их использованию на различных ОС.

Попробуйте заблокировать исходящие DNS-запросы UDP с помощью iptables:

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

Поиск должен быть неудачным для UDP, а затем (надеюсь) повторить попытку с использованием TCP.

В конце концов, вы можете пойти так много пользователей TPB и использовать TOR или VPN-сервис.

  • Это тот же порт, что и клиент и сервер?
  • Как работает функция accept API ()?
  • Как установить интервал прерывания или тайм-аута TCP / IP в Windows XP?
  • Искусственно создать ошибку тайм-аута соединения
  • Действительно простой TCP-клиент
  • Что такое TCP Half Open Connection и TCP half closed connection
  • Общие сведения о переадресации портов и NAT
  • Какова стоимость многих TIME_WAIT на стороне сервера?
  • Могут ли сокеты TCP и UDP использовать один и тот же порт?
  • Как использовать сокет-клиент с WCF (net.tcp)?
  • Мгновенно обнаруживать отключение клиента от серверного сокета
  • Давайте будем гением компьютера.