Все, что нужно знать о DNS

Источник: «Everything You Need to Know About DNS»
Если вы читаете эту статью, то, скорее всего, вы использовали систему доменных имён (DNS), даже не подозревая об этом. DNS — фундаментальная часть интернета, которая позволяет нам получать доступ к веб-сайтам и онлайн-услугам, используя вместо цифровых адресов удобные для человека имена. Но как именно она работает? В этой статье я расскажу об основах DNS и о том, как она помогает нам ориентироваться в Интернете.

Что такое DNS

DNS — это как телефонная книга для Интернета. Он сопоставляет доменные имена, такие как www.example.com, с IP-адресами, например 192.0.2.1, являющиеся фактическим местоположением серверов, на которых размещены веб-сайты. Таким образом, нам не нужно запоминать длинные строки цифр, чтобы посетить наши любимые сайты. Мы можем просто ввести название и позволить DNS сделать все остальное.

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

Но откуда DNS знает, где найти IP-адрес для данного доменного имени? Ответ заключается в том, что он не знает всего сам. Он полагается на сеть серверов, называемых DNS-резолверами, работающих вместе, чтобы найти ответ.

Когда вы вводите доменное имя в браузере, компьютер сначала проверяет свой локальный кэш DNS, чтобы узнать, есть ли в нем ответ. Если есть, он будет использовать этот ответ. Если нет, он отправит запрос на DNS-резолвер. Затем преобразователь проверит свой собственный кэш, чтобы узнать, есть ли в нем ответ. Если нет, он отправит запрос другому DNS-резолверу. Этот процесс будет продолжаться до тех пор, пока ответ не будет найден или запрос не завершится.

DNS-резолвер — это сервер, который хранит записи DNS и отвечает на DNS-запросы.

Давайте разберём это на примере. Предположим, вы хотите посетить сайт www.example.com. Вот список шагов или мест, участвующих в получении ответа для www.example.come:

Шаг 1: Локальные кэши

Первым местом, которое проверит ваш компьютер, будет его локальный кэш. Это список доменных имён и соответствующих им IP-адресов, к которым ваш компьютер недавно обращался. Если искомое доменное имя находится в кэше, компьютер будет использовать IP-адрес из кэша и пропустит остальные шаги.

Вот список локальных кэшей, которые могут иметь сопоставление домена и IP-адреса:

Шаг 2: Рекурсивные DNS-сервера

Параметры DNS, настроенные на вашем компьютере или маршрутизаторе, указывают на DNS-сервер (по умолчанию это DNS-сервер вашего интернет-провайдера). Этот DNS-сервер называется рекурсивным DNS-сервером. Он будет проверять свой собственный кэш, чтобы узнать, есть ли у него ответ. Если есть, он отправит ответ обратно на ваш компьютер. Если нет, он отправит запрос на следующий DNS-сервер в цепочке, который является корневым DNS-сервером.

Шаг 3: Корневые DNS-сервера

Корневые DNS-серверы — это DNS-серверы верхнего уровня в иерархии DNS. Они отвечают за передачу ответственности за ответы на запросы для доменов верхнего уровня, таких как .com, .org и .net.

У них нет IP-адресов для самих веб-сайтов. Вместо этого у них есть IP-адреса DNS-серверов доменов верхнего уровня. Например, корневой DNS-сервер для .com — это a.gtld-servers.net. Серверы имён для TLD можно посмотреть, выполнив команду:

dig +short NS com
dig +short NS org
dig +short NS ai
dig +short NS fyi
dig +short NS io

Шаг 4: DNS-сервера домена верхнего уровня

DNS-серверы домена верхнего уровня отвечают за делегирование ответственности за ответы на запросы для доменов второго уровня, таких как example.com, example.org и example.ai. У них нет IP-адресов самих веб-сайтов. Вместо этого они имеют IP-адреса авторитетных DNS-серверов (т.е. мест, где хранятся фактические записи DNS).

Вы можете увидеть серверы имён для домена второго уровня, выполнив команду:

dig +short NS cs.fyi
dig +short NS github.com
dig +short NS medium.com

Шаг 5: Авторитарные DNS-сервера

Это место, где хранятся фактические записи DNS. На этом этапе авторитетный DNS-сервер запрашивает A запись доменного имени. Запись A — это запись DNS, которая сопоставляет доменное имя с IP-адресом. Авторитетный DNS-сервер отправит IP-адрес рекурсивному DNS-серверу. Рекурсивный DNS-сервер отправит IP-адрес обратно на ваш компьютер.

Как DNS работает на практике

Давайте посмотрим, как DNS работает на практике, используя команду dig. dig — это инструмент командной строки для запроса серверов имён DNS. Он доступен в большинстве систем Linux и MacOS.

Допустим, мы хотим найти IP-адрес для www.example.com. Мы можем использовать команду dig для поиска IP-адреса:

dig +short www.example.com

Опция +short указывает dig печатать только раздел ответа. Вывод будет выглядеть примерно так:

93.184.216.34

