თეორია:DNS

WiKi MikroTik geo გვერდიდან
Jump to navigation Jump to search

DNS (Domain Name System — დომენური სახელების სისტემა) — კომპიუტერების განაწილებული სისტემა დომენების შესახებ ინფორმაციის მოპოვებისთვის. ყველაზე ხშირად IP მისამართის მისაღებად გამოიყენება ჰოსტის სახელით (კომპიუტერის ან მოწყობილობის), ლ.ფოსტის მარშრუტიზაციის შესახებ ინფორმაციის მიღება, კვანძების მომსახურება დომენში (SRV-ჩანაწერი) პროტოკოლებისათვის.

განაწილებული DNS მონაცემთა ბაზა შენარჩუნებულია DNS სერვერების იერარქიის გამოყენებით, ურთიერთქმედება კონკრეტული პროტოკოლების შესაბამისად.

DNS– ის საფუძველია დომენის სახელისა და ზონების იერარქიული სტრუქტურის გაგება. თითოეული სერვერი, პასუხისმგებელი სახელზე, შეუძლია პასუხისმგებლობის დელეგირება დომენის შემდგომი ნაწილისათვის სხვა სერვერზე (ადმინისტრაციული თვალსაზრისით - სხვა ორგანიზაციასა თუ პირზე), რაც საშუალებას საშუალებას მისცემს დააკისროს ვალდებულება, ინფორმაციის აქტუალობა სხვადასხვა ორგანიზაციის (ხალხი) სერვერებზე, პასუხისმგებელია მხოლოდ დომენის «საკუთარ» ნაწილზე.

დაწყებული 2010 წლიდან DNS სისტემაში შემოვიდა გადაცემული მონაცემების მთლიანობის შემოწმების საშუალება, სახელწოდებით DNS Security Extensions (DNSSEC). გადაცემული მონაცემები არ იშიფრება, მაგრამ მათი სანდოობა მოწმდება კრიპტოგრაფიული მეთოდებით. შემოღებული სტანდარტი DANE]უზრუნველყოფს გადაცემას, მეთოდით DNS საიმედო კრიპტოგრაფიული ინფორმაციები (სერთიფიკატებს), გამოიყენება ტრანსპორტის და გამოყენებული დონეების უსაფრთხო და დაცული კავშირების დასამყარებლად.

DNS-ის ძირითადი მახასიათებლები

DNS ფლობს შემდეგ მახასიათებლებს:

  • ადმინისტრირების გავრცელება. იერარქიული სტრუქტურის სხვადასხვა ნაწილისთვის პასუხისმგებლობა ეკისრებათ სხვადასხვა ადამიანებს ან ორგანიზაციებს
  • ინფორმაციის შენახვის გავრცელება. ქსელის თითოეული კვანძი უნდა ინახავდეს მხოლოდ იმ მონაცემებს, რომლებიც მისი პასუხისმგებლობის ზონის ნაწილია და (შესაძლოა) DNS-სერვერების ძირითადი მისამართები.
  • ინფორმაციის ქეშირება. კვანძს შეუძლია შეინახოს გარკვეული მონაცემები არა მისი პასუხისმგებლობის არედან, რათა შეამციროს დატვირთვა ქსელში.
  • იერარქიული სტრუქტურა, რომელშიც ყველა კვანძი გაერთიანებულია [ხეში] და თითოეულ კვანძს შეუძლია დამოუკიდებლად განსაზღვროს დაქვემდებარებული კვანძების მოქმედება, ან მათ „დელეგირება“ (გადაცემა) სხვა კვანძებში.
  • რეზერვირება. მათი კვანძების (ზონების) შენახვისა და მომსახურებისთვის პასუხისმგებელნი არიან (ჩვეულებრივ) რამდენიმე სერვერი, გამოყოფილია როგორც ფიზიკურად, ასევე ლოგიკურად, რაც უზრუნველყოფს მონაცემთა შენახვას და განაგრძობს მუშაობას თუნდაც ერთი კვანძის ჩავარდნის შემთხვევაში.

DNS მნიშვნელოვანია ინტერნეტის მუშაობისთვის, ვინაიდან ჰოსტთან დასაკავშირებლად საჭიროა მისი IP-მისამართის შესახებ ინფორმაცია, და ხალხისთვის უფრო ადვილია დასამახსოვრებლად ანბანური (ჩვეულებრივ აზრიანი) მისამართი, ვიდრე IP მისამართის ციფრული თანმიმდევრობა. ზოგიერთ შემთხვევაში, ეს საშუალებას იძლევა გამოიყენოთ ვირტუალური სერვერები, მაგალითად, HTTP სერვერები, განასხვავებენ მათ მოთხოვნის სახელწოდებით. თავდაპირველად, დომენისა და IP მისამართებს შორის კონვერტირება განხორციელდა სპეციალური ტექსტური ფაილის hosts გამოყენებით, რომელიც შედგენილია ცენტრალიზირებულად და ავტომატურად იგზავნება თითოეულ მანქანაში მის ლოკალურ ქსელში. ქსელის ზრდასთან ერთად, საჭირო გახდა ეფექტური, ავტომატიზირებული მექანიზმი, რომელიც გახდა DNS.

