Утечки DNS, что это такое, как справиться, как проверить, чем грозит.

Преамбула

Крошка юзер пришел к админу, и спросила кроха — VPN себе купил, все равно, бля банят.
Практически реальная история одного юзера, т.е. он купил себе малоизвестный, потому и неизвестный роскомкозлам VPN, пошел почитать kasparov.ru, а получил вот это:

Стали разбираться, VPN абсолютно не российский, сделанный двумя бразильскими рэперами-анархистами, логов не ведет, не является сторонним сервисом, поставляющим чужие услуги, просто пропуская трафик через себя, русских нод выхода нет. Значит, утечка DNS, т.е. VPN-провайдер позволяет использовать другие (кроме локального для провайдера VPN) DNS, а у провайдера прописан глобальный DNS-сервер. У Говнотелекома именно так.

Что такое DNS, объясняю по рабоче-крестьянски.

DNS расшифровывается как Сервер доменных имен. Один хрен, непонятно. Если совсем просто — это телефонный справочник. Или справочная служба. Например, вам хочется позвонить Вербицкому Михаилу Сергеевичу в Москве по такому-то адресу, но номера вы не знаете. Звоните в справочную службу 018, и вам говорят номер.

Сейчас, конечно, нет телефонных служб и телефонных справочников, но представьте себе свой мобильник, мама у вас записана, как «Мамочка», жена, как «Любимка», брат, как «Саня Мелкий», а любовница, как «Иван Михалыч», а рядом с их именем отображается номер телефона.

Интернет изначально не предполагал, что вообще будут какие-то имена сайтов, типа google.com (и вообще он выйдет за границы военного ведомства США), и компьютеры получали IP-адреса, состоящие из цифр с точкой, например google.com имеет IP-адрес 142.251.36.14

Когда интернеты таки вылезли за границы DARPA и стали гражданской технологией, всем стало понятно, что юзверю неудобно набирать кучу цифири в адресной строке, т.е. 142.251.36.14 вместо google.com умные люди придумали систему DNS, т.е. браузер сначала обращается к специальному серверу, который сопоставляет имя сайта, например, того же google.com с его IP-адресом, и все должно заверте…

Дыры в DNS

Минус системы DNS в том, что запросы к DNS изначально не шифруются, соответственно, перехватить запрос и узнать, к какому сайту вы обращаетесь, или даже подменить запрос, и перенаправить на фишинговый сайт может любой, кто знает ваш IP и адрес DNS-сервера. Вторым способом, кстати, провайдеры осуществляли блокировку доступа к забаненным говнокомнадзором сайтам, ну и сейчас, как видите, осуществляют.

Потом, конечно, фатальный недостаток постарались исправить, навешав на старый протокол DNSSEC, который тоже всей беды не решает, DOH или DoT, но один черт, не все сервера поддерживают новые расширения протокола, так что до конца эта беда по-прежнему не решена.

Проверка на утечки DNS (DNS-leaks)

Существует множество онлайн-сервисов, проверяющих утечки DNS, их реально очень много, практически у каждого крупного VPN-провайдера такой есть, есть и не у VPN-провайдеров, а сами по себе. Один из самых популярных https://www.dnsleaktest.com/

Включаете JavaScript в браузере (если выключен) и нажимаете кнопку Extended Test:

Вот, что у меня получилось:

Утекает, но на Запад, что хотя бы не так страшно.

Пробуем другой сервис, например, берем самый первый из запроса «тест утечки DNS», у меня это https://whoer.net/ru/dns-leak-test.

Как и выше, тестирую на офисной машине в своем офисе:

Иерархия запросов DNS

Звучит страшно, но на самом деле все просто, DNS-запрос сначала обрабатывает ОС, установленная на данном компьютере, а потом, все вышеследующие системы по соединению.

Например, представим ситуацию:

1. У вас есть локальный компьютер в квартире.
2. В квартире есть роутер или даже домашний сервер.
3. На сервере подключен VPN-провайдер.

При запросе к сайту (любому), система сначала будет обращаться к локальным (т.е. компьютера) настройкам DNS, если доступ есть, то DNS-запрос будет отправлен на тот адрес, который будет указан в настройках. Если локальные настройки DNS не указаны прямо или не получаются автоматически, то система обратится к соединению с сервером/роутером, и получит настройки от него. Аналогично и сам сервер/роутер — он обратится к DNS-серверу нужного провайдера, конечно, если все настроено правильно.

