Когда пользователь вводит адрес сайта в браузере, он видит привычное доменное имя – например, example.ru. Человеку удобно запоминать названия, а компьютеру для подключения к серверу необходим IP-адрес. Возникает вопрос: каким образом браузер понимает, к какому серверу нужно обратиться? За это отвечает DNS-сервер. Он является частью системы доменных имен (Domain Name System, DNS), которая связывает понятные человеку домены с IP-адресами устройств в интернете.
DNS можно сравнить с телефонной книгой. Пользователь знает имя нужного контакта, а система находит соответствующий номер. В случае с интернетом вместо имени человека используется доменное имя, а вместо телефонного номера – IP-адрес сервера. DNS работает практически незаметно для пользователя. Каждый раз, когда мы открываем сайт, отправляем запрос к интернет-сервису или используем приложение, которое обращается к удаленному серверу, система может выполнять DNS-запросы.
Что это такое
DNS – распределенная система, предназначенная для преобразования доменных имен в IP-адреса и обратно, а также хранения другой информации о доменах. Компьютеры взаимодействуют друг с другом по IP-адресам. Например, сервер сайта может иметь адрес IPv4 в формате 192.0.2.1 или IPv6, состоящий из гораздо более длинной последовательности символов. Запоминать такие адреса неудобно, поэтому для интернет-ресурсов используются доменные имена.
Домен состоит из нескольких частей. Например, в адресе www.example.ru:
- .ru – домен верхнего уровня;
- example.ru – домен второго уровня;
- www.example.ru – поддомен example.ru
DNS хранит информацию о том, какие IP-адреса и другие параметры соответствуют конкретным доменным именам. Важно понимать, что DNS –не один конкретный сервер. Это распределенная иерархическая система, в которой участвуют миллионы серверов по всему миру. Они выполняют разные функции и обмениваются информацией между собой. Когда пользователь вводит домен в адресную строку браузера, система должна определить, какой IP-адрес соответствует этому имени. Для этого выполняется DNS-разрешение (DNS resolution).
Упрощенно процесс выглядит следующим образом. Сначала пользователь вводит адрес сайта в браузере. Устройство проверяет, не сохранен ли соответствующий IP-адрес в локальном DNS-кэше. Если нужная информация найдена, повторный запрос к DNS-инфраструктуре может не понадобиться. Если записи нет, запрос передается DNS-резолверу. Резолвер ищет необходимую информацию в кэше или обращается к другим DNS-серверам. В классическом варианте поиск может проходить через несколько уровней:
- Корневой DNS-сервер помогает определить, где искать информацию о нужной доменной зоне.
- Сервер домена верхнего уровня (TLD) указывает, какие серверы отвечают за конкретный домен.
- Авторитетный DNS-сервер содержит актуальную информацию о самом домене и возвращает нужную DNS-запись.
- Полученный IP-адрес передается клиенту, после чего браузер устанавливает соединение с сервером сайта.
На практике пользователь чаще всего взаимодействует не непосредственно с корневыми или авторитетными серверами, а с DNS-резолвером.
Для чего нужны
Главная задача DNS-серверов – обеспечить работу системы доменных имен. Без DNS интернет в привычном для пользователей виде был бы значительно менее удобным: вместо понятных адресов пришлось бы использовать IP-адреса. Однако функция DNS не ограничивается преобразованием домена в IP:
- Преобразование домена в IP-адрес. Это наиболее известная задача DNS. Например, пользователь обращается к example.ru, а DNS помогает определить IP-адрес сервера, на котором находится ресурс. После этого браузер может отправить запрос непосредственно нужному серверу.
- Определение серверов электронной почты. DNS используется не только для сайтов. Специальные записи позволяют определить, какие серверы должны принимать электронную почту для домена. Для этого применяются MX-записи (Mail Exchange). Благодаря им почтовые системы понимают, куда доставлять сообщения, отправленные на адрес вида user@example.ru.
- Настройка поддоменов. DNS позволяет создавать и обслуживать поддомены. Например, сайт может использовать www.example.ru (основной веб-ресурс), shop.example.ru (интернет-магазин), api.example.ru (сервер API), mail.example.ru (почтовый сервис). Для каждого имени можно задать соответствующие DNS-записи.
- Балансировка нагрузки. DNS может использоваться для распределения запросов между несколькими серверами. Например, один домен может указывать на несколько IP-адресов. Это позволяет распределять нагрузку и повышать отказоустойчивость инфраструктуры. Однако DNS-балансировка имеет особенности и не заменяет специализированные балансировщики нагрузки во всех сценариях.
- Перенаправление трафика между инфраструктурами. При переносе сайта на другой сервер достаточно изменить соответствующие DNS-записи. После обновления информации пользователи постепенно начнут обращаться к новому IP-адресу. Именно поэтому DNS является важной частью управления интернет-инфраструктурой компании.
- Повышение надежности и скорости. DNS-резолверы используют кэширование. Если недавно был выполнен запрос к определенному домену, его результат некоторое время хранится в кэше. При повторном обращении не всегда требуется заново проходить всю цепочку DNS-запросов. Это снижает количество обращений к вышестоящим серверам и ускоряет получение DNS-ответа.
Типы DNS-серверов
DNS-инфраструктура состоит из серверов разных типов. Каждый из них выполняет свою задачу.
Рекурсивный DNS-сервер
Получает запрос от клиента и самостоятельно ищет ответ. Например, пользователь хочет открыть сайт и отправляет DNS-запрос на используемый резолвер. Если необходимой информации нет в его кэше, сервер обращается к другим DNS-серверам и проходит необходимые этапы поиска. Рекурсивный сервер фактически выступает посредником между пользователем и распределенной DNS-инфраструктурой. Он может:
- принимать запросы от клиентов;
- хранить результаты в кэше;
- обращаться к корневым серверам;
- взаимодействовать с серверами TLD;
- обращаться к авторитетным серверам;
- возвращать найденный ответ пользователю.
Обычно именно такой сервер используется устройством для выполнения DNS-запросов.
Корневые DNS-серверы
Корневые DNS-серверы (Root DNS Servers) находятся на верхнем уровне иерархии DNS. Их задача не хранить информацию обо всех доменах интернета, а направлять запросы к серверам соответствующих доменных зон верхнего уровня. Например, если запрашивается домен в зоне .ru, корневая инфраструктура помогает определить, где находятся серверы, отвечающие за эту зону. Корневая DNS-система является критически важной частью интернета. Она распределена между большим количеством физических серверов и сетевых узлов по всему миру.
DNS-серверы TLD
TLD-серверы отвечают за доменные зоны верхнего уровня (Top-Level Domain). К ним относятся зоны вроде:
- .ru;
- .com;
- .org;
- .net;
- .uk;
- .de.
TLD-сервер не обязательно хранит IP-адрес конкретного сайта. В первую очередь он знает, какие авторитетные серверы отвечают за нужный домен. Например, при запросе домена example.ru система сначала определяет серверы зоны .ru, после чего получает информацию о DNS-серверах, обслуживающих example.ru.
Авторитетный DNS-сервер
Содержит официальную DNS-информацию о конкретной доменной зоне. Именно здесь находятся записи, определяющие, куда должен направляться запрос к домену. Авторитетный сервер может хранить разные типы записей:
- A – связывает домен с IPv4-адресом;
- AAAA – связывает домен с IPv6-адресом;
- CNAME – задает каноническое имя для другого доменного имени;
- MX – указывает серверы электронной почты;
- NS – определяет авторитетные DNS-серверы домена;
- TXT – позволяет хранить текстовые данные, в том числе используемые для различных настроек и подтверждений;
- SOA – содержит основные параметры DNS-зоны.
Именно авторитетный сервер считается источником достоверной информации о DNS-зоне.
Кэширующий DNS-сервер
Отдельно можно выделить кэширующие DNS-серверы. Они сохраняют полученные ответы на определенное время, которое определяется параметром TTL. Например, если тысячи пользователей запрашивают один и тот же домен, резолверу не обязательно каждый раз обращаться к авторитетному серверу. Пока запись находится в кэше и ее TTL не истек, сервер может вернуть сохраненный результат. Кэширование существенно сокращает количество DNS-запросов и помогает снизить задержки.
Принцип работы DNS
Чтобы понять, как работает DNS, недостаточно представить систему только как базу данных с доменными именами и IP-адресами. DNS имеет распределенную иерархическую архитектуру. Информация о доменах не хранится в одном месте: она распределена между множеством серверов, каждый из которых отвечает за определенную часть пространства доменных имен. Главная задача найти ответ на запрос пользователя и сообщить, с каким IP-адресом или другим ресурсом связано нужное доменное имя.
Сначала браузер и операционная система могут проверить, не была ли информация о нужном домене получена ранее. Если соответствующая запись уже есть в кэше и срок ее действия не истек, IP-адрес можно использовать сразу. Кэширование позволяет ускорить работу сайтов и уменьшить количество повторных запросов. Вместо обращения к нескольким DNS-серверам устройство получает уже известный ответ. Если нужной информации нет в локальном кэше, начинается поиск через DNS-инфраструктуру. Устройство отправляет запрос DNS-резолверу. Это сервер, который принимает запросы от пользователей и выполняет поиск необходимой информации.
Первым уровнем являются корневые DNS-серверы. Они не содержат полную информацию обо всех существующих доменах и не хранят IP-адрес каждого сайта. Их задача указать направление дальнейшего поиска. Следующим этапом DNS-резолвер обращается к серверу домена верхнего уровня – TLD-серверу. Для домена site.ru это инфраструктура, обслуживающая зону .ru. TLD-сервер также не обязательно сообщает IP-адрес самого сайта. Вместо этого он возвращает информацию об авторитетных DNS-серверах, которые отвечают за конкретный домен site.ru.
Зоны DNS
DNS-зона – часть пространства доменных имен, за которую отвечает определенный набор серверов и администраторов. Важно не путать понятия «домен» и «DNS-зона». Они связаны между собой, но не всегда являются абсолютно одинаковыми. Домен – это имя в иерархической структуре DNS. Например, example.ru. Зона – административная область, содержащая набор DNS-записей и описывающая определенную часть пространства имен. Владелец домена может управлять своей DNS-зоной и определять, какие записи в ней будут использоваться.
Где находятся DNS-серверы
DNS-серверы расположены в разных частях мира и могут работать на разнообразной инфраструктуре. Они размещаются в дата-центрах, сетях интернет-провайдеров, корпоративных сетях, облачных платформах и специализированных инфраструктурах. При этом пользователь обычно не знает, где физически находится конкретный DNS-сервер. Для работы системы это не имеет принципиального значения: запрос передается через сеть к доступному серверу, который может обработать его или направить дальше.
Что такое DNS-записи и зачем их прописывать
DNS-запись – информационная запись в выделенной зоне, которая определяет определенные параметры домена или связанного с ним ресурса. Именно DNS-записи сообщают системе, куда направлять запросы, какие серверы принимают электронную почту, какие серверы являются авторитетными и какую дополнительную информацию необходимо учитывать. Когда говорят, что DNS-записи нужно «прописать», обычно имеется в виду создание или изменение соответствующих записей в панели управления DNS-зоной.
A-запись связывает доменное имя с IPv4-адресом. AAAA-запись выполняет аналогичную функцию для IPv6-адресов. CNAME используется для создания псевдонима одного доменного имени для другого. MX (Mail Exchange) определяет серверы, отвечающие за прием электронной почты для домена. NS (Name Server) указывает DNS-серверы, которые являются авторитетными для конкретной зоны. TXT-запись позволяет хранить текстовую информацию в DNS. SOA содержит базовую служебную информацию о DNS-зоне.
Защита от атак
DNS является важной частью интернет-инфраструктуры, поэтому DNS-серверы регулярно становятся целью различных атак. Если атакующему удается нарушить работу DNS, последствия могут затронуть сайты, почтовые сервисы, корпоративные приложения и другие ресурсы. Даже полностью исправный веб-сервер может оказаться фактически недоступным для пользователей, если они не могут получить правильный IP-адрес по доменному имени.
Одной из основных угроз являются DDoS-атаки, при которых на DNS-инфраструктуру направляется большое количество запросов или специально сформированного трафика. Критически важные домены не рекомендуется обслуживать только одним DNS-сервером. Использование нескольких авторитетных серверов повышает отказоустойчивость. Если один узел становится недоступен из-за технической неисправности или атаки, запросы могут обслуживаться другими серверами.
Помимо DDoS, угрозой для DNS является подмена ответов и записей. Для проверки подлинности и целостности DNS-данных может использоваться DNSSEC, который позволяет резолверу криптографически проверить полученный ответ.
Распределенная сеть DNS-узлов позволяет принимать запросы через несколько точек присутствия. Anycast помогает распределять трафик между разными узлами, используя одинаковый IP-адрес для нескольких экземпляров сервиса. При атаке это может повысить способность инфраструктуры обрабатывать большой объем трафика и локализовать перегрузку. Особое внимание необходимо уделять рекурсивным DNS-серверам. Открытый рекурсивный сервер, доступный всем без ограничений, может стать объектом злоупотреблений. Поэтому рекурсию следует разрешать только доверенным пользователям и сетям, если нет необходимости предоставлять публичный сервис.