DNS შეიმუშავა პოლ მოპეტრისმა 1983 წელს; მექანიზმების მუშაობის ორიგინალური აღწერას შეიცავს RFC 882 და RFC 883. 1987 წელს, RFC 1034 და RFC 1035 გამოქვეყნებამ შეცვალა DNS-ის სპეციფიკაცია და გააუქმა RFC 882, RFC 883 და RFC 973 როგორც მოძველებული.

დამატებითი შესაძლებლობები

  • დინამიური განახლების მხარდაჭერა
  • მონაცემთა დაცვა (DNSSEC) და ტრანზაქციები (TSIG)
  • სხვადასხვა ტიპის ინფორმაციის მხარდაჭერა

ტერმინოლოგია და მუშაობის პრინციპები

DNS–ის ძირითადი ცნებებია:

  • დომენი (domain — რეგიონი) — კვანძი სახელწოდების ხეში, ყველა მასზე დაქვემდებარებულ კვანძთან ერთად (ასეთის არსებობის შემთხვევაში), то есть именованная ветвь или поддерево в дереве имен. Структура доменного имени отражает порядок следования узлов в иерархии; доменное имя читается слева направо от младших доменов к доменам высшего уровня (в порядке повышения значимости): вверху находится корневой домен (не имеющий идентификатора), ниже идут домены первого уровня (оменные зоны), затем — домены второго уровня, третьего и т. д. (например, для адреса mikrotik.vetriks.ru. домен первого уровня — ru, второго vetriks, третьего mikrotik). На практике точку перед корневым доменом часто опускают ("mikrotik.vetriks.ru" вместо "mikrotik.vetriks.ru."), но она бывает важна в случаях разделения между относительными доменами и FQDN (Fully Qualifed Domain Name, полностью определённое имя домена).
  • Поддомен (subdomain) — подчинённый домен (например, vetriks.ru — поддомен домена ru, а mikrotik.vetriks.ru — домена vetriks.ru). Теоретически такое деление может достигать глубины 127 уровней, а каждая метка может содержать до 63 символов, пока общая длина вместе с точками не достигнет 254 символов. Но на практике регистраторы доменных имён используют более строгие ограничения. Например, если у вас есть домен вида mydomain.ru, вы можете создать для него различные поддомены вида mysite1.mydomain.ru, mysite2.mydomain.ru и т. д.
  • Ресурсная запись — единица хранения и передачи информации в DNS. Каждая ресурсная запись имеет имя (то есть привязана к определенному Доменному имени, узлу в дереве имен), тип и поле данных, формат и содержание которого зависит от типа.
  • Зона — часть дерева доменных имен (включая ресурсные записи), размещаемая как единое целое на некотором сервере доменных имен (DNS-сервере, см. ниже), а чаще — одновременно на нескольких серверах (см. ниже). Целью выделения части дерева в отдельную зону является передача ответственности (см. ниже) за соответствующий домен другому лицу или организации. Это называется делегированием (см. ниже). Как связная часть дерева, зона внутри тоже представляет собой дерево. Если рассматривать пространство имен DNS как структуру из зон, а не отдельных узлов/имен, тоже получается дерево; оправданно говорить о родительских и дочерних зонах, о старших и подчиненных. На практике большинство зон 0-го и 1-го уровня ('.', ru, com, …) состоят из единственного узла, которому непосредственно подчиняются дочерние зоны. В больших корпоративных доменах (2-го и более уровней) иногда встречается образование дополнительных подчиненных уровней без выделения их в дочерние зоны.
  • Делегирование — операция передачи ответственности за часть дерева доменных имен другому лицу или организации. За счет делегирования в DNS обеспечивается распределенность администрирования и хранения. Технически делегирование выражается в выделении этой части дерева в отдельную зону, и размещении этой зоны на DNS-сервере (см. ниже), управляемой этим лицом или организацией. При этом в родительскую зону включаются «склеивающие» ресурсные записи (NS и А), содержащие указатели на DNS-сервера дочерней зоны, а вся остальная информация, относящаяся к дочерней зоне, хранится уже на DNS-серверах дочерней зоны.
  • DNS-сервер — специализированное ПО для обслуживания DNS, а также компьютер, на котором это ПО выполняется. DNS-сервер может быть ответственным за некоторые зоны и/или может перенаправлять запросы вышестоящим серверам.
  • DNS-клиент — специализированная библиотека (или программа) для работы с DNS. В ряде случаев DNS-сервер выступает в роли DNS-клиента.
  • Авторитетность (authoritative) — признак размещения зоны на DNS-сервере. Ответы DNS-сервера могут быть двух типов: авторитетные (когда сервер заявляет, что сам отвечает за зону) и неавторитетные (Non-authoritative), когда сервер обрабатывает запрос, и возвращает ответ других серверов. В некоторых случаях вместо передачи запроса дальше DNS-сервер может вернуть уже известное ему (по запросам ранее) значение (режим кеширования).
  • DNS-запрос (DNS query) — запрос от клиента (или сервера) серверу. Запрос может быть рекурсивным или нерекурсивным (см. Рекурсия).

