4

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

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

Обратите внимание на то, что я буду крайне недоволен тем, кто предлагает:

  • программы для выполнения 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.

9 ответов9

7

Установите 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.

4

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

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

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

Есть много хороших статей по настройке вашего собственного DNS:

3

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

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

options use-vc nameserver 1.2.3.4

Или передайте опцию в среду:

RES_OPTIONS=use-vc firefox

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

2

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

Ты не можешь

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

Средство распознавания операционной системы передает это DNS-серверу.

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

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

08-11-2008 03:20

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

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

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

нет.

-
Пол Викси

Наверное все равно

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

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

1

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

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

1

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

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

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

0

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

0

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .