DNS over HTTPS е сигурен DNS. Това означава, че целият DNS трафик е криптиран и скрит в голямото поточно HTTPS трафика. С DNS over HTTPS се подобрява сигурността и поверителността на потребителя в интернет. Нека настроим сигурен DNS в Linux (Debian) и Windows.
Въведение
DNS (Domain Name System)
DNS (Domain Name System) превръща домейнните имена на ресурсите в интернет в съответните IP адреси. Заявките и отговорите на DNS се изпращат в открит текст. Ето например, как лесно може да се прочете домейнното име (adminkin.pro) в заявката и отговора на DNS с помощта на обикновен анализатор на мрежата:

DNS утечка
DNS утечка (DNS leak) е ситуация, при която DNS заявките се изпращат чрез незащитени канали, като разкриват информацията за посетените от потребителя уеб сайтове и домейн имена. В тази ситуация трети страни, като интернет доставчици или злонамерени лица, могат да получат достъп до онлайн активността на потребителя. Това нарушава личните данни и безопасността на потребителя в интернет.
DNS през HTTPS (DoH)
DNS над HTTPS (DoH) е протокол за криптиране на DNS трафика, за да не могат трети страни да интерпретират препратените данни. DoH използва порт 443, който се използва и за всички останали HTTPS трафици (уеб трафик).
Dnscrypt-proxy
Dnscrypt-proxy е кроссплатформен DNS прокси. Повишава сигурността и поверителността, като обменя данни със защитени канали с високо ниво на отдалечени DNS сървъри. Поддържа, сред други, протокола за криптиране на DNS чрез HTTPS с използване на TLS 1.3. Ускорява работата чрез кеширане на DNS отговорите. За повече информация вижте документацията на разработчиците на dnscrypt-proxy в GitHub https://github.com/DNSCrypt/dnscrypt-proxy/wiki.
DNS над HTTPS в Windows
Инсталиране на dnscrypt-proxy
Изтегляме dnscrypt-proxy от разработчиците в GitHub: https://github.com/DNSCrypt/dnscrypt-proxy/releases. Търсим файл с име dnscrypt-proxy-win64-*.zip, изтегляме го и разархивираме.
Стартираме Командния ред на Windows като администратор:

Прехвърляме се в директорията, където разархивирахме dnscrypt-proxy. В моя случай това ще бъде командата:
cd c:\dnscrypt-proxy\win64\
Създаваме конфигурационен файл dnscrypt-proxy.toml:
copy example-dnscrypt-proxy.toml dnscrypt-proxy.toml
Стартираме dnscrypt-proxy:
.\dnscrypt-proxy.exe

Dnscrypt-proxy се стартира на IP адрес 127.0.0.1, на порт 53 и се подготвя да получава заявки както по протокола TCP, така и UDP. DNS резолверите се сортират по забавяне на отговора (вижте изображението по-горе).
Всичко! Dnscrypt-proxy е готов за работа:

Ще проверим как ще се изпълни заявката за разрешаване на домейнното име adminkin.pro на IP адрес. За целта стартираме още един команден ред на Windows (няма нужда от стартиране като администратор), преминаваме в директорията dnscrypt-proxy и въвеждаме командата:
.\dnscrypt-proxy.exe -resolve adminkin.pro
Домейн името adminkin.pro беше разрешен чрез услугата на 127.0.0.1:53, т.е. чрез dnscrypt-proxy. IP адресът на заявения домейн беше успешно получен (77.222.56.16). Разрешаването на DNS работи!

Настройка DNS over HTTPS
За да пренасочим целия DNS трафик: от браузъри, уеб приложения, от самата ОС Windows чрез dnscrypt-proxy, ще променим DNS настройката на мрежовата връзка, чрез която излизаме в Интернет. Ще посочим като IP адрес на DNS сървъра – 127.0.0.1 (IP адрес на dnscrypt-proxy).
В моят случай мрежовата връзка, чрез която излизам в интернет, е Безжична мрежа. Избирам Свойства:

В прозорец Свойства кликвам с мишката върху IP версия 4 (TCP/IPv4), натискам бутона Свойства, след това избирам Използване на следните DNS сървъри и въвеждам 127.0.0.1:

Проверяваме как работи прегледът на уеб страници, изтеглянето на файлове, уеб приложенията, месинджърите – всичко, което може да използва DNS.
Регистрираме dnscrypt-proxy като системна услуга на Windows. Системната услуга на Windows се стартира при зареждане на операционната система и работи в заден план.
В конзолата, стартирана с администраторски права, натискаме комбинацията от клавиши Ctrl + C, за да спрем dnscrypt-proxy.
За да регистрирате dnscrypt-proxy като системна услуга в Windows, в командния ред на стартирана като администратор прозорец, въведете следната команда:
.\dnscrypt-proxy.exe -service install

За да стартирате dnscrypt-proxy, въведете командата:
.\dnscrypt-proxy.exe -service start
Спрете dnscrypt-proxy:
.\dnscrypt-proxy.exe -service stop
Рестартирайте dnscrypt-proxy, например, след като сте променили конфигурационния файл:
.\dnscrypt-proxy.exe -service restart
Отмяна на регистрацията на dnscrypt-proxy като системна услуга в Windows:
.\dnscrypt-proxy.exe -service uninstall
За да проверите дали DNS разрешението работи:
.\dnscrypt-proxy.exe -resolve example.com
Ще направим минимални промени в конфигурационния файл dnscrypt-proxy.toml. За тази цел отворете този конфигурационен файл като текстов файл в който и да е текстов редактор на Windows.
За да използвате само DNS резолвери, които прилагат протокола DNS over HTTPS, деактивираме използването на DNS резолвери, които прилагат протокола DNSCrypt:
dnscrypt_servers = false
За да проверите дали имате връзка с IPv6, можете да посетите уебсайта https://test-ipv6.com/. Дори ако нямате връзка с IPv6, някои приложения задължително ще изпращат DNS заявки за разрешаване на IPv6 адреси. Dnscrypt-proxy може да бъде настроен да дава незабавен отговор „няма IPv6 адреси“, вместо да изпраща заявка към по-високо ниво на DNS резолвера и да очаква безполезен отговор. Настройка за незабавен отговор: „
block_ipv6 = true
Запазваме конфигурационния файл и рестартираме dnscrypt-proxy.
Проверка на работоспособност на DNS over HTTPS.
Първо ще почистим DNS кеш. Стартираме командния ред като администратор и въвеждаме командата:
ipconfig /flushdns
DNS кеш е изчистен.
За да проверим, че целият DNS трафик минава през dnscrypt-proxy, ще спрем dnscrypt-proxy. И ще се уверим, че приложенията, включително уеб браузърите, вече не могат да разрешават DNS имена. Това може да означава, че целият DNS трафик е минавал през dnscrypt-proxy.
За да проверим работоспособността на DNS over HTTPS, ще стартираме захващането на трафика с помощта на мрежов анализатор, като например Wireshark. Ще приложим филтър, за да ни се показват само захванатите DNS пакети. Ще изчакаме известно време и ще се уверим в липсата на DNS пакети, т.е. в липсата на незащитен изходящ трафик.
Ето захванати 243 400 пакета, а от тях незашифровани DNS пакети – 0.

DNS над HTTPS в Linux (Debian)
Инсталиране на dnscrypt-proxy
Изтегляме dnscrypt-proxy от най-новата версия от разработчиците в GitHub: https://github.com/DNSCrypt/dnscrypt-proxy/releases. Търсим файл с име dnscrypt-proxy-linux_x86_64-*.tar.gz, изтегляме го и разархивираме, например, в директорията /opt/dnscrypt-proxy/ (на момента написването на статията, най-новата версия на dnscrypt-proxy беше 2.1.4):
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.4/dnscrypt-proxy-linux_x86_64-2.1.4.tar.gz
mkdir -p /opt/dnscrypt-proxy/ && tar -C /opt/dnscrypt-proxy -xvzf dnscrypt-proxy-linux_x86_64-2.1.4.tar.gz
Прехвърляме се в директорията, където разархивирахме dnscrypt-proxy. В моя случай това ще бъде командата:
cd /opt/dnscrypt-proxy/linux-x86_64/
Създаваме конфигурационен файл dnscrypt-proxy.toml:
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
Проверяваме дали някой от сървисите не слуша нужния за нас порт 53:
ss -lp 'sport = :domain'
„ss
е инструмент за извеждане на информация за мрежовите сокети.“
„-lp
– флаг за извеждане на подробна информация.“
‘'спорт = :домейн'
– това е филтър, който указва за търсене на сокети с определен изходящ порт. В нашия случай това е порт домейн (порт 53), който обикновено се използва за DNS (Domain Name System).’
Ако порт 53 не е зает, изходът от командата ще бъде следният:

Ако порт 53 е зает, трябва да спрете услугата, която го заема, и да я премахнете от автоматичното зареждане. Ако порт 53 е зает от systemd-resolved, тогава командите ще бъдат следните:
systemctl stop systemd-resolved
systemctl disable systemd-resolved
Стартираме dnscrypt-proxy:
./dnscrypt-proxy