Соответственно, большинство утечек решаются правильной настройкой DNS на нужных устройствах, на крайний случай, обращением к провайдеру услуг. Если добросовестный, то поправит.

Стандартные варианты конфигурации DNS и шлюза в Windows 7

Можно посмотреть в графическом интерфейсе, и схонфигурировать нужную конфигурацию для Windows 7.

Нужно зайти в Сеть и Интернет —> Сетевые подключения а потом найти основной адаптер, а потом протокол IPv4, и посмотреть как настроено (открыть пункт Протокол Интернета версии 4), теперь нажимаем Свойства и смотрим:

Ага, тут DNS выбирается автоматически.

А вот, как сделано на рабочей машине:

Т.е на иллюстрации видно, что DNS и шлюз не прописаны. Такая конфигурация используется для локального (корпоративного) VPN, где сервер доступен вам из локальной сети, а рабочая станция вообще не может обратиться к Интернету, если соединение с VPN «упадет».

Есть и третий вариант конфигурации — оставляем основной шлюз, например, основного провайдера, но DNS не прописываем. Не самый безопасный вариант, но используется, если VPN-провайдер вне локальной сети, т.е. компьютер связывается с провайдером VPN в Интернете, а тот уже сам назначит DNS-сервера, создав отдельное соединение, а в соединении с основным провайдером, DNS-сервера просто не будут указаны:

Посмотреть конфигурации DNS для всех существующих соединений

Как я уже говорил выше, вышестоящее сетевое соединение (например VPN) может переопределить DNS, потому можно посмотреть DNS для всех существующих соединений через консоль:

ipconfig /all|more

А вот и утечка!

...
Адаптер PPP lainserexp:

   DNS-суффикс подключения . . . . . :
   Описание. . . . . . . . . . . . . : lainserexp
   Физический адрес. . . . . . . . . :
   DHCP включен. . . . . . . . . . . : Нет
   Автонастройка включена. . . . . . : Да
   IPv4-адрес. . . . . . . . . . . . : 172.16.1.122(Основной)
   Маска подсети . . . . . . . . . . : 255.255.255.255
   Основной шлюз. . . . . . . . . : 0.0.0.0
   DNS-серверы. . . . . . . . . . . : 8.8.8.8
                                       10.x.x.x
   NetBios через TCP/IP. . . . . . . . : Включен

Внутренний корпоративный VPN оказался криво настроен — первым DNS-сервером выдает гуглевский 8.8.8.8, а локальный вторым. Звоним администратору, пусть меняет конфигурацию.

Настройки DNS в Linux

Настройки DNS в Linux хранятся в файле /etc/resolv.conf, который представляет собой обычный текстовый файл, потому посмотреть и отредактировать его можно любым удобным текстовым редактором.

Содержимое файла /etc/resolv.conf в котором, например, указаны публичные DNS-серверы Google:

nameserver 8.8.8.8
nameserver 8.8.4.4

Просмотр DNS в Linux

В Linux DNS также может быть изменен сетевым соединением, и тоже есть возможность это проверить.

1. С помощью команды dig

dig google.com

Вывод (оставил только значимый результат):

...
;; ANSWER SECTION:
google.com. 300 IN A 142.251.36.14

;; Query time: 44 msec
;; SERVER: 10.10.0.1#53(10.10.0.1)
;; WHEN: Sat Jul 09 11:57:58 AKDT 2022
;; MSG SIZE rcvd: 55

В строке SERVER указан использованный сервер DNS (10.10.0.1) и порт (53), заодно, можно увидеть и IP-адрес сайта (142.251.36.14)

2. Командой nslookup:

nslookup google.com

Вывод:

Server:         10.10.0.1
Address:        10.10.0.1#53

Non-authoritative answer:
Name:   google.com
Address: 142.251.36.14

Так же виден адрес используемого DNS-сервера и его порт и адрес сайта, к которому обратилась команда.

Потом расскажу, как сделать локальный DNS-сервер в сети или на локальной машине.

Источники

1. Как скрыть Реальный DNS и почему его видно
2. Как мне узнать, какой DNS-сервер использовать?
3. Как узнать IP DNS сервера в Linux

Копии источников в одном архиве (RAR, PDF)