Все, что нужно знать о 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
:
- Проверяются локальные кэши
- Проверяются рекурсивные DNS-сервера
- Проверяются корневые DNS-сервера
- Проверяются DNS-сервера доменов верхнего уровня
- Проверяются авторитетные DNS-сервера
Шаг 1: Локальные кэши
Первым местом, которое проверит ваш компьютер, будет его локальный кэш. Это список доменных имён и соответствующих им IP-адресов, к которым ваш компьютер недавно обращался. Если искомое доменное имя находится в кэше, компьютер будет использовать IP-адрес из кэша и пропустит остальные шаги.
Вот список локальных кэшей, которые могут иметь сопоставление домена и IP-адреса:
- Кэш браузера: Возможно, вы уже посещали этот сайт, и ваш браузер мог кэшировать IP-адрес.
- Кэш DNS: На основании TTL (Time To Live) записи DNS ваш компьютер мог кэшировать IP-адрес.
- Файл Hosts: Возможно, вы вручную добавили сопоставление домена и IP-адреса в файл hosts.
Шаг 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.a
i. У них нет 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-записей. Я надеюсь, что эта статья была вам полезна; не стесняйтесь поделиться ею со своими друзьями и коллегами.