Jump to content
Александр Рыжов

Защита от перехвата DNS-трафика с помощью dnscrypt-proxy

Recommended Posts

Если ваш провайдер перехватывает\логирует\подменяет DNS-запросы или вы просто хотите обезопасить DNS-трафик, то вам может изложенное ниже решение, основанное на использовании dnscrypt-proxy.

Установите необходимые пакеты:

opkg install fake-hwclock dnscrypt-proxy iptables ndmq
 

При запросе о предпочитаемом сервере dnscrypt просто нажмите Enter.

Поместите в файл /opt/etc/ndm/netfilter.d/010-intercept-dns.sh следующее содержимое:

#!/bin/sh

[ "$table" != "nat" ] && exit 0

lan_ip=$(ndmq -p 'show interface Bridge0' -P address)

iptables -t nat -I PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination $lan_ip:65053
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 53 -j DNAT --to-destination $lan_ip:65053
 

и сделайте скрипт исполняемым:

chmod +x /opt/etc/ndm/netfilter.d/010-intercept-dns.sh
 

Далее, отредактируйте стартовый скрипт /opt/etc/init.d/S09dnscrypt-proxy, заменив в нём строчку

ARGS="--local-address=127.0.0.1:65053 --daemonize -R cisco"
 

на

ARGS="--local-address=$(ndmq -p 'show interface Bridge0' -P address):65053 --daemonize -R cisco"
 

И перегрузите роутер из веб-интерфейса. Всё!

 

Диагностика проблем:

 

0. Убедитесь, что на ПК не прописаны вручную в св-вах сетевого соединения сторонние DNS-серверы. Если вы в сетевых настройках ПК ничего не меняли, то можете это не проверять.

1. Очистите DNS-кеш операционной системы (для Windows - ipconfig /flushdns)

2. Очистите DNS-кеш браузера, достаточно его закрыть и открыть по новой.

3. Перейдите по этой ссылке.

Как это работает:

Скрытый текст

С помощью правила iptables любые DNS-запросы от роутера (и его клиентов) «заворачиваются» на dnscrypt-proxy. Последний шифрует DNS трафик, для провайдера трафик выглядит как HTTPS. С настройками по умолчанию для разрешения DNS-имён будет использоваться сервер OpenDNS, на сегодняшний день это сервис принадлежит компании Cisco. Можно выбрать сервер поближе к себе, на этапе установки пакета выбрав сервер из предлагаемого списка.

Зачем нужен пакет fake-hwclock:

Скрытый текст

 

На борту роутера нет часов реального времени. Этот пакет записывает системную дату роутера в процессе выключения и устанавливает её при следующем старте. Если этого не делать, то возможен следующий deadlock:

1. dnscrypt-proxy не может начать работать, т.к. срок действия полученного им сертификата будет в будущем.

2. NTP-клиент не может установить правильную системную дату, т.к. не сможет разрешить DNS-имя ntp.pool.org (или другое).

 

Что теряем при использовании этого решения:

Скрытый текст

 

1. Теряем возможности встроенного в прошивку DNS-сервера/прокси. В частности, возможность кеширования DNS-запросов на роутере и возможность обращения к ресурсом локалки по DNS-именам. Если нынче DNS-запросы и без того замечтательно кешируются операционкой ПК и браузером, то разрешение DNS-имён в локалке может стать проблемой. Скажем, придётся обращаться к NAS'у в локалке не по имени \\MyNas\, а по IP: \\192.168.1.4\.

2. В связи с тем, что мы отказываемся от провайдерских DNS-серверов, мы теряем возможность разрешения DNS-имён для локальных ресурсов провайдера. Если для установления L2TP/PPTP-соединения сервер задан DNS-именем, например, l2tp.beeline.ru, то лучше вписать в веб-интерфейс кинетика адрес сервера в виде ip.

3. Теряем в скорости работы DNS-резолвинга. Чем ближе к роутеру находится DNS-сервер, тем быстрее разрешаются DNS-имена. Отказ о провайдерского DNS и накладные расходы на шифрования трафика увеличивают время резолвинга. IMHO, этим можно принебречь. Скажем «Ростелеком» не брезгует отдавать клиентам по DHCP вместе со своими, DNS-серверы Гугла.

 

 