Система DNS содержит иерархию DNS-серверов, соответствующую иерархии зон. Каждая зона поддерживается как минимум одним авторитетным сервером DNS (от authoritative — авторитетный), на котором расположена информация о домене.

Имя и IP-адрес не тождественны — один IP-адрес может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов (это называется виртуальный хостинг). Обратное тоже справедливо — одному имени может быть сопоставлено множество IP-адресов: это позволяет создавать балансировку нагрузки.

Для повышения устойчивости системы используется множество серверов, содержащих идентичную информацию, а в протоколе есть средства, позволяющие поддерживать синхронность информации, расположенной на разных серверах. Существует 13 корневых серверов, их адреса практически не изменяются.[1]

Протокол DNS использует для работы TCP- или UDP-Порт (TCP/UDP)|порт 53 для ответов на запросы. Традиционно запросы и ответы отправляются в виде одной UDP-датаграммы. TCP используется, когда размер данных ответа превышает 512 байт, и для AXFR-запросов.

Рекурсия

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

DNS-запрос может быть рекурсивным — требующим полного поиска, — и нерекурсивным (или итеративным) — не требующим полного поиска.

Аналогично — DNS-сервер может быть рекурсивным (умеющим выполнять полный поиск) и нерекурсивным (не умеющим выполнять полный поиск). Некоторые программы DNS-серверов, например, BIND, можно сконфигурировать так, чтобы запросы одних клиентов выполнялись рекурсивно, а запросы других — нерекурсивно.

При ответе на нерекурсивный запрос, а также при неумении или запрете выполнять рекурсивные запросы, DNS-сервер либо возвращает данные о зоне, за которую он ответственен, либо возвращает ошибку. Настройки нерекурсивного сервера, когда при ответе выдаются адреса серверов, которые обладают большим объёмом информации о запрошенной зоне, чем отвечающий сервер (чаще всего — адреса корневых серверов), являются некорректными, и такой сервер может быть использован для организации DoS-атак.

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

Рассмотрим на примере работу всей системы.

Предположим, мы набрали в браузере адрес ru.wikipedia.org. Браузер спрашивает у сервера DNS: «какой IP-адрес у mikrotik.vetriks.ru»? Однако сервер DNS может ничего не знать не только о запрошенном имени, но и даже обо всём домене vetriks.ru. В этом случае сервер обращается к корневому серверу — например, 198.41.0.4. Этот сервер сообщает — «У меня нет информации о данном адресе, но я знаю, что 204.74.112.1 является ответственным за зону ru.» Тогда сервер DNS направляет свой запрос к 204.74.112.1, но тот отвечает «У меня нет информации о данном сервере, но я знаю, что 207.142.131.234 является ответственным за зону vetriks.ru.» Наконец, тот же запрос отправляется к третьему DNS-серверу и получает ответ — IP-адрес, который и передаётся клиенту — браузеру.

В данном случае при разрешении имени, то есть в процессе поиска IP по имени:

  • браузер отправил известному ему DNS-серверу рекурсивный запрос — в ответ на такой тип запроса сервер обязан вернуть «готовый результат», то есть IP-адрес, либо пустой ответ и код ошибки NXDOMAIN;
  • DNS-сервер, получивший запрос от браузера, последовательно отправлял нерекурсивные запросы, на которые получал от других DNS-серверов ответы, пока не получил ответ от сервера, ответственного за запрошенную зону;
  • остальные упоминавшиеся DNS-серверы обрабатывали запросы нерекурсивно (и, скорее всего, не стали бы обрабатывать запросы рекурсивно, даже если бы такое требование стояло в запросе).

Иногда допускается, чтобы запрошенный сервер передавал рекурсивный запрос «вышестоящему» DNS-серверу и дожидался готового ответа.

При рекурсивной обработке запросов все ответы проходят через DNS-сервер, и он получает возможность кэшировать их. Повторный запрос на те же имена обычно не идет дальше кэша сервера, обращения к другим серверам не происходит вообще. Допустимое время хранения ответов в кэше приходит вместе с ответами (поле TTL ресурсной записи).

