User Tools

Site Tools


ru:inbox:dnscrypt

DNSCrypt

Компания OpenDNS анонсировала проект DNSCrypt, в рамках которого продвигается новый способ защиты от атак, связанных с модификацией и манипулированием транзитным трафиком DNS. Основная задача DNSCrypt — полное шифрование всего канала связи между клиентом и DNS-сервером. Шифрование DNS-трафика позволит защитить клиента от атак "человек посередине" (MitM), при которых злоумышленник вклинивается в канал связи и притворяется DNS-сервером. Кроме того, шифрование предотвращает наблюдение за трафиком и блокирует активность злоумышленников, связанную с подбором идентификаторов пакетов или отправкой фиктивных DNS-ответов.

Разработку dnscrypt-proxy ведёт Frank Denis jedisct1

Важно помнить, что технология DNSCrypt лишь помогает удостовериться, что получаемые от DNS-сервера ответы действительно отправлены этим сервером, а не подделаны злоумышленником. DNSCrypt не заменит VPN — ваш IP-адрес не маскируется. Если вы используете публичные DNS-серверы, эти серверы будут расшифровывать ваши DNS-запросы (потому что они должны это сделать, чтобы эти запросы обработать). Если вы пытаетесь использовать DNSCrypt, чтобы предотвратить "утечку" DNS-запросов при использовании VPN, то это неудачное решение — вы и так уже доверили свои данные одной компании (VPN-провайдеру), зачем доверять их еще кому-то? Воспользуйтесь DNS-серверами, предоставленными VPN-провайдером.

Установка для архитектуры ar71xx

Воспользуемся сторонним репозиторием пользователя black-roland. Добавляем в файл /etc/opkg.conf источник в зависимости от используемой версии OpenWrt. Для этого выполняем в консоли следующие команды:

Trunk:

cd /tmp
uclient-fetch 'http://exopenwrt.roland.black/exopenwrt.pub'
opkg-key add exopenwrt.pub
echo '/etc/opkg/keys/1a929a1dd62138c1' >> /etc/sysupgrade.conf
echo 'src/gz exopenwrt http://exopenwrt.roland.black/snapshots/trunk/ar71xx/packages/exopenwrt' >> /etc/opkg/customfeeds.conf

Chaos Calmer:

cd /tmp
wget 'http://exopenwrt.roland.black/exopenwrt.pub'
opkg-key add exopenwrt.pub
echo '/etc/opkg/keys/1a929a1dd62138c1' >> /etc/sysupgrade.conf
echo 'src/gz exopenwrt http://exopenwrt.roland.black/chaos_calmer/15.05.1/ar71xx/packages/exopenwrt' >> /etc/opkg.conf

Barrier Breaker:

echo 'src/gz exopenwrt http://exopenwrt.roland.black/barrier_breaker/14.07/ar71xx/packages/exopenwrt' >> /etc/opkg.conf

Несмотря на то, что dnscrypt-proxy уже включён в официальный репозиторий пакетов Chaos Calmer, сборка от black-roland имеет ряд преимуществ: пакеты dnscrypt-proxy и libsodium более свежие (и поддерживают Barrier Breaker), dnscrypt-proxy поддерживает использование эфемерных ключей, procd и позволяет одновременно запускать несколько копий себя (если первый DNS-сервер по каким-либо причинам будет недоступен, система сможет использовать второй, при условии, что оба сервера указаны в /etc/dhcp).

Обновляем список пакетов и устанавливаем DNSCrypt:

opkg update
opkg install dnscrypt-proxy

Тема на форуме

Установка для прочих архитектур

Начиная с Chaos Calmer 15.05, dnscrypt-proxy и libsodium присутствуют в официальном репозитории:

opkg update
opkg install dnscrypt-proxy

Настройка

dnscrypt-proxy

Структура файла /etc/config/dnscrypt-proxy:

config dnscrypt-proxy option address '127.0.0.1' option port '5353' # option resolver 'cisco' # option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv' # option ephemeral_keys '1'

Описание параметров:

Название Тип Значение по умолчанию Описание
address string 127.0.0.1 IP-адрес, на который будет осуществляться прием DNS-запросов от клиентов
port string 5353 Порт, на который будет осуществляться прием DNS-запросов от клиентов
resolver string cisco Имя одного из публичных DNS-серверов, содержащихся в файле, путь к которому указывает параметр 'resolvers_list'. Если эта строка закомментирована или отсутствует, будет использоваться сервер OpenDNS
resolvers_list string /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv Путь к файлу в формате CSV, содержащему информацию о публичных DNS-серверах, поддерживающих DNSCrypt. Поскольку этот список обновляется чаще, чем пакет dnscrypt, имеет смысл (если вы решили использовать сервер, отличающийся от сервера по умолчанию) периодически самостоятельно скачивать свежую копию списка c GitHub и помещать её по указанному пути
ephemeral_keys boolean 0 Усиливает приватность за счёт использования для каждого запроса эфемерного публичного ключа. dnscrypt-proxy из репозиториев OpenWrt не поддерживает эту настройку, поскольку он сильно устарел. Учтите, что использование эфемерного ключа увеличивает нагрузку на процессор (особенно на платформах с архитектурой, отличной от x86). Эта настройка бесполезна с большинством публичных серверов DNScrypt, поскольку они развёрнуты с использованием образов Docker, где по умолчанию выставлен небольшой параметр TTL для сертификатов