Edited by Александр Рыжов
  • Thanks 1
  • Upvote 1

Share this post


Link to post
Share on other sites

Большое спасибо за решение.

Столкнулся с проблемой - если в настройках выбрать, например, московский сервер OpenNIC - в логе видим:

Mar 05 12:28:51dnscrypt-proxy[347]
Unable to retrieve server certificates

Естественно, ничего не работает.

Share this post


Link to post
Share on other sites

При настройке выводится список известных на момент правки исходников список рабочих серверов dnscrypt. Что отнюдь не гарантирует их работоспособности в будущем.

Share this post


Link to post
Share on other sites
При настройке выводится список известных на момент правки исходников список рабочих серверов dnscrypt. Что отнюдь не гарантирует их работоспособности в будущем.

Выходит, каждый раз, когда нужно обновить данный список, нужно пересобирать приложение? Возможности указать список серверов в отдельном конфиге не предусмотрено?

Share this post


Link to post
Share on other sites
Выходит, каждый раз, когда нужно обновить данный список, нужно пересобирать приложение? Возможности указать список серверов в отдельном конфиге не предусмотрено?
Нет, пересобирать не нужно.

Есть возможность. Указанный в стартовым скрипте сервер — один из списка /opt/share/dnscrypt-proxy/dnscrypt-resolvers.csv. Дописывайте в список свой сервер или указывайте все параметры нового сервера прямо в стартовом скрипте. В дкументации dnscrypt-proxy всё расписано.

Share this post


Link to post
Share on other sites

файл с указанным именем надо создать по указанному пути, вставить приложенный код и сделать файл исполняемым

Share this post


Link to post
Share on other sites

А зачем вешать dnscrypt на другой порт и перехватывать через iptables, если можно сделать opkg dns-override и повесить на 53 порт?

  • Thanks 2

Share this post


Link to post
Share on other sites
А зачем вешать dnscrypt на другой порт и перехватывать через iptables, если можно сделать opkg dns-override и повесить на 53 порт?
dns-override существовал не всегда. Эта инструкция была сделана несколько раньше.

Share this post


Link to post
Share on other sites
А зачем вешать dnscrypt на другой порт и перехватывать через iptables, если можно сделать opkg dns-override и повесить на 53 порт?

А для того, чтобы повесить dnscrypt на 53 порт нужно в стартовом скрипте /opt/etc/init.d/S09dnscrypt-proxy заменить строчку

ARGS="--local-address=127.0.0.1:65053 --daemonize -R cisco"

на

ARGS="--local-address=$(ndmq -p 'show interface Bridge0' -P address):[color=#FF0000]53[/color] --daemonize -R cisco" 

?

Если так, то с портом 53 dnscrypt не стартует.

/opt/etc/init.d/S09dnscrypt-proxy start

выдает ошибку.

  • Thanks 1

Share this post


Link to post
Share on other sites

Доброго времени суток! Вы конечно здесь все такие грамотные, и скорее всего разъясните мне, что я делаю не так! Прошивок кучу перепробовал... Команды в телнете ваши пишу, а в результате вот такая лажа:fuynya.jpg

Share this post


Link to post
Share on other sites
12 минуты назад, advokat сказал:

Доброго времени суток! Вы конечно здесь все такие грамотные, и скорее всего разъясните мне, что я делаю не так! Прошивок кучу перепробовал... Команды в телнете ваши пишу, а в результате вот такая лажа:fuynya.jpg

Для начала вам нужна флешка и http://forum.keenetic.net/topic/221--entware-keenetic/

Share this post


Link to post
Share on other sites

Можно ли вместе с защитой от перехвата DNS-трафика применить блокировку рекламы на роутере из темы http://forum.keenetic.net/topic/139-блокировка-рекламы-на-роутере/? Содержимое скрипта  /opt/etc/ndm/netfilter.d/010-intercept-dns.sh одинаковое. Но что-то у меня реклама не блокируется. Адреса серверов в фале  /opt/etc/dnsmasq.conf указал от OpenDNS. 

Share this post


Link to post
Share on other sites
В 19.11.2016 в 12:28, Khaninea сказал:

