DNS играет огромную роль в работе современного интернета. Смотрите ли вы новости на любимом сайте, слушаете музыку онлайн, листаете соцсети — незримо она присутствует повсюду. В статье разбираемся, что такое DNS, для чего нужен DNS-сервер и как это всё работает.
Что такое DNS?
DNS, или Domain Name System, — система доменных имён. Она появилась ещё на заре интернета, тогда для сопоставления IP-адреса и связанного с ним имени использовался простой текстовый файл — HOSTS.TXT. Чтобы с его помощью узнать имя хоста и его адрес для подключения либо занести свои данные, нужно было позвонить в сетевой информационный центр. Когда стало понятно, что это слегка неудобно, появились первые DNS-серверы.
Чтобы понять, зачем нужна система доменных имён, вспомним, что такое Интернет. Формально это просто бесчисленное количество устройств (девайсов, компьютеров, серверов — или, одним словом, хостов), объединённых между собой общим каналом связи — под землёй, под водой, по воздуху. И чтобы эти устройства могли взаимодействовать друг с другом, каждому нужен какой-то уникальный опознавательный знак. Для этого используется Internet Protocol, или, как мы привыкли его называть, IP-адрес.
IPv4: 82.202.175.68
IPv6: 2a00:1450:4010:c08::66
Каждый компьютер или сервер, доступный из Интернета, имеет свой IP. Чтобы подключиться к устройству в сети, вы должны знать его точный адрес.
Дальше — лучше. Перечислите сайты, которые посещаете ежедневно. В каком формате вы помните их? Наверняка это буквенные названия — доменные имена, а не IP-адреса:
- yandex.ru
- vk.com
- habr.com
- и т.д.
Если для подключения к устройству в сети нужен его IP, почему домены тоже работают? Тут как раз вступает в работу DNS, или система доменных имён, главная задача которой (со стороны обычного пользователя интернета) — разрешение символьных доменных имён в цифровые IP-адреса. И иногда наоборот, в зависимости от типа DNS-запроса. Таким образом, DNS помогает по имени домена узнать точный адрес сервера, где он размещён, — можно назвать его телефонным справочником Интернета. Поэтому не будет преуменьшением сказать, что от технологии DNS зависит работа всей глобальной сети.
Для чего нужны DNS-серверы и какие они бывают?
DNS-сервер — это особый тип сервера, который как раз и обеспечивает преобразование доменных имён в соответствующие им IP-адреса. Когда пользователь вводит доменное имя сайта, его компьютер отправляет запрос на DNS-сервер, чтобы получить соответствующий IP-адрес. DNS-сервер отвечает на этот запрос, предоставляя IP-адрес запрошенного доменного имени — так и работает DNS.
DNS-серверы есть у каждого провайдера, они являются фундаментальной частью интернет-инфраструктуры и служат посредниками для установлении связи между различными устройствами в сети. Современная структура DNS похожа на дерево:
- У неё есть корень (root DNS-сервер), где хранится информация о всех серверах следующего уровня. Корень, на самом деле, состоит из нескольких серверов. Корневым сервером DNS заведует IANA — объединение, отвечающее за организацию работы Интернета. При этом отдельные root-серверы могут администрироваться разными компаниями (например, один такой обслуживается Cloudflare).
- Есть ответвления — тот самый следующий уровень, TLD DNS-серверы (top level domain). Они также отвечают за хранение информации о серверах следующего уровня, но уже для отдельных доменных зон:
.RU
,.РФ
,.SU
,.COM
,.NET
и так далее.
Такие серверы могут обслуживаться разными организациями. Например, за обслуживание DNS-серверов зоны.SU
отвечаетRIPN
— Российский НИИ развития общественных сетей, а за обслуживание серверов зон.RU
и.РФ
— Координационный центр национального домена сети Интернет. Все такие организации регистрируются в IANA, и увидеть их можно тут. - Далее идут так называемые авторитативные DNS-серверы. И они уже хранят непосредственно информацию о том, какой адрес какому доменному имени соответствует, а также их DNS-записи (ресурсные записи:
A
,AAAA
,CNAME
,TXT
,MX
и пр.). И такой может развернуть кто угодно — регистратор доменных имён, хостинг-провайдер, даже вы — например, с помощью ISPmanager. - Отдельно можно выделить кэширующие DNS-серверы, или DNS-резолверы. Они выполняют две основных функции: выполняют запросы к вышестоящим DNS-серверам; сохраняют в своей памяти (кэше) результаты таких запросов.
Таким образом, DNS-серверы выполняют сразу несколько важных функций.
- Хранят данные для преобразование доменных имён в соответствующие им IP-адреса.
- Позволяют управлять доменными именами и связанными с ними настройками. Например, можно изменить DNS-записи, чтобы перенаправить трафик на другой сервер. Это делает DNS-серверы незаменимыми инструментами для управления веб-сайтами, почтовыми серверами и другими сетевыми ресурсами.
- Выполняют кэширование информации, чтобы улучшить скорость и эффективность работы сети. Когда DNS-сервер получает запрос на конкретное доменное имя, он временно сохраняет соответствующий IP-адрес в своей кэш-памяти. При повторных запросах на то же самое доменное имя DNS-сервер может использовать информацию из кэша вместо того, чтобы выполнять новый запрос.
Теперь, когда вы знаете, для чего нужны DNS-серверы и какие они бывают, более подробно разберёмся, как работает технология DNS.
Как работает DNS?
Вся магия начинается, когда вы набираете адрес сайта в адресной строке браузера и нажимаете Enter. Например, введём адрес firstvds.ru
- Первым делом браузер проверяет свой кэш — не сохранился ли IP-адрес запрашиваемого ресурса с прошлого подключения. Если адрес найден, браузер выполняет прямой запрос по нему.
- Если адрес не найден, браузер отправляет запрос к встроенному в операционную систему DNS-резолверу. Тот также проверяет свой кэш и кэш ОС. Если адрес найден, он возвращается браузеру.
- Когда адрес в памяти отсутствует, ваш DNS-резолвер отправляет запрос DNS-резолверу интернет-провайдера. Его адрес автоматически прописывается в вашей системе. Также широко распространены резолверы Google — 8.8.8.8 и 4.4.4.4. Резолвер провайдера тоже проверяет свой кэш — не записан ли там адрес запрашиваемого ресурса. Если адрес найден, он возвращается нашему резолверу.
- В ином случае DNS-резолвер провайдера зрит в корень — опрашивает корневые DNS-серверы. Они неявно указаны в любом домене — в виде точки в конце имени, которую мы для упрощения запоминания и работы обычно опускаем:
firstvds.ru[.]
Корневые серверы проверяют у себя наличие информации о введёном имени — точнее, о домене верхнего уровня.RU
. Если информация найдена, корневой сервер возвращает адрес DNS-сервера доменной зоны (TLD DNS-сервера). Если нет — возвращает ошибку: значит, запрошенной зоны не существует. - Получив адрес сервера зоны, резолвер отправляет запрос к нему. Сервер зоны проверяет у себя наличие информации о домене второго уровня —
FIRSTVDS.RU
. Если такой домен существует, TLD-сервер вернёт адрес авторитативного сервера, где хранится информация об этом домене — его ресурсные записи. Если домен не существует — сервер вернёт ошибку: значит, домен не зарегистрирован, ещё не внесён регистратором в реестр либо не делегирован на серверы имён. - Определив адрес авторитативного сервера, резолвер опрашивает его — всё о том же домене второго уровня. Авторитативный сервер проверяет свою базу данных, и, если домен там присутствует, возвращает его IP-адрес — он записан в ресурсной
А
-записи домена (илиAAAA
для IPv6). В некоторых случаях она может отсутствовать — например, удалена вручную по каким-то причинам. Тогда, как и при отсутствии домена в базе, будет возвращена ошибка — резолвер вернётся ни с чем. - Когда адрес нашего домена наконец найден, резолвер провайдера записывает его в свой кэш и передаёт нашему встроенному резолверу. Тот записывает его в свою внутреннюю память и возвращает адрес браузеру. Браузер выполняет прямой запрос к полученному IP-адресу, и начинается загрузка данных сайта — открывается запрошенная страница.
Все эти чудеса занимают несколько мгновений.
На Linux и MacOS путь DNS-запроса до нужного домена можно посмотреть с помощью следующей команды:
dig +trace firstvds.ru
На Linux для работы с dig
в некоторых случаях нужно выполнить установку соответствующего пакета:
Ubuntu и Debian:
apt -y install dnsutils
CentOS:
yum -y install bind-utils
На Windows можно скачать и установить Bind (Tools Only) или воспользоваться онлайн-инструментом, что проще:
Вы увидите весь пройденный запросом путь, начиная с корневых DNS-серверов и заканчивая серверами имён искомого домена:
Кстати, время, которое занимает DNS-запрос, можно измерить. Например, с помощью онлайн-тестов:
tools.pingdom.com — тестирует все показатели скорости сайта, включая и время ответа DNS:
dnsperf.com — очень наглядно отображает время ответа DNS на карте:
Или, если у вас под рукой есть Linux-терминал, с помощью следующей команды:
dig firstvds.ru | grep time
Она покажет время, за которое был выполнен DNS-запрос. Однако нужно помнить, что после первого же запроса полученная информация будет сохранена в кэш. Повторные запросы будут получать информацию оттуда, то есть — гораздо быстрее, чем в первый раз.
Что такое DNS-зона?
DNS-зона — это специальный файл на DNS-сервере, который хранит информацию об одном или нескольких связанных доменах, включая поддомены, почтовые серверы и др. Чтобы добавить в файл информацию о взаимосвязи доменов и IP-адресов, используются DNS-записи.
Типы DNS-записей
DNS-записи, или ресурсные записи DNS, содержат сведения о домене и помогают определить, как он связан с другими сетевыми ресурсами: к какому серверу привязан, на какие серверы имён делегирован, какой почтовый сервер использует и т.д. В технологии DNS существует несколько типов записей, самые распространенные — A, CNAME, MX, TXT и SRV.
Запись A (Address) — в этой записи указывается IP-адрес, который возвращает DNS-сервер в ответ на запрос пользователя. Таким, образом именно А-запись позволяет установить соединение с соответствующим веб-сервером и загрузить запрашиваемый контент.
Запись CNAME (Canonical Name) — позволяет создавать псевдонимы для доменных имен. Вместо того, чтобы указывать прямо на IPv4-адрес, запись CNAME указывает на другое доменное имя. Далее DNS-сервер выполняет дополнительный запрос для получения A-записи и возвращает ее IP-адрес.
Запись MX (Mail Exchanger) — используется для определения почтового сервера, который должен обрабатывать электронную почту для данного доменного имени. Когда отправитель пытается отправить письмо на адрес, соответствующий определенному доменному имени, DNS-сервер использует запись MX, чтобы определить, на какой сервер следует отправить это письмо.
Запись TXT (Text) — предназначена для хранения произвольного текстового содержимого. Её можно использовать для различных целей, например аутентификации, проверки владения доменом или предоставления важных сведений системам, работающих с данным доменным именем.
Запись SRV (Service) — используется для определения расположения конкретной службы или ресурса в сети. Например, она может указывать, на каком сервере находится служба VoIP или какой сервер предоставляет авторизацию в рамках определенного домена. Запись SRV предоставляет подробную информацию о местоположении и настройках службы.
Читайте также: Как изменить DNS-записи домена?
Что влияет на время обновления кэша DNS?
Когда вы обновляете ресурсные записи домена — меняете A
-запись (IP-адрес), NS
(серверы имён), MX
(почтовый сервер) и пр., они начинают отображаться не сразу — обновление занимает от 2 до 72 часов.
Этот срок складывается сразу из нескольких параметров:
- настройки времени кэширования записей (
TTL
, time-to-live). Этот параметр указывается для каждой записи и задаёт, сколько времени запись может храниться в кэше резолвера. Например, при изменении А-записи сTTL 21600
пользователь, который минуту назад был на сайте, будет видеть сайт со старого адреса (или ошибку, если тот не доступен) — так как вместо отправки нового DNS-запроса его резолвер в течение 6 часов будет выдавать значение, сохранённое в кэше. - настройки кэширования интернет-провайдеров. Интернет-провайдеры могут иметь собственные настройки кэширования — соответственно, резолвер провайдера будет выдавать пользователям значение из кэша, пока не будет исчерпан срок жизни записи, заданный провайдером. Тогда при следующем запросе к сайту резолвер провайдера выполнит полный DNS-запрос, тем самым актуализировав информацию в своём кэше.
настройки кэширования регистратора домена. Это в основном относится к NS-записям и смене серверов имён. NS-записи, которые содержат серверы имён, хранятся на DNS-серверах доменной зоны, и их
TTL
определяется там. Разные регистраторы имеют разные настройки, но обычно срок жизни таких записей составляет несколько часов.Вот пример для регистратора Webnames: TTL серверов имён составляет
75598 секунд
или~21 час
.То есть, если мы изменим их, у большинства провайдеров, где имеется закэшированная информация о нашем домене, они обновятся не раньше чем через 21 час.