===[ DNSCrypt ]=== #post-id: 5773-15-24 #original-date: 16.05.2016 Mon #original-time: 3:24 PM #original-day: 5773 #original-host: WinXP Prof SP3 (Build 2600) Я пока всё тестирую, но первые результаты обнадёживают. Итак, некоторое время назад любимая Дальсвязь начала рубить DNS запросы в рандомные периоды времени. Тоесть трафик на какой-нибудь порт 80 идёт как паровоз, а на порт 53 отваливаетя по таймауту. Ситуацию облегчает кэширование DNS (нормальное, а не которое из коробки), а также использование прокси с разрешением на стороне самого прокси, но если всего этого нет, то труба. Со стороны это выглядит так: делаешь «nslookup ya.ru», а тебе возвращают ошибку с пояснением, что произошёл таймаут. В итоге сайты не открываются, могут частично не грузиться страницы, а то и вообще наблюдаются странные глюки с висюками бесконечных скриптов. Мне предложили посмотреть в сторону DNSCrypt. Это такой вариант DNS, не имеющий официального стандарта, который делает запросы не на порт 53, а на порт 443 (как HTTPS) и при этом шифрует трафик. Для работы этого дела нужна программа-прокси на стороне клиента и сервер, который умеет этот протокол. А ещё хорошо бы сделать кэширование DNS, чтобы не гонять зазря трафик. Вообще, DNSCrypt используется в случаях, когда есть опасность перехвата DNS запросов третьей стороной и их модификации. Скажем, какирами или конторой. Но в данном случае я заюзаю эту систему не совсем по назначению. Я буду настраивать всё это под Windows. Никаких и оболочек использовать не буду – всё ручками. Для кэширования буду использовать проверенный лёгкий и быстрый кэширующий сервер Deadwood. 1. Настроим клиент DNSCrypt. Качаем свежую версию программы (https://download.dnscrypt.org/dnscrypt-proxy/LATEST-win32-full.zip) и списка серверов (https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv). Подписи и прочее есть там же (https://download.dnscrypt.org/dnscrypt-proxy/). 2. Распаковываем файлы, скажем, в C:\Utils\DNSCrypt. 3. Заменяем файл dnscrypt-resolvers.csv из архива на тот, что мы скачали отдельно – он свежее. 4. Теперь нам надо выбрать сервер, который будем использовать. Сделать это можно в файле dnscrypt-resolvers.csv или посмотреть красивую табличку здесь (https://github.com/jedisct1/dnscrypt-proxy/blob/master/dnscrypt-resolvers.csv). Я выбрала dnscrypt.eu-dk из любви к Дании. 5. Теперь протестируем клиент. Заходим из консоли с правами администратора в каталог с DNSCrypt и выполняем такую команду: > dnscrypt-proxy.exe -R dnscrypt.eu-dk --test=0 --local-address=127.0.0.1:5053 «dnscrypt.eu-dk» – это сервер, который мы выбрали. Тут может быть «yandex» или «cisco», или что ещё выберет пользователь. «--test=0» – означает, что это просто тестовый запуск с целью проверить сервер. Ничего установлено не будет. «--local-address=127.0.0.1:5053» – значит, что клиент будет слушать порт 5053 на адресе 127.0.0.1, поэтому будет доступен только на локальной машине. Чтобы другие машины в локальной сети могли использовать этот клиент, нужно указать «0.0.0.0:5053». Порт мы используем нестандартный, поскольку порт 53 будет слушать кэширующий сервер и передавать запросы клиенту DNSCrypt. После запуска следует изучить сообщения программы. Если произошла какая-то ошибка, следует посмотреть настройки файрволла или сменить сервер. Програма слушает порт 5053 и отправляет запросы на порт 443. 6. Устанавливаем сервис DNSCrypt. В той же консоли от администратора выполняем: > dnscrypt-proxy.exe -R dnscrypt.eu-dk --install --local-address=127.0.0.1:5053 «--install» говорит о том, что программа должна установить себя как сервис в Windows и запустить. 7. Если потребуется удалить сервис, то делается это такой командой: > dnscrypt-proxy.exe --uninstall Мануал советует так же делать это перед сменой сервера, но можно настроить всё в реестре. 8. Теперь настроим немного сервис. Он хранит настройки в реестре, куда мы и отправимся с правами администратора. Открываем раздел: > HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dnscrypt-proxy\Parameters «ResolverName» – имя сервера, которое мы передавали при установке сервиса. Для смены сервера нужно вписать сюда новое значение. Оставим его пока в покое. Настроим лог, куда будут писаться все домены, запросы на разрешение которых прилетают клиенту. Если такой функционал не нужен, пропускаем этот шаг. Создаём параметр «Plugins» с типом «Мультистроковый параметр» (REG_MULTI_SZ) и пишем в него вот такой текст: > libdcplugin_example_logging.dll,C:\dnscrypt-proxy-resolv.log «C:\dnscrypt-proxy-resolv.log» – это файл, собственно, лога. Не уверена насчёт формата, но, думаю, что стоит задать имя без пробелов и лишних символов. 9. Перезапускаем сервис! > net stop dnscrypt-proxy > net start dnscrypt-proxy 10. Теперь настроим кэширующий DNS сервер Deadwood. Для этого идём на сайт программы (http://maradns.samiam.org/deadwood/stable/) и качаем Windows (win32) версию. 11. Распаковываем файлы, скажем, в C:\Utils\Deadwood. 12. Открываем файл dwood3rc.txt в каталоге программы и заливаем в него конфиг. Можно ручками поправить параметры, но тут я приведу его полностью. > # Forward to local DNSCrypt client > upstream_servers = {} > upstream_servers["."]="127.0.0.1" > upstream_port = 5053 > > # Add bigger timeouts for Dalsvyaz > timeout_seconds = 10 > timeout_seconds_tcp = 10 > > # Hold more cache entries > maximum_cache_elements = 10240 > > # The IP this program has > bind_address="127.0.0.1" > > # The IPs allowed to connect and use the cache > recursive_acl = "127.0.0.1/16" > > # The file containing a hard-to-guess secret > random_seed_file = "secret.txt" > > # This is the file Deadwood uses to read the cache to and from disk > cache_file = "dw_cache_bin" > > # By default, for security reasons, Deadwood does not allow IPs in the > # 192.168.x.x, 172.[16-31].x.x, 10.x.x.x, 127.x.x.x, 169.254.x.x, > # 224.x.x.x, or 0.0.x.x range. If using Deadwood to resolve names > # on an internal network, uncomment the following line: > #filter_rfc1918 = 0 В самом начале у нас настраивается форвардинг запросов на 127.0.0.1:5053, который слушает установленный ранее DNSCrypt клиент. До его ввода там обычно были указаны OpenDNS и гугловские DNS серверы. Параметры «timeout_seconds» и «timeout_seconds_tcp» я указываю на всякий пожарный. По умолчанию таймауты там две и четыре секунды, что неприлично мало для Дальсвязи. Параметр «maximum_cache_elements» задаёт больше ячеек для кэша. По умолчанию там 1024 записи, и старые вытесняются новыми. Не будем жалеть память по пустякам. Остальные параметры описаны в файл Reference.txt, и я не буду их тут пояснять ^^' 13. Устанавливаем сервис! Для этого запускаем файл install.bat с правами администратора. Если что пойдёт не так, программа сообщит. Так же есть лог dwlog.txt, где могут быть подробности. 14. Уже почти готово, но я рекомендую сделать файлик, который будет чистить кэш DNS на всякий пожарный. Назовём его ClearCache.BAT, посместим в каталог Deadwood и запишем вот это: > net stop Deadwood > del dw_cache_bin > net start Deadwood 15. Теперь осталось открыть стевые подключения, либо центр сетей и общего доступа, там найти интерфейс, через который машина подключена к сети и выходит в Интернет, открыть настройки, найти протокол «TCP/IP версии 4» или вроде того. В настройках находим DNS сервер, указываем, что будем использовать собственный и вписываем 127.0.0.1, удалив все прочие, если есть. Сохраняем изменения и выходим. 16. Чтобы случайно не остаться без DNS, стоит настроить перезапуск обоих сервисов при падении. Это очень важно, поскольку по умолчанию оба сервиса при падении ничего не делают, а Deadwood до недавнего времени очень любил вылететь при пропадении Интернета. Открываем администрирование, а там – службы. В списке выбираем каждый («Deadwood DNS cache» и «dnscrypt-proxy»), находим в свойствах действия при сбое и указываем везде «Перезапуск службы». В разных версиях Windows это может делаться по-разному. 17. Готово! Теперь все DNS запросы идут по зашифрованному соединению за бугор, а чтобы было меньше тормозов, всё кэшируется, и лишние запросы вовне не уходят.