Дополнительные опции, при необходимости, указываются в /etc/init.d/dnscrypt-proxy

Обратите внимание: адрес и порт указывают на то, где будет доступен локальный DNS-сервер, а сервер DNSCrypt вы просто выбираете из списка доступных серверов, указываете его имя в строке resolver и раскомментируете строки с именем сервера и путём к списку серверов.

dnsmasq

Настраиваем dnsmasq для использования dnscrypt-proxy на 127.0.0.1:5353

Пример /etc/config/dhcp (полужирным выделены строки, которые необходимо изменить для использования dnscrypt-proxy):

config dnsmasq option domainneeded 1 option boguspriv 1 option filterwin2k 0 option localise_queries 1 option rebind_protection 1 option rebind_localhost 1 option local '/lan/' option domain 'lan' option expandhosts 1 option nonegcache 0 option authoritative 1 option readethers 1 option leasefile '/tmp/dhcp.leases' # option resolvfile '/tmp/resolv.conf.auto' option noresolv 1 list server '/pool.ntp.org/208.67.222.222' list server '127.0.0.1#5353' config 'dhcp' 'lan' option 'interface' 'lan' option 'ignore' '1' config 'dhcp' 'wan' option 'interface' 'wan' option 'ignore' '1'
  • Отключили обработку файла /tmp/resolv.conf.auto, поскольку он указывает dnsmasq использовать DNS-серверы провайдера.
  • Добавили опцию noresolv, которая по тем же причинам отключает обработку файла /etc/resolv.conf.
  • 127.0.0.1#5353 — адрес DNSCrypt из /etc/config/dnscrypt-proxy.
  • /pool.ntp.org/208.67.222.222 добавляет исключение для адреса pool.ntp.org domain, который будет доступен через обычный незашифрованный DNS-канал. DNSCrypt требует, чтобы на устройстве было установлено точное время, иначе сервис DNS работать не сможет, и не будет возможности синхронизировать время. В данном примере для доступа к pool.ntp.org используется сервер OpenDNS. Вы можете использовать любой другой сервер для синхронизации времени и другой публичный DNS-сервер (OpenNIC, Google Public DNS, Яндекс.DNS) или DNS-сервер своего провайдера.
  • Все остальные строки (кроме добавленных выше), содержащие адреса DNS-серверов, следует закомментировать.

Перезапускаем dnsmasq:

Обратите внимание: на маршрутизаторе должно быть установлено точное время.

/etc/init.d/dnsmasq restart

Добавляем DNSCrypt в автозагрузку и запускаем его:

/etc/init.d/dnscrypt-proxy enable
/etc/init.d/dnscrypt-proxy start

Обратите внимание: если dnscrypt-proxy не запускается автоматически после перезагрузки системы, возможно, он пытается запуститься ещё до того, как полностью поднят сетевой интерфейс. Добавьте в /etc/rc.local перед строчкой "exit 0":

sleep 10
/etc/init.d/dnscrypt-proxy start

Проверка работоспособности

Очищаем кэш DNS на клиентских машинах

Обратите внимание: Команды должны быть выполнены в командной строке с правами администратора.

Windows ⇒ ipconfig /flushdns

Mac OSX 10.4 (Tiger) ⇒ lookupd -flushcache

Mac OSX 10.5/10.6 (Leopard/Snow Leopard) ⇒ dscacheutil -flushcache

Linux ⇒ sudo /etc/init.d/nscd restart или sudo /etc/init.d/networking restart

Проверяем, используют ли клиенты указанный в /etc/config/dnscrypt-proxy сервер

DNS leak test или DNS randomness test покажут, какой DNS-сервер используют клиентские машины.

Проверяем корректно ли работает dnscrypt-proxy

Самый простой способ — посмотреть системный журнал:

  1. Проверить, что dnsmasq использует только dnscrypt.
    • logread | grep -n "using nameserver"
    • 132:Jan  1 01:01:00 openwrt daemon.info dnsmasq[1883]: using nameserver 208.67.222.222#53 for domain pool.ntp.org
      133:Jan  1 01:01:00 openwrt daemon.info dnsmasq[1883]: using nameserver 127.0.0.1#5353
  2. Проверить, работает ли dnscrypt-proxy.
    • logread | grep "Proxying from"
    • Jul 1 12:00:00 openwrt daemon.info dnscrypt-proxy[1831]: Proxying from 127.0.0.1:5353 to 208.67.220.220:443

При наличии сообщений о подозрительном сертификате проверьте точность даты и времени, установленных на маршрутизаторе.

Также, можно воспользоваться командами ps (список активных процессов) и netstat -lntu (список открытых портов).

ru/inbox/dnscrypt.txt · Last modified: 2016/08/04 16:29 by dartraiden