Можно ли вместе с защитой от перехвата DNS-трафика применить блокировку рекламы на роутере из темы http://forum.keenetic.net/topic/139-блокировка-рекламы-на-роутере/? Содержимое скрипта  /opt/etc/ndm/netfilter.d/010-intercept-dns.sh одинаковое. Но что-то у меня реклама не блокируется. Адреса серверов в фале  /opt/etc/dnsmasq.conf указал от OpenDNS. 

Да. Тогда Ваш dnsmasq.conf должен выглядеть вот так

p.s. порт #40 приведен в примере "информационно" , если вы используете, например, dnscrypt-proxy, то тогда порт должен быть 65053 

no-resolv

server=127.0.0.1#40

listen-address=127.0.0.1

 

Edited by Dorik1972
Добавил разъяснение по порту !!!
  • Thanks 1

Share this post


Link to post
Share on other sites
5 часов назад, Dorik1972 сказал:

Да. Тогда Ваш dnsmasq.conf должен выглядеть вот так

no-resolv

server=127.0.0.1#40

listen-address=127.0.0.1

Увы, что-то не получается. Реклама продолжает "сыпаться"

Share this post


Link to post
Share on other sites
3 часа назад, Khaninea сказал:

Увы, что-то не получается. Реклама продолжает "сыпаться"

Тут вопрос "философский" .... в логе на устройстве dnsmasq стартует ? hosts "затягивает"? .... pidof dnsmasq выдает номерок процесса? + попробуйте эту "таблетку" - 

  И что такое сыпаться ? Кто сказал что сей метод "наглухо" убьет всю рекламу :???: .... Идеология такова что если "попадаются" некие "рекламодатели" перечисленные в файле hosts ... то да ... Иначе .... постигайте силу "ненавязчивого" маркетинга ... Вообще сие есть аналог, например AdAway, под андроид - http://4pda.ru/forum/index.php?showtopic=275091 (кстати из нее можно почерпнуть адреса получения всегда актуальных и пополняемых hosts) ну и иже с ними

p.s. А по поводу совместного и правильного использования и настройки DnsCrypt читать в первоисточнике -> https://wiki.archlinux.org/index.php/DNSCrypt

p.s.s.  А так чтоб максимально "прибить" рекламку - пользуемся в браузере плагинами типа AdGuard и Ghostery :)

Edited by Dorik1972
  • Thanks 2

Share this post


Link to post
Share on other sites

После установки последней тестовой прошивки 2.09 (Версия 2.09.A.3.0-0) dnscrypt-proxy больше не проходит проверку здесь:   https://www.opendns.com/welcome/

По логу прошивки всё в порядке, сервис работает. До этой прошивки проверку dnscrypt проходил без проблем. Может кто что подскажет.

Share this post


Link to post
Share on other sites
2 минуты назад, SigmaPlus сказал:

После установки последней тестовой прошивки 2.09 (Версия 2.09.A.3.0-0) dnscrypt-proxy больше не проходит проверку здесь:   https://www.opendns.com/welcome/

По логу прошивки всё в порядке, сервис работает. До этой прошивки проверку dnscrypt проходил без проблем. Может кто что подскажет.

Такая же ерунда, а вы по новой пробовали устанавливать Entware и все остальное?

Share this post


Link to post
Share on other sites

Господа, смотрите последние буг репорты.

Скрипты из netfilter.d не работают.

Если у вас сделано через перенаправление 53го порта а не через dns-override, то вы сейчас сидите через встроенный в прошивку dns proxy.

 

Edited by r13
  • Thanks 4

Share this post


Link to post
Share on other sites
On 23.04.2016 at 4:11 PM, Александр Рыжов said:
KorDen said:
А зачем вешать dnscrypt на другой порт и перехватывать через iptables, если можно сделать opkg dns-override и повесить на 53 порт?

dns-override существовал не всегда. Эта инструкция была сделана несколько раньше.

Подскажите, а где конфиг основной от dnscrypt-proxy ?

Хочу запилить проброс на локальные DNS для локальных доменов.

Share this post


Link to post
Share on other sites
20 minutes ago, Александр Рыжов said:

Все параметры передаются при запуске в /opt/etc/init.d/S09dnscrypt-proxy.

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

