
Для многих тема DNS — это что-то вроде «ну и зачем мне это знать». Но случаются ситуации, когда ваши веб-ресурсы вдруг перестают работать. Например, один сайт, важный и нужный, просто не открывается, хотя все остальное грузится нормально. Вот тогда приходится разбираться.
Эта статья не для тех, кто уже знает разницу между рекурсивным и итеративным запросом. Скорее наоборот: для тех, кому это пока ничего не говорит, но кто хочет понять, что к чему. Без лишней теории, по делу.
У каждого сайта в интернете есть два адреса. Один — тот, что вы видите в браузере: google.com, yandex.ru, что угодно. Другой — числовой IP-адрес, например 142.251.154.119. Компьютеры общаются именно через числа, им имена сами по себе ничего не говорят.
DNS-сервер (или сервер доменных имен, от английского Domain Name System) — это и есть тот посредник, который переводит одно в другое. Вы набираете адрес, он находит соответствующий IP и говорит браузеру: «Вот куда идти».
Проще всего объяснить через старую добрую телефонную книгу. Вы помните, что нужно позвонить в пиццерию «Везувий», но не помните номер. Открываете книгу, находите название, звоните по номеру. DNS делает ровно то же самое, только за миллисекунды и миллиарды раз в сутки по всему миру. Каждый раз, когда вы кликаете по ссылке.
Когда вы вводите адрес сайта и нажимаете Enter, начинается небольшое путешествие запроса. Вы его не видите, но оно происходит.
Первая остановка — локальный кэш браузера. Если вы уже заходили на этот сайт недавно, IP-адрес мог сохраниться. Тогда все: запрос никуда дальше не идет, страница открывается сразу. Это самый быстрый вариант.
Нет в кэше, браузер идет к локальному DNS-серверу. Как правило, его адрес прописывает провайдер автоматически: вы никогда это не настраивали, оно просто работало. Локальный сервер тоже смотрит в свой кэш. Нашел ответ — отлично. Нет — отправляет запрос дальше по иерархии.
А иерархия у DNS такая. Есть рекурсивный DNS-сервер, или резолвер, он берет на себя всю беготню между уровнями и в итоге возвращает клиенту готовый ответ. Резолвер обращается к корневым DNS-серверам. Их в мире всего 13 групп (обозначаются буквами от A до M), но за каждой группой стоит целый кластер физических машин. Корневые серверы не хранят записей о конкретных сайтах, они просто говорят: «За зоной .com иди вот туда». Резолвер идет к TLD-серверу зоны .com, тот отправляет его к авторитетному DNS-серверу нужного домена, а у него уже хранится точная запись с IP-адресом хоста. Оттуда ответ идет назад — к резолверу, к локальному серверу, к браузеру.
Весь этот путь локальный сервер тоже кэширует — сохраняет ответ на какое-то время. На какое именно, определяет параметр TTL (Time to Live), который задает владелец домена. Пока запись «живет» в кэше, повторный запрос идет без лишних переходов.
Кстати, запросы бывают двух типов.
Рекурсивный запрос. Клиент говорит «найди мне ответ» и ждет, пока сервер сам все обойдет.
Итеративный запрос. Сервер не ищет сам, он просто подсказывает следующий узел.
На практике ваш браузер всегда делает рекурсивный запрос, а дальше по иерархии серверы уже используют итеративные.
DNS не монолитная база данных, это распределенная система, разбитая на зоны. Каждая зона представляет собой отдельный файл или базу, которой управляет конкретный администратор. Зона .ru, например, в ведении Координационного центра доменов RU/РФ. Зона вашего конкретного сайта — в вашем личном кабинете у хостинг-провайдера или регистратора домена.
Внутри каждой зоны хранятся записи — строчки с информацией разного типа. Вот те, с которыми чаще всего приходится иметь дело:
Зоны делятся на первичные (master) и вторичные. Первичная — оригинал, там администратор вносит правки. Вторичных может быть несколько: они получают копии с первичного и служат подстраховкой на случай сбоя. Для пользователя все это прозрачно, DNS-хостинг управляет этим сам.
Это не риторический вопрос, у него есть вполне конкретные ответы. Причем не теоретические, а из жизни.
Сайт не открывается, хотя интернет есть. Именно один сайт, другие работают. Возможно, ваш провайдер заблокировал его на уровне DNS: запрос уходит, но намеренно не получает ответа. Смена DNS-сервера нередко это лечит, потому что другой сервер такую блокировку не применяет.
Медленная загрузка страниц без явных причин. Торренты не качаются, видео не тормозит, а сайты почему-то работают медленнее, чем обычно. Один из виновников — DNS-сервер провайдера, перегруженный или физически далекий от вас. Публичные DNS-серверы с глобально распределенными узлами нередко отвечают значительно быстрее.
Вопрос приватности. Каждый раз, когда вы открываете сайт, ваш DNS-запрос по умолчанию передается в открытом виде — провайдер видит, куда вы ходите. Часть публичных серверов умеет шифровать эти запросы (DNS over HTTPS или DNS over TLS, DoH/DoT). Это не панацея, но один из способов сократить объем данных, которые о вас собираются.
Защита от вредоносных сайтов. DNS-сервер может сам блокировать обращения к известным фишинговым и рекламным доменам еще до того, как браузер попытается туда подключиться. В корпоративных локальных сетях это один из базовых инструментов защиты, доступный даже без дорогостоящих решений.
Если посмотреть на архитектуру DNS сверху вниз, то на самой вершине — 13 групп корневых серверов. Не 13 машин, это важное уточнение. За каждой буквой (A-root, B-root, … M-root) стоит целый кластер: сотни физических серверов, разбросанных по разным странам и континентам. Запрос автоматически попадает к ближайшему узлу благодаря технологии Anycast. За счет этого система не падает при выходе из строя части оборудования и справляется с нагрузкой, которую сложно даже представить.
Кто этим управляет? ICANN координирует корневую зону в целом, но за каждым из 13 кластеров стоит своя организация. Verisign держит A-root и J-root, NASA — E-root, RIPE NCC — K-root, Университет Мэриленда — D-root и так далее. Актуальный список с картой размещения узлов и статусом каждого сервера можно посмотреть на root-servers.org в открытом доступе.
Что корневые серверы не делают — они не хранят записей о конкретных сайтах. Их задача строго одна: сказать резолверу, к какому TLD-серверу идти дальше в зависимости от доменной зоны. TLD-серверы, в свою очередь, знают, где искать авторитетные серверы конкретных доменов. Те уже хранят финальные записи.
С корневыми серверами вы лично никогда не общаетесь, за вас это делает резолвер. Большинство пользователей вообще не подозревают об их существовании, что и есть признак хорошо работающей системы.
Если совсем упростить, DNS-зона — это ваш личный файл конфигурации для домена. Купили домен, получили зону. В ней прописано все: куда ведет основной адрес, куда отправлять почту, какие псевдонимы работают, какие коды подтверждения заданы для сторонних сервисов.
На практике вы работаете с DNS-зоной чаще, чем кажется. Перенесли сайт на новый хостинг, надо поменять запись A, чтобы домен стал вести на новый IP-адрес. Подключили корпоративную почту через Google Workspace или Яндекс 360, значит добавили или отредактировали запись MX. Верифицировали домен в каком-нибудь сервисе аналитики, значит вставили строку в запись TXT. Все это и есть работа с DNS-зоной, просто об этом мало кто думает именно в таких терминах.
Изменения в DNS не применяются мгновенно. И это нормально, хотя поначалу раздражает. Новые данные должны разойтись по серверам на разных уровнях иерархии. Как быстро, зависит от TTL (Time to Live), значения, которое задает владелец домена для каждой записи. Если TTL маленький, изменения разойдутся за минуты, большой — процесс может затянуться до 48 часов. Именно поэтому при переезде сайта советуют заранее снизить TTL.
Первичная зона (master) находится там, где хранится оригинал данных и куда вносятся изменения. Вторичные зоны — это их копии на других серверах, на случай сбоя. Для рядового пользователя эта механика скрыта за интерфейсом DNS-хостинга, вы просто редактируете записи в панели управления.
Протокол DNS появился в 1983 году. Тогда интернет был совсем маленьким, закрытым и, в общем-то, доверительным. Никто не думал о том, что кто-то будет специально подделывать DNS-ответы. В итоге в базовый протокол не заложили почти никаких механизмов проверки подлинности, и этим до сих пор пользуются.
Самая известная атака — DNS-спуфинг, он же отравление кэша (cache poisoning). Злоумышленник вбрасывает в кэш рекурсивного сервера поддельную запись. После этого все пользователи этого сервера, запрашивающие, скажем, сайт банка, получают не настоящий IP-адрес, а адрес фишинговой копии. Пользователь видит знакомый интерфейс, вводит логин и пароль, и данные уходят не туда. Самое неприятное: браузер в этой ситуации ни о чем не предупреждает, адрес в строке правильный.
DNS-флуд — это когда DNS-серверы просто заваливают огромным количеством запросов. Серверы перегружаются и перестают отвечать. Все сайты, которые на них завязаны, становятся недоступны, хотя сами веб-серверы при этом могут быть живы и здоровы. По сути, это разновидность DDoS, направленная именно на инфраструктуру DNS.
DNS-перехват немного другая история. Вредоносное ПО проникает на компьютер или роутер и тихо меняет адрес DNS-сервера в настройках. После этого все запросы идут через сервер злоумышленника, который может возвращать что угодно. Пользователь об этом не знает, внешне все выглядит нормально.
Хорошая новость состоит в том, что за сорок лет существования DNS люди придумали несколько работающих способов защититься.
|
По данным ICANN, DNSSEC активирован менее чем для 20% доменов в зоне .com. Это означает, что атаки типа cache poisoning технически возможны для подавляющего большинства сайтов, включая вероятно те, которыми вы пользуетесь каждый день. |
DNS-хостинг — это услуга размещения авторитетных DNS-серверов для вашего домена. Не путайте с обычным хостингом для сайта: тут хранятся не файлы, а только DNS-записи домена.
Когда регистрируете домен, регистратор по умолчанию дает вам свои DNS-серверы. Для большинства ситуаций этого вполне хватает. Но если нужно больше — скорость, гибкость, защита — переходят на специализированный DNS-хостинг. Вот почему это имеет смысл:
Из известных вариантов DNS-хостинга можно назвать Cloudflare DNS, AWS Route 53, Google Cloud DNS. Для России актуальны Selectel, REG.RU, Яндекс 360. Выбор зависит от того, где ваша аудитория, каков бюджет и насколько критична скорость.
| На некоторых проектах переезд с DNS-серверов регистратора на специализированный DNS-хостинг с Anycast дает снижение времени резолвинга в 5–10 раз. Для e-commerce с международным трафиком это ощутимо. Для сайта-визитки с аудиторией из одного города — скорее всего, нет. |
Провайдерский DNS работает, и это аргумент. Но если вы читаете эту статью, у вас, вероятно, есть причина задуматься о замене. Вот что сейчас популярно.
DNS Provider Performance Benchmark |
||
|
Filter Parameters: Location = World | Type = Raw Performance | Period = Last 30 days |
||
|
Rank |
DNS Name |
Query Speed (ms) |
|
1 |
Cloudflare |
11,45 ms |
|
2 |
ClouDNS |
12,21 ms |
|
3 |
No-IP |
13,29 ms |
|
4 |
DigitalOcean |
13,48 ms |
|
5 |
Azure |
18,48 ms |
|
6 |
WordPress.com |
19,92 ms |
|
7 |
UltraDNS |
20,01 ms |
|
8 |
Rage4 |
23,23 ms |
|
9 |
Bunny DNS |
23,93 ms |
|
10 |
RcodeZero |
24,06 ms |
|
11 |
Gcore |
24,14 ms |
|
12 |
Vultr |
24,74 ms |
|
13 |
RcodeZero TLD |
24,94 ms |
|
14 |
Gandi |
25,49 ms |
|
Average Query Speed |
19,96 ms |
|
|
Fastest Provider |
11,45 ms |
|
|
Slowest Provider (in top 14) |
25,49 ms |
|
Сравнительная таблица скорости публичных DNS-серверов
Инструкция для Windows 10 и 11. В примере используется Google Public DNS (8.8.8.8 и 8.8.4.4), но адреса можно подставить любые.
Окно свойств IPv4 в Windows 10/11 с заполненными адресами DNS
После смены иногда помогает сбросить DNS-кэш вручную, особенно если сайты еще немного «тупят». Командная строка от имени администратора, команда ipconfig /flushdns. Старые записи уйдут, система начнет работать с новыми настройками чисто.
На Mac все примерно так же, просто интерфейс другой. Подходит для macOS Ventura, Monterey, Sonoma и более ранних версий вплоть до Catalina.
Системные настройки (в Ventura и новее — Системные параметры) → Сеть.
Выберите активное подключение слева (Wi-Fi или Ethernet).
Кнопка Дополнительно (в Ventura — Подробнее).
Вкладка DNS.
Кнопка «+» — введите 8.8.8.8. Еще раз «+» — 8.8.4.4.
ОК → Применить.
Вкладка DNS в системных настройках macOS
Сброс кэша на Mac делается через Терминал: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. Попросит пароль администратора. Перезагружать Mac не нужно, работает сразу.
Linux — это не одна система, а несколько десятков дистрибутивов с разными подходами к управлению сетью. Поэтому одного правильного способа нет. Опишем два наиболее распространенных.
Первый вариант — редактировать /etc/resolv.conf напрямую. Работает в большинстве дистрибутивов, особенно в более старых или минималистичных:
sudo nano /etc/resolv.conf
Добавьте строки: nameserver 8.8.8.8 и nameserver 8.8.4.4
Ctrl+O → Enter (сохранить), Ctrl+X (выйти)
Важный момент: если на системе стоит NetworkManager (это Ubuntu, Fedora и большинство современных десктопных дистрибутивов), resolv.conf перезаписывается автоматически при каждом переподключении к сети. Изменения через nano не сохранятся. В таком случае используйте nmcli:
• nmcli con mod «Имя_подключения» ipv4.dns «8.8.8.8 8.8.4.4»
• nmcli con up «Имя_подключения»
Узнать имя подключения: nmcli connection show.
Второй вариант — через systemd-resolved. Это для Ubuntu 18.04 и новее, а также большинства современных дистрибутивов на базе systemd:
sudo nano /etc/systemd/resolved.conf
В секции [Resolve] добавьте: DNS=8.8.8.8 8.8.4.4 и FallbackDNS=1.1.1.1
sudo systemctl restart systemd-resolved
Сброс кэша: sudo systemd-resolve --flush-caches. На старых системах без systemd: sudo /etc/init.d/dns-clean restart.
Если дочитали до этого места, поздравляю, теперь вы знаете о DNS больше, чем большинство людей, которые пользуются интернетом каждый день. На практике эти знания нужны редко, но когда когда что-то пойдет не так, точно выручат.
Кратко о главном:
Если сейчас все работает и вас устраивает, не надо ничего трогать. Но если интернет ведет себя странно или вы задумываетесь о безопасности, то смена DNS это, пожалуй, одно из самых простых действий с потенциально ощутимым эффектом. Проверьте, займет минут пять.