Рекурсивные запросы требуют больше ресурсов от сервера (и создают больше трафика), так что обычно принимаются от «известных» владельцу сервера узлов (например, провайдер предоставляет возможность делать рекурсивные запросы только своим клиентам, в корпоративной сети рекурсивные запросы принимаются только из локального сегмента). Нерекурсивные запросы обычно принимаются ото всех узлов сети (и содержательный ответ даётся только на запросы о зоне, которая размещена на узле, на DNS-запрос о других зонах обычно возвращаются адреса других серверов).

Обратный DNS-запрос

DNS используется в первую очередь для преобразования символьных имён в IP-адреса, но он также может выполнять обратный процесс. Для этого используются уже имеющиеся средства DNS. Дело в том, что с записью DNS могут быть сопоставлены различные данные, в том числе и какое-либо символьное имя. Существует специальный домен in-addr.arpa, записи в котором используются для преобразования IP-адресов в символьные имена. Например, для получения DNS-имени для адреса 11.22.33.44 можно запросить у DNS-сервера запись 44.33.22.11.in-addr.arpa, и тот вернёт соответствующее символьное имя. Обратный порядок записи частей IP-адреса объясняется тем, что в IP-адресах старшие биты расположены в начале, а в символьных DNS-именах старшие (находящиеся ближе к корню) части расположены в конце.

Записи DNS

Записи DNS, или Ресурсные записи (англ. Resource Records, RR) — единицы хранения и передачи информации в DNS. Каждая ресурсная запись состоит из следующих полей[2]:

  • имя (NAME) — доменное имя, к которому привязана или которому «принадлежит» данная ресурсная запись,
  • тип (TYPE) ресурсной записи — определяет формат и назначение данной ресурсной записи,
  • класс (CLASS) ресурсной записи; теоретически считается, что DNS может использоваться не только с TCP/IP, но и с другими типами сетей, код в поле класс определяет тип сети[3],
  • TTL (Time To Live) — допустимое время хранения данной ресурсной записи в кэше неответственного DNS-сервера,
  • длина поля данных (RDLEN),
  • поле данных (RDATA), формат и содержание которого зависит от типа записи.

Наиболее важные типы DNS-записей:

  • Запись A (address record) или запись адреса связывает имя хоста с адресом протокола IPv4. Например, запрос A-записи на имя referrals.icann.org вернёт его IPv4-адрес — 192.0.34.164.
  • Запись AAAA (IPv6 address record) связывает имя хоста с адресом протокола IPv6. Например, запрос AAAA-записи на имя K.ROOT-SERVERS.NET вернёт его IPv6-адрес — 2001:7fd::1.
  • Запись CNAME (canonical name record) или каноническая запись имени (псевдоним) используется для перенаправления на другое имя.
  • Запись MX (mail exchange) или почтовый обменник указывает сервер(ы) обмена почтой для данного домена.
  • Запись NS (name server) указывает на DNS-сервер для данного домена.
  • Запись PTR (point to reverse) или запись указателя связывает IP-адрес хоста с его каноническим именем. Запрос в домене in-addr.arpa на IP-адрес хоста в reverse-форме вернёт имя (FQDN) данного хоста (см. Обратный DNS-запрос). Например (на момент написания), для IP-адреса 192.0.34.164 запрос записи PTR 164.34.0.192.in-addr.arpa вернёт его каноническое имя referrals.icann.org. В целях уменьшения объёма нежелательной корреспонденции (спама) многие серверы-получатели электронной почты могут проверять наличие PTR-записи для хоста, с которого происходит отправка. В этом случае PTR-запись для IP-адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP-сессии.
  • Запись SOA (Start of Authority) или начальная запись зоны указывает, на каком сервере хранится эталонная информация о данном домене, содержит контактную информацию лица, ответственного за данную зону, тайминги (параметры времени) кеширования зонной информации и взаимодействия DNS-серверов.
  • SRV-запись (server selection) указывает на серверы для сервисов, используется, в частности, для Jabber и Active Directory.

Зарезервированные доменные имена

Документ RFC 2606 (Reserved Top Level DNS Names — Зарезервированные имена доменов верхнего уровня) определяет названия доменов, которые следует использовать в качестве примеров (например, в документации), а также для тестирования. Кроме example.com, example.org и example.net]], в эту группу также входят test, invalid и др.

საერთაშორისო დომენური სახელები

Доменное имя может состоять только из ограниченного набора ASCII-символов, позволяя набрать адрес домена независимо от языка пользователя. ICANN утвердил основанную на Punycode систему IDNA, преобразующую любую строку в кодировке Unicode в допустимый DNS набор символов.

  1. Текущая версия корневой зоны всегда находится по адресу: ftp://ftp.internic.net/domain/named.root
  2. RFC 5395 - Domain Name System (DNS) IANA Considerations
  3. Детали по возможным значениям поля: http://tools.ietf.org/html/rfc5395#section-3.2