Что такое DNS и как она работает

DNS (Domain Name System) – это система, которая переводит понятные человеку доменные имена в IP-адреса, которые используют компьютеры для связи друг с другом. Представьте, что DNS – это как телефонная книга интернета. В обычной телефонной книге, если вам нужно найти номер телефона человека, вы ищете его по имени, и книга предоставляет вам номер. Точно так же DNS помогает находить IP-адреса, когда вы вводите доменное имя.

Когда вы вводите адрес веб-сайта, например, www.example.com, в строку браузера, DNS помогает найти нужный IP-адрес, чтобы ваш браузер мог подключиться к нужному серверу. IP-адрес – это уникальный числовой идентификатор, который используется для идентификации устройства в сети. Всякий раз, когда вы отправляете запрос на веб-сайт, ваш браузер отправляет этот запрос через интернет на сервер, который затем отвечает данными, которые вы видите на экране.

Как работает DNS-запрос

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

Для наглядности представьте, что вы ищете дом example.com:

  1. Локальный кеш: сначала браузер проверяет свой локальный кеш на наличие записи для example.com. Если она найдена, используется закешированный IP-адрес.

  2. Рекурсивный резолвер: если записи нет в локальном кеше, запрос отправляется на рекурсивный DNS-сервер. Этот сервер выполняет роль посредника, который ищет нужную информацию, обращаясь к другим серверам.

  3. Корневые серверы: если рекурсивный сервер не знает IP-адрес, он отправляет запрос на один из корневых серверов. Корневые серверы знают, какой сервер отвечает за каждый домен верхнего уровня (TLD), такой как .com, .net, .org и так далее.

  4. Сервер TLD: корневой сервер отвечает, какой сервер управляет доменом .com, и рекурсивный резолвер отправляет запрос на этот сервер.

  5. Авторитетный сервер: сервер TLD (например, для .com) отвечает, какой сервер управляет доменом example.com. Рекурсивный резолвер направляет запрос на авторитетный DNS-сервер для example.com, который содержит точные данные о домене.

  6. Возвращение IP-адреса: авторитетный сервер возвращает IP-адрес, связанный с example.com, рекурсивному резолверу, который, в свою очередь, возвращает его вашему браузеру.

  7. Подключение к веб-сайту: теперь, когда браузер знает IP-адрес, он может отправить запрос непосредственно на сервер, чтобы загрузить содержимое веб-сайта.

Иерархия DNS

DNS построен по иерархическому принципу, который обеспечивает надежность и масштабируемость системы. Иерархия DNS включает несколько уровней:

  1. Корневые серверы: на вершине иерархии находятся корневые серверы. Эти серверы являются начальной точкой для всех DNS-запросов. В мире существует всего 13 корневых серверов, но каждый из них дублирован на множество серверов по всему миру для обеспечения надежности и доступности. Корневые серверы содержат информацию о доменах верхнего уровня (TLD) и направляют запросы к соответствующим серверам.

  2. Домен верхнего уровня (TLD): под корневыми серверами находятся сервера доменов верхнего уровня (TLD), таких как .com, .net, .org, .ru и другие. Эти сервера управляют определенными доменными зонами. Например, сервер для домена .com знает, какие авторитетные серверы управляют доменами второго уровня в зоне .com. Серверы TLD обеспечивают организацию и управление доменами верхнего уровня и направляют запросы к авторитетным серверам, которые содержат детальную информацию о доменах второго уровня.

  3. Авторитетные серверы: на следующем уровне находятся авторитетные DNS-серверы. Эти серверы содержат информацию о конкретных доменах и отвечают на запросы о них. Например, авторитетный сервер для example.com содержит записи, которые указывают на IP-адреса, связанные с этим доменом. Авторитетные серверы предоставляют окончательную информацию, необходимую для завершения DNS-запроса.

  4. Рекурсивные резолверы: резолвер - это важный компонент системы доменных имен (DNS), который служит посредником между конечным пользователем и сетью DNS-серверов, обеспечивая преобразование доменных имен в IP-адреса. Когда пользователь вводит адрес веб-сайта в браузере или запускает приложение, которое требует доступа к интернет-ресурсам, запрос на преобразование доменного имени в IP-адрес отправляется именно рекурсивному резолверу. Резолверы получают запросы от пользователей и выполняют весь процесс поиска нужной информации, обращаясь к другим DNS-серверам. Начинают они с корневых серверов, затем обращаются к серверам TLD и авторитетным серверам, пока не найдут нужный IP-адрес. Рекурсивные резолверы часто предоставляются интернет-провайдерами (ISP) или публичными сервисами, такими как Google Public DNS или Cloudflare DNS. Они кешируют ответы на определённое время, чтобы ускорить последующие запросы к тому же доменному имени.

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