Или хотя бы намекните, как это можно реализовать )) Я уже отчаялся, и уже готов идти покупать для этого отдельный роутер (для dnscrypt) (((

Edited by cocojambo

Share this post


Link to post
Share on other sites

Никак: dnscrypt-proxy служит для совсем других целей. Он не кеширует запросы, не ведёт списки исключений и не обслуживает зоны. Поэтому его целесообразно использовать как апстрим для dnsmasq, bind или другого DNS-сервера, обслуживающего локалку.

Share this post


Link to post
Share on other sites
В 19.11.2016 в 13:28, Khaninea сказал:

Можно ли вместе с защитой от перехвата DNS-трафика применить блокировку рекламы на роутере из темы http://forum.keenetic.net/topic/139-блокировка-рекламы-на-роутере/? Содержимое скрипта  /opt/etc/ndm/netfilter.d/010-intercept-dns.sh одинаковое. Но что-то у меня реклама не блокируется. Адреса серверов в фале  /opt/etc/dnsmasq.conf указал от OpenDNS. 

У меня аналогичный вопрос.У кого нибудь получилось решить эту проблему? Изменил настройки  dnsmasq.conf  на 

no-resolv

server=127.0.0.1#65053

listen-address=127.0.0.1

К моему сожалению не помогло:(( Роутер Giga 3 установлено entware-3x.До сего момента блокировка рекламы отлично работала, прекрасно выручала при просмотре роликов youtube на телевизоре. Жду вашего совета уважаемые форумчане!

Edited by vlad

Share this post


Link to post
Share on other sites
В 03.03.2017 в 16:22, vlad сказал:

У меня аналогичный вопрос.У кого нибудь получилось решить эту проблему? Изменил настройки  dnsmasq.conf  на 

no-resolv

server=127.0.0.1#65053

listen-address=127.0.0.1

К моему сожалению не помогло:(( Роутер Giga 3 установлено entware-3x.До сего момента блокировка рекламы отлично работала, прекрасно выручала при просмотре роликов youtube на телевизоре. Жду вашего совета уважаемые форумчане!

Никого больше не интересует этот вопрос ?

Edited by vlad

Share this post


Link to post
Share on other sites
В 07.03.2017 в 22:49, vlad сказал:

Никого больше не интересует этот вопрос ?

Dnsmasq.conf

server=127.0.0.1#65053
no-resolv
addn-hosts=/opt/tmp/hosts0

Запуск dnscrypt-proxy c вашим DNS сервером или как ниже

... "--local-address=127.0.0.1:65053 --daemonize -R yandex"

Или чуть более подробно что нужно сделать от 08.03.17

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Поправка в Dnsmasq.conf добавить две строчки

Скрытый текст

interface=br0
bind-interfaces

результат до

tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      dnsmasq

tcp        0      0 127.0.0.1:65053         0.0.0.0:*               LISTEN      dnscrypt-proxy
tcp        0      0 :::53                   :::*                    LISTEN      dnsmasq
udp        0      0 127.0.0.1:65053         0.0.0.0:*                           dnscrypt-proxy
udp        0      0 0.0.0.0:53              0.0.0.0:*                           dnsmasq
udp        0      0 0.0.0.0:32836           0.0.0.0:*                           dnscrypt-proxy
udp        0      0 :::53                   :::*                                dnsmasq

после

tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      dnsmasq
tcp        0      0 192.168.1.1:53      0.0.0.0:*               LISTEN      dnsmasq
tcp        0      0 127.0.0.1:65053         0.0.0.0:*               LISTEN      dnscrypt-proxy
tcp        0      0 ::1:53                  :::*                    LISTEN      dnsmasq
udp        0      0 127.0.0.1:65053         0.0.0.0:*                           dnscrypt-proxy
udp        0      0 127.0.0.1:53            0.0.0.0:*                           dnsmasq
udp        0      0 192.168.1.1:53      0.0.0.0:*                           dnsmasq
udp        0      0 0.0.0.0:32836           0.0.0.0:*                           dnscrypt-proxy
udp        0      0 ::1:53                  :::*                                dnsmasq
 

Разница контроль 53 порта.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...