DNS

27 сентября 2026 · ~14 мин чтения

протокол сеть интернет инфраструктура домены

DNS

DNS (Domain Name System, система доменных имён) — распределённая иерархическая база данных, которая превращает человекочитаемые имена вроде example.ru в IP-адреса и другие служебные записи. Это «телефонная книга интернета», у которой нет одного владельца и одного сервера.

История

До DNS интернет (тогда ещё ARPANET) жил на одном текстовом файле. Он назывался HOSTS.TXT, и его вела вручную одна организация — Network Information Center при Стэнфордском исследовательском институте (SRI-NIC) в Калифорнии. Хочешь добавить свой компьютер в сеть — пишешь письмо в SRI-NIC, там вносят строку «имя — адрес», и раз в какое-то время все администраторы скачивают свежую версию файла. Отголосок этой эпохи до сих пор живёт в каждом компьютере: файл /etc/hosts на Mac и Linux — прямой потомок HOSTS.TXT.

К началу 1980-х это перестало работать. Узлов становилось больше, файл рос, изменения расходились с задержкой, имена конфликтовали, а сервер SRI-NIC захлёбывался от скачиваний. Проблема была классической для централизованных систем: одна точка, которая всё знает, не масштабируется.

DNS — не продукт, а открытый стандарт IETF. Владельца у протокола нет; корневую зону обслуживают 12 организаций-операторов под координацией IANA/ICANN.

Что это такое

Компьютеры в сети общаются по IP-адресам: 94.141.x.x или 2a02:6b8::… для IPv6. Людям такие числа неудобны, а ещё важнее — адреса меняются. Сервер переехал к другому хостеру, и у него новый IP. Если бы все ссылки в мире были записаны числами, каждый переезд ломал бы их. DNS добавляет уровень косвенности (indirection — ссылку через промежуточное звено): ссылки указывают на имя, а имя уже указывает на адрес. Поменял одну запись — и весь мир (со временем) пошёл на новый сервер.

Устроено это как дерево. На вершине — корень (обозначается точкой, её обычно не пишут: example.ru.). Под корнем — домены верхнего уровня (TLD, top-level domain): .ru, .com, .org. Под ними — домены второго уровня, которые покупаешь ты: moysait.ru. Под ними — сколько угодно поддоменов: api.moysait.ru, admin.moysait.ru. Каждый уровень отвечает только за себя и знает, кто отвечает за уровень ниже. Это называется делегированием (delegation — передачей полномочий).

В DNS хранятся не только адреса. Основные типы записей (resource records):

Важное понятие — TTL (time to live, время жизни). У каждой записи есть число секунд, в течение которого ответ можно держать в кэше. TTL = 3600 означает «запомни на час и не спрашивай». Именно TTL отвечает за знаменитое «DNS обновляется до 72 часов» — на самом деле изменения видны тогда, когда истекут кэши.

DNS vs /etc/hosts. Hosts — локальная табличка на одном компьютере, DNS — глобальная распределённая система. Hosts проверяется первым, поэтому им удобно временно «обмануть» свой компьютер при тестировании переезда.

DNS vs DDNS. Обычный DNS рассчитан на то, что адрес сервера меняется редко и руками. Динамический DNS (DDNS) — это сервис, где запись обновляется автоматически, программой, иногда много раз в сутки. Он появился для домашних серверов и роутеров, у которых провайдер выдаёт «плавающий» IP. Примеры: DynDNS (с 1998 года, потом стал частью Oracle), No-IP, DuckDNS — бесплатный сервис, который выдаёт поддомен вида имя.duckdns.org и обновляет его по простому HTTP-запросу с твоим токеном.

DNS vs URL. DNS знает только имя хоста. Всё, что после него — путь /go, параметры ?utm_source=… — DNS не видит и не касается. Это уже работа веб-сервера.

Аналогии из жизни

1. Справочная служба и записная книжка. Ты хочешь позвонить в ресторан «Пушкин». Номера не помнишь — звонишь в справочную, там дают номер, ты записываешь его себе в книжку и дальше звонишь напрямую. Справочная — это DNS-сервер, книжка — кэш, а срок, через который ты решишь «номер мог устареть, спрошу ещё раз» — TTL.

Где ломается: справочная в жизни одна и знает всё сама. В DNS никто не знает всего: твой резолвер ходит по цепочке — сначала к корню, потом к серверу .ru, потом к серверу конкретного домена. И у тебя нет способа «вычеркнуть» чужую записную книжку: если какой-то провайдер закэшировал старый адрес на сутки, ты ничего с этим не сделаешь, кроме как подождать.

2. Адрес на конверте и переезд. Люди пишут письма не на координаты GPS, а на «улица Такая-то, дом 5». Если дом снесли и организация переехала, почта может переадресовывать письма.

Где ломается: в DNS имя привязано не к «зданию», а к договору с регистратором. Если ты переезжаешь не в новое здание, а на новое имя (как с something.duckdns.org на something.ru), DNS тебе ничем не поможет: старое имя продолжит указывать туда, куда указывало. Переадресацию придётся делать самому на уровне веб-сервера (HTTP-редирект 301), и она сработает только для тех, кто вообще ходит через браузер. Робот, у которого старый адрес зашит в настройках, просто продолжит стучаться по старому.