Это IP-адрес для www.example.com. Но как dig нашёл этот IP-адрес? Давайте посмотрим, что произошло за кулисами.

Во-первых, dig проверит свой локальный кэш, чтобы узнать, есть ли в нем ответ. Если есть, он будет использовать этот ответ. Если нет, он отправит запрос на DNS-резолвер. Резолвер проверит свой собственный кэш, чтобы узнать, есть ли в нем ответ. Если есть, он отправит ответ обратно на dig. Если нет, он отправит запрос другому DNS-резолверу. Этот процесс будет продолжаться до тех пор, пока ответ не будет найден или запрос не завершится.

Давайте посмотрим, что произошло в данном случае. Мы можем использовать команду dig с опцией +trace, чтобы увидеть полный ответ:

dig +trace www.example.com

Я не буду показывать здесь полный вывод, поскольку он довольно длинный. Но вы можете выполнить эту команду самостоятельно и заметить различные DNS-серверы, задействованные в процессе.

Отладка проблем, связанных с DNS

Если у вас возникли проблемы с доступом к веб-сайту, вы можете использовать команду dig для отладки проблемы. Давайте рассмотрим несколько практических примеров использования команды dig.

Проверка DNS разрешения для домена

Вы можете использовать dig, чтобы проверить, может ли доменное имя быть преобразовано в IP-адрес. Вот пример:

dig example.com +short

Эта команда вернёт IP-адрес(ы), связанные с доменным именем google.com. Опция +short используется для отображения только IP-адресов, без дополнительной информации.

Извлечение записей DNS для домена

Вы можете использовать dig для получения различных типов записей DNS для доменного имени. Например, чтобы получить все A записи для домена, вы можете использовать следующую команду:

dig example.com A

Это вернёт список всех A записей, связанных с доменом example.com.

Аналогично, чтобы получить все MX записи для домена, вы можете использовать следующую команду:

dig example.com MX

Это вернёт список всех MX записей, связанных с доменом example.com.

Проверка распространения DNS-информации

Вы можете использовать команду dig для проверки того, были ли записи DNS распространены на все DNS-серверы. Например, чтобы проверить, были ли распространены записи домена MX, вы можете использовать следующую команду:

dig example.com MX +trace

Опция +trace используется для отображения пути процесса разрешения DNS, начиная с корневых DNS-серверов. Это поможет вам определить, есть ли DNS-серверы, ещё не получившие обновлённые DNS-записи.

Проверка валидации DNSSEC

Вы можете использовать команду dig, чтобы проверить, правильно ли работает проверка DNSSEC для доменного имени. Например, чтобы проверить, действительны ли записи DNSSEC домена, вы можете использовать следующую команду:

dig example.com +dnssec

Это покажет записи, связанные с DNSSEC для домена, и то, являются ли они действительными.

DNSSEC — это расширение безопасности системы доменных имён (DNS), которое удостоверяет подлинность источника данных DNS и целостность данных. Она также обеспечивает механизм, предотвращающий подделку данных DNS во время транспортировки.

Подробнее о DNSSEC можно прочитать здесь.

Запрос конкретного DNS-сервера

Вы можете использовать dig для запроса определённого DNS-сервера на наличие DNS-записей. Например, чтобы запросить публичный DNS-сервер Google (8.8.8.8) для A записей для домена, вы можете использовать следующую команду:

dig example.com A @8.8.8.8

Это отправит DNS-запрос на указанный DNS-сервер (в данном случае 8.8.8.8), вместо того чтобы использовать DNS-сервер по умолчанию, настроенный на локальной машине.

Распространённые ошибки DNS

Существует несколько распространённых ошибок DNS, с которыми вы можете столкнуться. Вот некоторые из них:

DNS_PROBE_FINISHED_NXDOMAIN

Эта ошибка означает, что доменное имя не существует. Это может быть связано с тем, что имя домена было введено неправильно, или с тем, что срок действия доменного имени истёк.

DNS_PROBE_FINISHED_NO_INTERNET

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

DNS_PROBE_FINISHED_BAD_CONFIG

Эта ошибка означает, что DNS-сервер недоступен. Это может быть связано с тем, что DNS-сервер не работает, или с тем, что DNS-сервер недоступен из-за проблем в сети.

Как очистить DNS кэш

Бывают случаи, когда необходимо очистить кэш DNS на локальной машине. Вы можете использовать команду ipconfig для этого в Windows и команду dscacheutil для этого в MacOS.

Вот команда для очистки кэша DNS в Windows:

ipconfig /flushdns

В MacOS можно использовать следующую команду:

dscacheutil -flushcache

Заключение

В этой статье мы узнали о DNS и о том, как она работает. Мы также узнали, как использовать команду dig для запроса DNS-серверов на наличие DNS-записей. Я надеюсь, что эта статья была вам полезна; не стесняйтесь поделиться ею со своими друзьями и коллегами.

Дополнительные материалы

Предыдущая Статья

Основы сетевых технологий

Следующая Статья

Как использовать CSS background-size и background-position