Рекурсивные резолверы и кеширование

Рекурсивные резолверы играют ключевую роль в работе DNS-системы. Когда клиент, например браузер, отправляет запрос на перевод доменного имени в IP-адрес, рекурсивный резолвер начинает процесс поиска нужной информации. Он действует как посредник, который обращается к различным уровням DNS-иерархии: сначала к корневым серверам, затем к серверам доменов верхнего уровня (TLD) и, наконец, к авторитетным серверам, содержащим окончательные записи. Рекурсивный резолвер выполняет всю тяжелую работу по поиску IP-адреса, возвращая клиенту уже готовый ответ.

Чтобы оптимизировать этот процесс и уменьшить задержки, рекурсивные резолверы используют кеширование. Когда резолвер получает ответ от авторитетного сервера, он сохраняет эту информацию в своей памяти на время, определенное параметром TTL (Time to Live). Кеширование позволяет значительно сократить количество запросов к внешним серверам, так как повторные запросы на тот же домен будут обслуживаться из кеша, что обеспечивает более быстрый доступ к часто запрашиваемым ресурсам и уменьшает нагрузку на инфраструктуру DNS.

Записи DNS и их типы

DNS-записи – это основные элементы, которые хранятся на DNS-серверах и обеспечивают маршрутизацию трафика, управление электронной почтой, верификацию данных и другие функции, необходимые для работы интернета. Различные типы записей DNS выполняют специфические задачи, обеспечивая эффективное управление и работу доменов. Вот подробное описание наиболее распространенных типов записей DNS:

A-записи (Address Records):

  • Функция: преобразование доменного имени в IPv4-адрес.

  • Пример использования: при вводе в браузере адреса example.com, A-запись может указать на IP-адрес 192.0.2.1.

  • Особенности: A-записи являются основными записями для большинства доменов, связывая доменные имена с их соответствующими IP-адресами.

AAAA-записи (IPv6 Address Records):

  • Функция: преобразование доменного имени в IPv6-адрес.

  • Пример использования: для домена example.com, AAAA-запись может указать на IP-адрес 2001:0db8:85a3:0000:0000:8a2e:0370:7334.

  • Особенности: используются для обеспечения поддержки IPv6, нового стандарта IP-адресов, который обеспечивает более широкий диапазон адресов по сравнению с IPv4.

MX-записи (Mail Exchange Records):

  • Функция: определение почтовых серверов, ответственных за прием электронной почты для домена.

  • Пример использования: MX-запись для example.com может указывать на сервер mail.example.com с приоритетом 10.

  • Особенности: включают приоритет, позволяя указать резервные почтовые серверы. Серверы с более низким приоритетом (большим числом) используются, если серверы с более высоким приоритетом недоступны.

CNAME-записи (Canonical Name Records):

  • Функция: создание алиасов для доменов, перенаправление одного доменного имени на другое.

  • Пример использования: CNAME-запись для www.example.com может указывать на example.com.

  • Особенности: полезны для упрощения управления доменами и их перенаправления. CNAME-записи не могут существовать одновременно с другими записями для одного и того же домена.

