Привет, Хабр! Меня зовут Виктор, я разработчик в Selectel. Часто ко мне обращаются клиенты и спрашивают, в каких ситуациях использовать DNS-записи типа alias. Вопросы появляются на почве ограничений и нюансов RFC.
В статье раскладываю все по полочкам и показываю, как работать с доменами на примере бесплатного DNS-хостинга Selectel. Подробности под катом!
Дисклеймер: большую часть информации из статьи можно найти в RFC по каждому из типов записей. В статье дали выдержку самого важного и показали варианты практического применения. Материал поможет нашим клиентам правильно настроить DNS-записи.
Какие DNS-записи бывают?
DNS-записи позволяют протянуть взаимосвязи между IP-адресами и доменами. Именно с помощью них серверы делятся информацией о доменах с другими серверами. Поэтому важно ответственно подойти к настройкам — они разные, в зависимости от типов записей.
Например, есть A-записи, которые нужны исключительно для связи IP с доменом, CNAME, которые работают с поддоменами, MX, позволяющие настроить почтовые домены, и другие. Далее будем говорить только о DNS-записях типа alias, так как они, по моему опыту, вызывают наибольшее количество вопросов.
Записи типа alias
Всего существует пять основных записей типа alias — CNAME, ALIAS, ANAME, BNAME и DNAME. Но больше всего работают именно с ALIAS и CNAME. В Selectel DNS есть только эти два типа — это связано с тем, что ANAME, BNAME и DNAME оказались неудачными попытками и не смогли найти массового практического применения.
Теперь разберемся, когда эти записи нужны. За отправную точку возьмем самую популярную запись из этого класса — CNAME.
CNAME: запись для перенаправления поддоменов
CNAME позволяет установить связь, например, между www.google.com и google.com. Но этим список возможностей этой записи не ограничивается: с помощью CNAME можно, например, перенаправить с storage.example.com на 123456.selcdn.ru, чтобы получить «красивую» ссылку.
CNAME — это запись, отвечающая за привязку поддоменов к каноническим доменам. Она дублирует все ресурсные записи домена для поддоменов таким образом, чтобы при обращении к последнему был проброс на соответствующие адреса и настройки.
По сути, запись CNAME состоит из пары значений. Первое определяет псевдоним — например, субдомен вроде www или mail — для которого создается запись, а второе — домен, на который он указывает.
Принципиальное отличие CNAME от A-записи в том, что она связывает сервисы с доменными именами, а не с физическими IP-адресами. В случае изменения адреса не нужно переписывать все записи CNAME, достаточно изменить А-запись у оригинального домена. Несмотря на это, у CNAME есть ограничения:
- Запись CNAME нельзя добавить для домена второго уровня вроде selectel.ru или google.com. Для таких целей нужно использовать ALIAS.
- Если для поддомена добавлена запись CNAME, то другую запись для него добавить нельзя. Это связано с особенностями технической реализации CNAME: она заставляет провайдеров «копировать» все записи у оригинальных доменов. Поэтому, чтобы случайно не столкнуться с тем же конфликтом двух A-записей на разные ресурсы, ввели это ограничение.
- Если для поддомена добавлены другие записи, то добавить CNAME нельзя. Причина та же, что в предыдущем пункте.
- CNAME невозможно использовать для «перенаправления», так как HTTP-редирект в рамках системы DNS организовать нельзя.
Если помнить об этих ограничениях, проблем с CNAME не будет.
Когда использовать CNAME
Разберем сценарий на примере CDN-ресурса в панели управления. К нему по умолчанию мы предоставляем домены вот такого вида:
Допустим, домен по умолчанию не нравится и вы хотите, чтобы сайт CDN был доступным через собственный (cdn.tarrydvcie.ru) — без использования домена Selectel. Для этого вы решаете создать А-запись следующего вида:
cdn.tarrydvice.ru. IN A 92.53.68.16
Здесь cdn.tarrydvice.ru — нужный поддомен, A — тип записи, 92.53.68.16 — адрес сервера CDN.
Но что произойдет, если изменится IP-адрес для домена по умолчанию, например, на 92.53.68.17? Придется в срочном порядке менять A-запись для cdn.tarrydvice.ru — это может привести к временной недоступности к сайту.
Наиболее простое и удобное решение в этой ситуации — использовать CNAME-запись. Тогда при изменении IP-адреса на 92.53.68.17 для домена по умолчанию автоматически подтянутся и для cdn.tarrydvice.ru.
Подключение и настройка записи в панели
Чтобы решить задачу с доступом через «красивый» домен cdn.tarrydvice.ru, нужно добавить CNAME-запись и сослаться на стандартный домен. Это можно сделать через панель управления доменами.
После добавления CNAME, новую запись можно увидеть с помощью команды dig.
-----------
dig cdn.tarrydvice.ru CNAME
;; QUESTION SECTION:
;cdn.tarrydvice.ru. IN CNAME
;; ANSWER SECTION:
cdn.tarrydvice.ru. 3600 IN CNAME ab7b4245-9d7a-4b1b-90ba-d4115b72d63e.selcdn.net.
...
В качестве последнего действия нужно добавить новый домен во вкладке CDN.
Супер — все готово, теперь к CDN можно подключиться по «красивому» домену.
ALIAS: как CNAME, только выше
Принцип работы ALIAS похож на механику CNAME: она также копирует данные целевого домена. Однако не может быть добавлена для основного и «существовать» с другими записями в пределах одного поддомена.
Каждый раз, когда на серверы DNS поступает запрос типа записи A или AAAA, вызывается специальный обработчик, который преобразует ALIAS в адрес IPv4 или IPv6 соответственно.
При подключении ALIAS есть несколько ограничений, которые нужно учитывать:
- Для домена / поддомена с ALIAS-записью не может быть записи A или AAAA.
- Запись ALIAS нарушит DNSSEC на основном домене (@), поскольку в ответах @ A и @ AAAA будут отсутствовать записи RRSIG.
Нет какого-либо «черновика» и стандарта в RFC по подключению ALIAS-записи, поэтому от провайдера к провайдеру наблюдается разное поведение этой записи. Например, некоторые провайдеры умеют отправлять только типы записи A.
Когда использовать ALIAS
Теперь разберем сценарий на базе настройки объектного хранилища. Во вкладке «Хранилище» можно увидеть домен вида 288028.selcdn.ru — это персональный домен, который используется в публичных ссылках для доступа к файлам.
Здесь ситуация аналогична CNAME: нам выгоднее использовать ALIAS-запись на красивый домен tarrydvcie.ru, ведь изменения IP-адреса на 92.53.68.17 для 288028.selcdn.ru автоматически подтянутся и для tarrydvice.ru.
Подключение и настройка записи в панели
Для создания ALIAS-записи перейдем во вкладку «Cетевые сервисы» → «DNS-хостинг» и откроем домен tarrydvice.ru.
Далее нужно добавить запись и заполнить соответствующие поля:
После этого в списке записей появится ALIAS — это можно также увидеть с помощью команды dig:
dig tarrydvice.ru ALIAS
;; QUESTION SECTION:
;tarrydvice.ru. IN A
;; ANSWER SECTION:
tarrydvice.ru. 563 IN A 92.53.68.16
Для удобства получения ссылок в объектном хранилище осталось выполнить последний шаг: в управлении доменами нужно добавить tarrydvice.ru.
Теперь при получении ссылки на файл можно увидеть дополнительную URL с «красивым» доменом.
Поделитесь в комментариях, с какими трудностями вы сталкивались при подключении DNS-записей. Мы выберем интересные случаи и постараемся их разобрать.
Возможно, эти тексты тоже вас заинтересуют:
→ SD – это Linux, а Midjourney – Mac: краткое полное руководство по Stable Diffusion
→ Расширяем возможности «малинки» в 2023 году: дополнительные модули и аксессуары для Raspberry Pi Pico
→ «Крутое пике» для жестких дисков: продажи упали почти вдвое, но растут продажи ленточных накопителей. Что происходит?