Все, что нужно знать о 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.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-записей. Я надеюсь, что эта статья была вам полезна; не стесняйтесь поделиться ею со своими друзьями и коллегами.