TXT-записи (Text Records):

  • Функция: хранение текстовой информации, используемой для различных целей.

  • Пример использования: TXT-записи часто используются для верификации домена (например, при настройке Google Workspace или Microsoft 365), для SPF-записей (Sender Policy Framework) для предотвращения спама, или для DKIM (DomainKeys Identified Mail) и DMARC (Domain-based Message Authentication, Reporting & Conformance) для проверки подлинности электронной почты.

  • Особенности: гибкость использования, возможность включения различных текстовых данных для множества различных применений.

SRV-записи (Service Records):

  • Функция: указание на серверы, предоставляющие определенные услуги, такие как VoIP или IM.

  • Пример использования: SRV-запись для протокола SIP (Session Initiation Protocol) может указывать на сервер sip.example.com с определенными параметрами приоритета и веса.

  • Особенности: используются для указания конкретных сервисов, поддерживают параметры веса и приоритета для балансировки нагрузки и отказоустойчивости.

NS-записи (Name Server Records):

  • Функция: определение авторитетных серверов имен для домена.

  • Пример использования: NS-запись для example.com может указывать на ns1.example.com и ns2.example.com.

  • Особенности: определяют, какие DNS-серверы содержат авторитетные записи для домена, обеспечивая делегирование зон.

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

Заключение

Система доменных имен (DNS) является фундаментальной частью интернета, обеспечивая преобразование легко запоминаемых доменных имен в IP-адреса, необходимые для подключения к веб-ресурсам. В данной статье мы подробно рассмотрели ключевые аспекты DNS, включая понятие DNS-сервера, их иерархическую структуру и различные типы серверов, такие как корневые, TLD, авторитетные и рекурсивные резолверы.

Мы также изучили различные типы DNS-записей, которые играют важную роль в управлении интернет-ресурсами и сервисами. A-записи, AAAA-записи, MX-записи, CNAME-записи, TXT-записи и SRV-записи – каждая из них выполняет свою уникальную функцию, от преобразования доменных имен в IP-адреса до настройки почтовых серверов и верификации данных.

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

