Что же такое система доменных имён? На самом деле это одна из самых простых вещей в интернете, однако отказ которой может привести к тотальному выходу последнего из строя, но начнём по порядку.
Перед тем, как окунаться в удивительный мир каноничных имён - следует немного ознакомиться с теорией по IP, поскольку в своём повествовании я буду отталкиваться от этого.
Мы уже знаем, что у любого оборудования в интернете есть IP-адрес1), однако людям, особенно далёким от ИТ индустрии очень не удобно запоминать все эти цифры и точки. В связи с этим была придумана система, в которой хранятся так называемые каноничные имена2) и соответствующая этим именам информация3)
Если очень сильно обобщить - система DNS это большой справочник, который при запросе каноничного имени выдаёт техническую информацию, которой уже может воспользоваться компьютер для дальнейшей обработки пользовательских запросов.
Если отойти подальше и взглянуть на картину в целом - то можно заметить, что система DNS выглядит как дерево. У неё есть корень и дальше она растёт вниз.
----.--- / / \ \ / / \ \ com. ru. in. org. / \ / \ google.com. ow1.in.
И это дерево не ограничено вниз - можно создать сколь угодно глубокий домен, но в RFC DNS есть ограничение, кажется, на 255 символов в имени домена.
В общем случае для пользователя работа DNS выглядит прозрачно - мы вводим в адресной строке браузера каноничное имя, например ow1.in и у нас открывается сайт. За кулисами проиходит следующее:
Структура 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” |