Dnscrypt-proxy се стартира на IP адрес 127.0.0.1, на порт 53 и е готов да получава заявки както по протокол TCP, така и по UDP (вижте горната фигура). Зарежда се списък на DNS резолвери с криптиране, тестват се техните наличност и скорост на отговора.
Dnscrypt-proxy е готов за работа:

Настройка DNS over HTTPS
Ще променим системните DNS настройки. Първо ще направим резервно копие на файла /etc/resolv.conf:
cp /etc/resolv.conf /etc/resolv.conf.backup
/etc/resolv.conf може да бъде как файл, така и символична връзка. Затова първо ще го изтрием с командата:
rm -f /etc/resolv.conf
След това ще създадем нов файл /etc/resolv.conf със следното съдържание:
nameserver 127.0.0.1
options edns0
Ще зададем атрибут „само за четене“ (immutable) на файла /etc/resolv.conf. Този атрибут не позволява дори на привилегировани потребители да променят файла и го защитава от случайни или нежелани промени.
chattr +i /etc/resolv.conf
За да премахнете атрибута „само за четене“, въведете командата:
chattr -i /etc/resolv.conf
Ще проверим как ще се изпълни заявката за разрешаване на домейнното име adminkin.pro към IP адреса. Въвеждаме командата:
/opt/dnscrypt-proxy/linux-x86_64/dnscrypt-proxy -resolve adminkin.pro
Името на домейн adminkin.pro беше разрешено чрез услугата на 127.0.0.1:53, т.е. чрез dnscrypt-proxy. IP адресът на заявения домейн беше успешно получен (77.222.56.16). Разрешаването на DNS работи!

Проверяваме работата на преглед на уеб страници, изтегляне на файлове и други дейности в система, където е необходимо разрешение на DNS имена.
Например, можем да получим съдържанието на началната страница на сайта https://adminkin.pro с помощта на инструмента curl от командния ред:
apt install curl
curl https://adminkin.pro
Получихте ли? Супер!
Сега ще регистрираме dnscrypt-proxy като системна услуга на Linux. Системната услуга се стартира при зареждане на системата и работи в фонов режим.
Спираме dnscrypt-proxy, като натиснем комбинацията от клавиши Ctrl + C в терминалното прозорец, където стартирахме dnscrypt-proxy.
За да регистрирате dnscrypt-proxy като системна услуга, въведете командата:
./dnscrypt-proxy -service install
Стартираме dnscrypt-proxy:
./dnscrypt-proxy -service start
За да спрете dnscrypt-proxy:
./dnscrypt-proxy -service stop
Рестартирайте dnscrypt-proxy, например, след като сте променили конфигурационния файл:
./dnscrypt-proxy -service restart
Отмяна на регистрацията на dnscrypt-proxy като системна услуга:
./dnscrypt-proxy -service uninstall
Редактираме конфигурационния файл dnscrypt-proxy.toml по същия начин, както го направихме в Windows (Настройка конфигурационного файла dnscrypt-proxy.toml в Windows). И не забравяме след промяната на конфигурационния файл да рестартираме dnscrypt-proxy.
Проверка на работоспособност на DNS over HTTPS.
Ще проверим работоспособността на DNS over HTTPS. Ще стартираме захващането на трафика с помощта на мрежов анализатор tcpdump:
apt install tcpdump
tcpdump -n dst port 53
Тази команда ще позволи да се заснемат и покажат само пакетите, които минават през порт 53. Така ще уловим незашифровани DNS пакети, ако са останали.
„-n“ означава, че tcpdump няма да извършва обратно DNS разрешаване на IP адреси и портове, а ще ги остави в числов формат.
В нов прозорец на терминала ще стартираме командата за получаване на началната страница на сайта https://adminkin.pro с помощта на утилитата curl:
curl https://adminkin.pro
Ура! Няма незашифровани DNS пакети:

Ако спрете dnscrypt-proxy и възстановите файла /etc/resolv.conf от резервното копие, картината ще бъде различна:

Изводи
Когато въвеждате домейнно име на сайт в адресната лента на браузъра, вашата система изпраща заявка за търсене на IP адреса на този домейн. В този момент, например, вашият интернет доставчик може да регистрира към кой домейн се свързвате. DNS over HTTPS прави този надзор невъзможен, а анонимността и поверителността на потребителя в интернет стават възможни. Благодарение на тази статия, настройката на DNS over HTTPS става възможна.
Много очаквам вашите въпроси в коментарите под статията!
Коментари