Комментарии (26)


  1. broderix
    29.05.2024 17:23
    +3

    Спасибо, база, которой не хватает начинающим и часто бывалым ИТ специалистам.

    Хочется узнать больше - как стать авторитетным или корневым сервером, как хранится маппинг имя-адрес, какая БД используется, или тип хранения, сколько "весит" интернет?


    1. censor2005
      29.05.2024 17:23
      +1

      как стать авторитетным или корневым сервером

      Разворачиваете свой DNS-сервер (например, на Bind, PowerDNS), просите регистратора домена создать NS-запись с вашим IP-адресом в корневой зоне (например, ns1.broderix.com. => 1.2.3.4). Либо просто в управлении NS-записями добавляете A-запись, указывающую на ваш DNS сервер

      как хранится маппинг имя-адрес

      В Bind, например, это обычные текстовые файлики, если пропустить заголовки, то записи выглядят примерно так:

      api.example.com. IN A 1.2.3.4
      www.example.com. IN NS ns1.godaddy.com.

      какая БД используется

      В Bind - текстовые файлы, PowerDNS поддерживает разные бэкенды для хранения - как файлы Bind, так и MySQL, Postgres, SQLite итд.

      сколько "весит" интернет

      Сами DNS-зоны, скорее всего, немного - на один жёсткий диск все домены интернета должны с запасом влезть )


  1. GennPen
    29.05.2024 17:23

    CNAME-записи (Canonical Name Records):

    • Функция: создание алиасов для доменов, перенаправление одного доменного имени на другое.

    Это не алиасы, а именно перенаправление, как 301/302 ответ http-сервера. Не смотря на то что это перенаправление, ответ приходит полностью.

    Hidden text
    id 35059
    opcode QUERY
    rcode NOERROR
    flags QR RD RA
    ;QUESTION
    www.ya.ru. IN A
    ;ANSWER
    www.ya.ru. 268 IN CNAME ya.ru.
    ya.ru. 268 IN A 5.255.255.242
    ya.ru. 268 IN A 77.88.55.242
    ya.ru. 268 IN A 77.88.44.242
    ;AUTHORITY
    ;ADDITIONAL

    А алиасы возвращают адрес указанного домена, как будто это обычная A/AAAA-запись. Например Amazon-DNS такое поддерживает. Вероятно, этот вариант хуже в плане кеширования.


    1. regway
      29.05.2024 17:23
      +9

      "Alias". Именно так это общепринято называть с 1987 года (на самом деле даже раньше).

      https://datatracker.ietf.org/doc/html/rfc1034

      Называть это редиректом чревато еще и по другой причине. Вы даже не предстваляете количество людей, которые и без того считают что CNAME записи должна выполнять функцию http-редиректа и пишут гневные тикеты в поддержку регистратора, когда этого не происходит.

      Далее, дело прежде всего не в кэшировании, а в том, что CNAME по RFC допустимо указывать только для субдоменов. Некоторые DNS-серверы и интрефейсы позволяют указывать CNAME-запись для доменов любого уровня, но лучше так не делать по многим прчинам, разработчики RFC за просто так установили этот "запрет".

      Поскольку появился запрос на подобное не только для субдоменов, некоторые сервисы начали предлагать то о чем вы пишите. Кто-то называет эту псевдозапись ANAME, кто-то иначе. Суть в автоматически изменяемой A/AAAA-записи.

      Что касается кеширования, и оценки в терминах лучше/хуже. Смотря для каких целей. CNAME не кешируется (по стандарту, а на практике бывает всякое), поэтому широко используется для гео лоад балансингов вместо или вместе с BGP anycast и т.п.


      1. GennPen
        29.05.2024 17:23
        +1

        Спасибо, буду иметь в виду.


  1. SGordon123
    29.05.2024 17:23
    +2

    где в наглядности файлик hosts. DOH.. И почему именно браузер а не ssh какой нить?


    1. kekoz
      29.05.2024 17:23

      Да нет никакой разницы, что браузер, что “ssh какой нить” дёргают gethostbyname(3). Просто в браузер нынче любая кухарка умеет, а пример с “ssh какой нить” не все поймут.


      1. SGordon123
        29.05.2024 17:23

        так это и любопытно же, gethostbyname всегда так должен работать , или от либы / оси зависит? lwIP какой нить может в наглядности что то пропустить?


  1. alfa41
    29.05.2024 17:23
    +2

    Можете расписать как происходит создание и управление поддоменами?


    1. regway
      29.05.2024 17:23
      +1

      Точно так же.
      "Поддомен" это просто домен нижнего уровня по отношению к "основному домену". Создаем DNS-записи на DNS-серверах - появляется "поддомен". Никакой магии.
      И да, у субдомена также могут быть свои DNS-серверы (которые указываются в NS-записях, отдаваемых с авторитативных DNS-серверов "основного домена").


      1. kekoz
        29.05.2024 17:23

        Создаем DNS-записи на DNS-серверах - появляется "поддомен". Никакой магии.

        Магии там нет, только вот человеку, которые впервые подступает к DNS, такой ответ не говорит решительно ни о чём. Какие именно DNS-записи на каких именно DNS-серверах?

        Пара слов о glue-records раскрыли бы тему. И тут действительно никакой магии. Вот древняя статья здесь же, на Хабре.


    1. incomprehensible_eternity Автор
      29.05.2024 17:23
      +2

      Конечно, постараюсь в ближайшие несколько дней написать подробную статью про поддомены. Но если быть кратким, то поддомены принадлежат основному домену, но находятся уровнем ниже. Например, у www.example.ru поддоменом может быть forum.example.ru.

      Что касается создания, то коллега @regway отметил правильно, что принципиальных различий здесь нет. Поскольку для создания поддомена требуется внесение записи на DNS сервер (название поддомена, тип, TTL, IP).


  1. edst_land_ru
    29.05.2024 17:23
    +1

    Подскажите, есть ли в домашних роутерах (D-link, Keenetic и прочие) функционал DNS-сервера для локальной сети, которую этот роутер обслуживает?


    1. ddastt
      29.05.2024 17:23
      +1

      Не скажу за приведенных производителей, но Mikrotik точно поддерживает создание записей


    1. Jaffarr
      29.05.2024 17:23

      Не скажу за все Кинетики, но из тех, что я видел, был только модуль динамического DNS, DNS-сервера не было. В Кинетиках есть возможность игнорировать DNS провайдера и подключить сторонние DNS, в том числе DoH и DoT.


  1. vitya_ponomarev
    29.05.2024 17:23
    +2

    Классная статья, так раз что надо для меня и для тех кто только начинает осваивать.


  1. Lazhu
    29.05.2024 17:23
    +2

    А про PTR забыли...


    1. regway
      29.05.2024 17:23

      Там много про что "забыли". Даже про SOA и TTL нет упоминания.

      Из интересного, на чем спотыкаются большинство новичков по теме доменов и DNS: про работу кэшей, про glue records, про Child NS и многое другое можно написать.

      Про протоколы, про DoH/DoT/DoQ, но это скорее отдельная тема.

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

      P.S. С приходом массовой популярности к сервисам типа CF мы наблюдаем резкое снижение среди клиентов... понимания даже сильно более базовых вещей, связанных с доменами. Поэтому я искренне рад, когда кто-то публикует статьи для новичков, вижу что тема им инетересна, и есть фидбек.


  1. Tathagata
    29.05.2024 17:23

    Подскажите, в контексте DNS термины авторитетный и авторитативный являются полными синонимами?


    1. incomprehensible_eternity Автор
      29.05.2024 17:23

      Насколько мне известно, авторитетный и авторитативный в контектсе DNS - синонимы. Также можете встретить синонимы master и primary, которые означают то же самое.


      1. regway
        29.05.2024 17:23

        Неверно. authoritative != primary

        An authoritative name server can either be a primary server or a secondary server. Historically the terms master/slave and primary/secondary were sometimes used interchangeably but the current practice is to use the latter form. A primary server is a server that stores the original copies of all zone records. A secondary server uses a special automatic updating mechanism in the DNS protocol in communication with its primary to maintain an identical copy of the primary records.

        https://en.wikipedia.org/wiki/Domain_Name_System


        1. incomprehensible_eternity Автор
          29.05.2024 17:23

          Благодарю за разъяснение, буду знать!


    1. kekoz
      29.05.2024 17:23
      +1

      Нет такого слова “авторитативный”, это буквально транслит с “authoritative” (англ), которое и переводится как “авторитетный.”


      1. regway
        29.05.2024 17:23

        А почему не авторитарный? Если учитывать историю вопроса, есть основания называть и так.

        Можно конечно включить режим зануды-граммарнаци на полную, и запретить (разумеется, законодательно) употребление слова компьютер и называть его ЭВМ.

        А в профессиональной среде устоявшиеся названия тем более не редкость, и это далеко не единственный пример когда термины являются транслителированной калькой с английского.

        "Баг-трекер" в словаре Ожегова тоже не найдете.

        P.S. https://www.icann.org/ru/icann-acronyms-and-terms/authoritative-name-server-ru


  1. mikegordan
    29.05.2024 17:23

    Хорошо, почему когда запускаешь docker контейнер в режиме VMACLAN это когда выдается IP напрямую от роутера, в роутере контейнер не регистрируется по имени? И ты не можешь из локалки достучаться к нему по имени? Внутри роутера около этого контейнера в NAME: просто пустота. А если запустить виртуальную машину в таком же режим (аналогичном бридж), то роутер так же выдает и IP и регистрирует имя машины. И ты можешь к ней достучаться по http://myvirtualmachine/


    1. GennPen
      29.05.2024 17:23

      Я так полагаю потому что контейнер не работает с mDNS.