User Tools

Site Tools


ru:inbox:dnscrypt

DNSCrypt

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

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

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

Barrier Breaker:

src/gz exopenwrt http://exopenwrt.and.in.net/barrier_breaker/ar71xx/packages/exOpenWrt

Attitude Adjustment:

src/gz exopenwrt http://exopenwrt.and.in.net/attitude_adjustment/ar71xx/packages

trunk:

src/gz exopenwrt http://exopenwrt.and.in.net/trunk/ar71xx/packages/exOpenWrt

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

opkg update
opkg install dnscrypt-proxy

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

Воспользуемся сторонним репозиторием пользователя damianorenfer. Устанавливаем сертификаты SSL:

mkdir -p /etc/ssl/certs/
wget -P /etc/ssl/certs/ http://curl.haxx.se/ca/cacert.pem
DNSCrypt имеет в зависимостях библиотеку libsodium, устанавливаем её:
cd /tmp
curl -OL --cacert /etc/ssl/certs/cacert.pem https://github.com/damianorenfer/libsodium-openwrt/raw/master/openwrt/bin/x86/libsodium_0.4.5-1_x86.ipk
opkg install libsodium_0.4.5-1_x86.ipk
rm -f libsodium*.ipk
Получаем и устанавливаем пакет dnscrypt-proxy:
cd /tmp
curl -OL --cacert /etc/ssl/certs/cacert.pem https://github.com/damianorenfer/dnscrypt-proxy-openwrt/raw/master/bin/x86/packages/dnscrypt-proxy_1.4.0-1_x86.ipk
opkg install dnscrypt-proxy_1.4.0-1_x86.ipk
rm -f dnscrypt-proxy*.ipk
Учтите, что в качестве порта по умолчанию будет использоваться порт 5353, а не 2053 (как в примерах ниже)! При необходимости, номер порта можно изменить в файле /etc/config/dnscrypt-proxy

Процедура сборки для платформ, отличных от x86, описана в https://github.com/damianorenfer/dnscrypt-proxy-openwrt

Настройка

dnscrypt-proxy

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

config dnscrypt-proxy option address '127.0.0.1' option port '2053' option resolver 'opendns' option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'

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

Название Описание
address IP-адрес, на который будет осуществляться прием DNS-запросов от клиентов
port Порт
resolver Имя одного из публичных DNS-серверов, содержащихся в файле, путь к которому указывает параметр 'resolvers_list'. По умолчанию используется сервер OpenDNS
resolvers_list Путь к файлу в формате CSV, содержащему информацию о публичных DNS-серверах, поддерживающих DNSCrypt

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

dnsmasq

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

Пример /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#2053' 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#2053 - адрес DNSCrypt из /etc/config/dnscrypt-proxy.
  • /pool.ntp.org/208.67.222.222 добавляет исключение для адреса pool.ntp.org domain, который будет доступен через обычный незашифрованный DNS-канал. DNSCrypt требует, чтобы было установлено точное время, иначе сервис DNS не будет работать, и не будет возможности синхронизировать время. В данном примере, для доступа к pool.ntp.org используется сервер OpenDNS. Вы можете использовать любой другой сервер для синхронизации времени и любой другой публичный DNS-сервер (Google DNS, Yandex DNS) или DNS-сервер своего провайдера.
  • Все остальные строки (кроме добавленных выше), содержащие адреса DNS-серверов, следует закомментировать.

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

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

/etc/init.d/dnsmasq restart

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

/etc/init.d/dnscrypt-proxy enable
/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

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

Самый простой способ - взглянуть на логи:

  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#2053
  2. Проверить, работает ли dnscrypt-proxy.
    • logread | grep "Proxying from"
    • Jul 1 12:00:00 openwrt daemon.info dnscrypt-proxy[1831]: Proxying from 127.0.0.1:2053 to 208.67.220.220:443

Ссылки

Источник https://forum.openwrt.org/viewtopic.php?id=36380

Проверяем, используется ли сервер OpenDNS http://www.opendns.com/welcome

ru/inbox/dnscrypt.txt · Last modified: 2014/10/01 11:32 by dartraiden