Чи дозволено мережу CNAME до CNAME?


68

Чи дозволено в DNS мати запис CNAME, який вказує на інший запис CNAME?

Причина, яка нам потрібна, полягає в тому, що у нас є ім'я хоста, яке ми хочемо, щоб його шукали до IP-адреси нашого веб-сервера. Також у нас є ще один комп'ютерний стенд для сервера, який може бути активований у випадку, якщо перший загине. У такому випадку нам швидко потрібно вказати ім'я хоста на IP-адресу стенда від комп'ютера веб-сервера.

На жаль, ім'я хоста проживає в DNS-домені, де будь-які зміни триватимуть тривалий час через ручну роботу, залежну від інших системних адміністраторів. Але у нас є ще один DNS-домен, де ми можемо швидко виконати зміни. Наявність CNAME у ланцюзі CNAME представляється можливим рішенням. Але чи це дозволено? Чи зрозуміють це веб-браузери?

Відповіді:


81

Від RFC 1034 - Доменні імена - поняття та засоби :

Імена домену в RR, які вказують на інше ім'я, завжди повинні вказувати на основне ім'я, а не псевдонім. Це дозволяє уникнути зайвих непрямих доступу до інформації. Наприклад, адреса для імені RR для вищевказаного хоста повинна бути:

52.0.0.10.IN-ADDR.ARPA  IN      PTR     C.ISI.EDU

а не вказувати на USC-ISIC.ARPA. Звичайно, за принципом надійності, доменне програмне забезпечення не повинно провалюватися, коли воно представлене ланцюжками або петлями CNAME; Слід дотримуватися ланцюгів CNAME, і петлі CNAME сигналізують як помилку.

Так що так, це дозволене та належним чином написане програмне забезпечення впорається з ним просто гаразд. Однак ланцюги CNAME не вважаються хорошою практикою і накладають накладні витрати на інфраструктуру.


3
+1 для посилання RFC
Alnitak

16
Хоча я і роблю це постійно, цитата вище поза контекстом. Якраз над цим абзацом написано ..Domain names in RRs which point at another name should always point at the primary name and not the alias. This avoids extra indirections in accessing information.
Molomby

3
Згаданий хлопцем у мережі Microsoft Azure , ланцюжок CNAME важливо зробити балансування завантаження AnyCast для них.
Пол Лан

26

Звичайно, це можливо.

Це, як правило, не рекомендується , з очевидних причин, що він використовує більше DNS-ресурсів. Наприклад:

foo   IN      CNAME  someserver.somehost.com.
bar   IN      CNAME  foo

Запит "бар" призведе до запиту CNAME foo, а потім someserver.somehost.com.запиту, що призводить до отримання одного додаткового запиту.

Для кожного елемента ланцюга, який ви додасте, буде потрібно інший запит.

Ще одна причина, від якої це не відштовхується, полягає в тому, що, створюючи подібні ланцюги, збільшуються шанси на те, щоб ви якось створили петлі CNAME ; їх слід визначати автоматично на поточних серверах DNS, але все-таки накладатимуть велике навантаження на сервери.


5

Так, це дозволено і буде працювати, але це не вважається хорошою практикою. Кілька пошукових запитів використовують більше ресурсів, і існує ризик випадкового створення циклу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.