Созданный ещё в восьмидесятые протокол DNS является одним из столпов современного интернета. К сожалению несмотря на фундаментальную значимость протокол имеет ряд недостатков: трафик между клиентом и сервером никак не шифруется и не подписывается, что позволяет организовывать MITM-атаки: подменять ответы от DNS-серверов и направлять трафик клиентов на поддельные сайты.
В качестве решения в 2011-м году был предложен протокол DNSCrypt: надстройка над стандартным DNS, шифрующая и подписывающая весь трафик между клиентом и сервером. В сети есть некоторое количество публичных серверов с поддержкой DNSCrypt, которые можно свободно использовать и далее будет показано это делать.
Штатной поддержки DNSCrypt пока нет ни в одной операционной системе, потому придётся идти на небольшую хитрость. Этой хитростью является сервис DNSCrypt-Proxy: он выступает в роли локального DNS-резолвера, проксируя все запросы с использованием DNSCrypt ко внешнему резолверу.
В Ubuntu 16.04 DNSCrypt-Proxy можно установить командой:
apt-get install dnscrypt-proxy
Далее нужно открыть файл "/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv" и выбрать из списка резолвер, который вам больше по душе. В таблице указаны как IP-адреса резолвера, так и географическое расположение, компания-владелец и ряд других параметров.
Выбрав публичный резолвер открываем файл "/etc/default/dnscrypt-proxy" и приводим его к виду:
# IP-адрес и порт, на котором будет слушать сервис DNSCRYPT_PROXY_LOCAL_ADDRESS=127.0.2.1:53 # Имя DNSCrypt-резолвера из списка (первый столбец в файле # /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv) DNSCRYPT_PROXY_RESOLVER_NAME=soltysiak # Дополнительные опции DNSCRYPT_PROXY_OPTIONS=""
После этого необходимо перезапустить сервис:
service dnscrypt-proxy restart
По умолчанию сервис "висит" на "127.0.0.1:53". Если это надо изменить то кроме редактирования файла "/etc/default/dnscrypt-proxy" необходимо ещё внести изменения в конфигурацию systemd. Для этого необходимо скопировать файл "/lib/systemd/system/dnscrypt-proxy.socket" в "/etc/init/dnscrypt-proxy.socket", отредактировать последний и далее последовательно выполнить:
systemctl reenable dnscrypt-proxy.socket service dnscrypt-proxy stop service dnscrypt-proxy start
После этого в настройках сетевого соединения в качестве DNS-сервера надо указать адрес "127.0.2.1" и на этом настройка заканчивается. Убедиться что всё хорошо можно командой:
nslookup -type=txt debug.opendns.com.
Важное замечание: не все публичные сервера из списка доступны из любой страны. Кроме того некоторые сервера с момента попадания в список могли перестать существовать. Потому возможно придётся перебрать несколько вариантов не найдётся рабочий резолвер.
На этом всё. Приятной работы!