3. Дерево подразделений в большой компании. Секретарь на ресепшене не знает, как зовут стажёра в отделе аналитики, но знает, что за аналитику отвечает директор по развитию. Тот знает руководителя отдела, руководитель — стажёра. Вопрос спускается по дереву, пока не дойдёт до того, кто знает ответ. Это точная модель делегирования.

Где ломается: в компании начальник может сам решить за подчинённого. В DNS вышестоящий уровень не хранит данные нижнего — сервер .ru не знает IP-адреса твоего сайта, он знает только, какие серверы отвечают за твой домен (NS-записи). И если эти серверы недоступны, никто выше не подстрахует: домен просто «пропадёт».

Как это работает

Разберём, что происходит, когда ты впервые за день открываешь https://moysait.ru/go?....

Шаг 1. Локальные проверки. Операционная система сначала смотрит в файл /etc/hosts, потом в свой кэш. Если ответ там есть и TTL не истёк — всё, дальше можно не ходить.

Шаг 2. Stub-резолвер → рекурсивный резолвер. В компьютере живёт маленький «stub resolver» (заглушка), который ничего сам не ищет. Он отправляет вопрос «какой A-адрес у moysait.ru?» на рекурсивный резолвер — сервер, адрес которого тебе выдал роутер или провайдер, либо публичный: Google 8.8.8.8 (с 2009 года), Cloudflare 1.1.1.1 (с апреля 2018), Яндекс 77.88.8.8. Запрос идёт по UDP на порт 53, обычно это один пакет туда и один обратно.

Шаг 3. Рекурсия (если в кэше резолвера ответа нет).

Резолвер → корневой сервер (.):      «moysait.ru?»
Корень   → резолвер:                 «не знаю, спроси серверы .ru, вот их адреса»
Резолвер → сервер зоны .ru:          «moysait.ru?»
Сервер .ru → резолвер:               «не знаю, вот NS-серверы этого домена»
Резолвер → авторитетный NS домена:   «moysait.ru?»
Авторитетный → резолвер:             «A 94.141.x.x, TTL 300»

Авторитетный (authoritative) сервер — тот, кто по-настоящему «владеет» записями зоны. Обычно это DNS-серверы регистратора или хостинга, где ты правишь записи в панели.

Шаг 4. Кэширование. Резолвер запоминает ответ на TTL секунд — и не только финальный, но и промежуточные (где серверы .ru). Поэтому реальные запросы к корню редки: адреса серверов .ru уже у всех в кэше.

Шаг 5. Соединение. Браузер получил IP, открывает TCP-соединение (или QUIC), делает TLS-рукопожатие. Здесь важная деталь: в TLS браузер сообщает серверу имя, к которому хочет подключиться (SNI, Server Name Indication), а в HTTP — заголовок Host. Поэтому на одном IP может жить много сайтов, и nginx по заголовку Host решает, какой из них показать. DNS привёл тебя к зданию, а Host — к нужной квартире.

Про корневые серверы. Их «13» — буквы от A до M. Но это 13 имён, а физических серверов за ними больше тысячи по всему миру (по данным root-servers.org, порядка 1700–1900 инстансов; точное число меняется). Работает это через anycast — один и тот же IP анонсируется из множества точек, и тебя маршрутизирует к ближайшей.

Как работает динамический DNS. У DDNS-сервиса есть свой авторитетный сервер для зоны (например, duckdns.org) и HTTP-API. Программа на твоём сервере или роутере раз в несколько минут делает запрос вида «обнови мой поддомен, вот токен» — сервис видит, с какого IP пришёл запрос, и записывает его в A-запись с маленьким TTL (десятки секунд или минуты). Всё, имя всегда указывает на твой текущий адрес. Под капотом — тот же DNS, просто с автоматическим обновлением.

Главное про смену адреса

Сменить IP под тем же именем — дело одной записи и ожидания TTL. Сменить само имя — это миграция: DNS тут ни при чём, а вот каждая система, куда старое имя было вписано руками (ссылки в рекламе, вебхуки, настройки ботов, CORS, закладки партнёров), должна переехать отдельно.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Все. DNS — один из немногих протоколов, без которого интернет в привычном виде не существует.

Альтернативы и конкуренты

У DNS как у протокола альтернатив в массовом интернете нет, но есть альтернативные подходы и способы доставки:

Когда НЕ стоит использовать

Грабли при переезде домена

Прежде чем выключать старое имя, найди всех, кто в него «вшит»: рекламные ссылки, зарегистрированные вебхуки мессенджеров, адреса мини-приложений в кабинетах платформ, CORS-списки, внешние интеграции и партнёров. Старое имя стоит держать живым и отвечающим (с редиректом или параллельной обработкой) минимум столько, сколько живут эти ссылки.

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера один мой проект переезжал с бесплатного поддомена на DuckDNS на собственный домен .ru: новые рекламные ссылки прошли модерацию Директа, трафик переключился без потерь, а заодно выяснилось, сколько всего завязано на старое имя — вебхук мессенджера, адрес мини-приложения, CORS, тысячи ранее созданных ссылок. Отдельно аудит кода отметил устаревшие скрипты под DuckDNS как кандидатов на удаление.

Краткое резюме