DNS

Что же такое система доменных имён? На самом деле это одна из самых простых вещей в интернете, однако отказ которой может привести к тотальному выходу последнего из строя, но начнём по порядку.

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

Мы уже знаем, что у любого оборудования в интернете есть IP-адрес1), однако людям, особенно далёким от ИТ индустрии очень не удобно запоминать все эти цифры и точки. В связи с этим была придумана система, в которой хранятся так называемые каноничные имена2) и соответствующая этим именам информация3)

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

Если отойти подальше и взглянуть на картину в целом - то можно заметить, что система DNS выглядит как дерево. У неё есть корень и дальше она растёт вниз.

                             ----.---
                            /   / \  \
                           /   /   \  \
                         com. ru.  in. org.
                         /           \
                        /             \
                   google.com.       ow1.in.

И это дерево не ограничено вниз - можно создать сколь угодно глубокий домен, но в RFC DNS есть ограничение, кажется, на 255 символов в имени домена.

Как пройти в библиотеку

В общем случае для пользователя работа DNS выглядит прозрачно - мы вводим в адресной строке браузера каноничное имя, например ow1.in и у нас открывается сайт. За кулисами проиходит следующее:

  • Браузер спрашивает у ОС какой IP адрес для доменного имени ow1.in
  • ОС в соответствии с настройками спрашивает IP адрес у DNS сервера
  • В случае если в кэше DNS сервера уже присутствует запись - то возвращается ответ
  • Если записи нет - DNS сервер начинает поиск от корневого домена, постепенно его уточняя
    • В нашем случае он сначала отправится на сервера корневого домена . (да-да, точка является корнем DNS) и получит адрес DNS серверов домена in.
    • Дальше у серверов домена in. DNS сервер запросит адреса DNS серверов домена ow1.in.
    • И после этого DNS сервер уже непосредственно у DNS серверов домена ow1.in. спросит конечную запись
    • Закэширует ответ
    • Отдаст полученное пользователю
  • Браузер, в случае успеха, получит IP адрес и подключится к серверу в интернете, откуда получит страничку

Что можно хранить в DNS

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

Тип Значение Описание
A IPv4 адрес Основной тип записей. Содержит в себе конечный адрес сервера, который обслуживает эту запись. Возможно использование нескольких IP-адресов для одной записи
ow1.in. 300 A 138.201.251.153
AAAA IPv6 адрес То же, что и А, только для протокола IPv6
ow1.in. 300 AAAA 2a01:4f8:173:2298:1::1
NS каноничное имя Запись, указывающая где расположены DNS сервера для данного домена
ow1.in. 300 NS ns.ow1.in.
SOA сложная структура В общем и целом является одной из основных записей о домене. Имеет сложную структуру и содержит все основные поля:
каноничное имяИмя сновного DNS сервера
каноничное имяПочтовый адрес администратора DNS сервера (вместо @ используется точка)
положительное числоВерсия зоны (положительное число, при любом изменении зоны так же должно меняться)
секундыВремя обновления зоны (число, указывающее через какое время вторичные DNS сервера долны сходить к первичным за обновлениями)
секундыВремя повторного обращения (через какое время, в случае неудачи, вторичные сервера попытаются обновить зону с первичного)
секундыВремя истечения зоны (после какого времени, в случае невозможности синхронизации с первичным сервером, вторичные сервера перестанут обслуживать зону)
секундыВремя жизни кэшей негативных ответов
ow1.in. 300 SOA ns.ow1.in. root.ow1.in. 2020931801 10800 3600 604800 3600
MX сложная структура Техническая запись для указания адресов почтовых серверов
положительное числоПриоритет сервера
каноничное имяАдрес сервера
ow1.in. 300 MX 10 mx.ow1.in.
CNAME относительное имя Создаёт синоним к каноничному имени, не обязетльно в этой же зоне
wiki.ow1.in. 300 CNAME ow1.in.
SRV сложная структура Особый вид технических записей. Позволяет указывать несколько серверов в одном ответе
положительное числоПриоритет
число в диапазоне [0-65535]Порт
адрес сервераЧаще всего каноничный, но никто не запрещает использовать и ip
_jabber._tcp.ow1.in. 300 SRV 0 5222 jabber.ow1.in.
TXT текстовое значениеОбычная текстовая информация, ограниченная 255 символами. Может быть несколько записей
_acme-challenge.ow1.in. 300 TXT “ThisIsASecretKeyForLECertApprove”
1)
не будем останавливаться на условностях в плане NAT и прочем, просто представим, что у каждой точке в интернете честный белый IP
2)
проще говоря человекочитаемые, написанные буквами
3)
как дальше будет рассказано это не всегда связка запись - ip-адрес
4)
есть даже целый протокол, реализующий работу сети поверх DNS