Это канонический вопрос о CNAME в верхушках (или корнях) зон
Общеизвестно, что CNAME
записи на вершине домена являются запретной практикой.
Пример:
example.com. IN CNAME ithurts.example.net.
В лучшем случае программное обеспечение сервера имен может отказаться загружать конфигурацию, а в худшем случае оно может принять эту конфигурацию и сделать недействительной конфигурацию для example.com.
Недавно я попросил компанию, предоставляющую услуги веб-хостинга, передать бизнес-подразделению инструкции, необходимые для CNAME вершины нашего домена для новой записи. Зная, что это будет самоубийственный конфиг при подаче в BIND, я посоветовал им, что мы не сможем подчиниться, и что это был общий совет. Компания, занимающаяся веб-хостингом, заняла позицию, что это не запрещается стандартным определением RFC и что их программное обеспечение поддерживает это. Если бы мы не могли CNAME apex, их совет состоял в том, чтобы вообще не иметь записи apex, и они не предоставили бы перенаправляющий веб-сервер. ...Какая?
Большинство из нас знает, что RFC1912 настаивает на этом A CNAME record is not allowed to coexist with any other data.
, но давайте будем честны с самим собой, что RFC является исключительно информационным. Из словоблудия, запрещающего эту практику, я знаю больше всего : RFC1034 :
Если CNAME RR присутствует на узле, никакие другие данные не должны присутствовать; это гарантирует, что данные для канонического имени и его псевдонимов не могут быть разными.
К сожалению, я был в отрасли достаточно долго, чтобы знать, что «не должен» - это не то же самое, что «не должен», и этого достаточно, чтобы большинство разработчиков программного обеспечения повесились. Зная, что что-либо, кроме краткой ссылки на громкий данк, было бы пустой тратой моего времени, я в итоге позволил компании ругаться за рекомендацию конфигураций, которые могут нарушить работу часто используемого программного обеспечения без должного раскрытия.
Это подводит нас к вопросам и ответам. На этот раз я бы хотел, чтобы мы действительно разбирались в безумстве топовых CNAME, а не обошли стороной проблему, как мы обычно делаем, когда кто-то публикует сообщения на эту тему. RFC1912 запрещен, как и любой другой применимый здесь информационный RFC, о котором я не думал. Давайте закроем этого ребенка.
источник
Ответы:
CNAME
Первоначально записи были созданы для того, чтобы несколько имен, которые предоставляют один и тот же ресурс, были связаны с одним «каноническим именем» для ресурса. С появлением виртуального хостинга, основанного на именах, вместо этого стало обычным делом использовать их в качестве общей формы псевдонимов IP-адресов. К сожалению, большинство людей, пришедших с веб-хостинга, ожидают, чтоCNAME
записи указывают на эквивалентность в DNS , что никогда не было целью. Вершина содержит типы записей, которые явно не используются при идентификации канонического хост-ресурса (NS
,SOA
), который не может быть псевдонимом без нарушения стандарта на фундаментальном уровне. (особенно в отношении зон сокращений )К сожалению, оригинальный стандарт DNS был написан до того, как руководящие органы стандартов осознали, что для определения согласованного поведения необходимо явное словесное выражение ( RFC 2119 ). Необходимо было создать RFC 2181, чтобы прояснить несколько угловых случаев из-за расплывчатых формулировок, и обновленное словосочетание проясняет, что
CNAME
нельзя использовать для достижения псевдонимов вершины без нарушения стандарта.Это устанавливает, что
SOA
иNS
записи являются обязательными, но это ничего не говорит оA
или других типах, появляющихся здесь. Может показаться излишним, что я цитирую это тогда, но это станет более актуальным в данный момент.RFC 1034 был несколько расплывчатым в отношении проблем, которые могут возникнуть, когда
CNAME
существует наряду с другими типами записей. RFC 2181 устраняет неоднозначность и явно устанавливает типы записей, которые могут существовать вместе с ними:«псевдоним» в данном контексте относится к левой части
CNAME
записи. Маркированный список ясно дает понять, что записи aSOA
,NS
иA
не могут быть видны в узле, гдеCNAME
также появляется a . Когда мы совмещаем это с разделом 6.1, для a невозможноCNAME
существовать на вершине, так как он должен был бы жить вместе с обязательнымиSOA
иNS
записями.(Похоже, это делает работу, но если у кого-то есть более короткий путь к доказательству, пожалуйста, дайте трещину.)
Обновить:
Кажется, что более свежая путаница связана с недавним решением Cloudflare разрешить определение незаконной записи CNAME на вершине доменов, для которых они будут синтезировать записи A. «Соответствие RFC», как описано в связанной статье, относится к тому факту, что записи, синтезированные Cloudflare, будут хорошо воспроизводиться с DNS. Это не меняет того факта, что это совершенно нестандартное поведение.
По моему мнению, это плохая услуга для более широкого сообщества DNS: на самом деле это не запись CNAME, и это вводит людей в заблуждение, полагая, что другое программное обеспечение недостаточно для того, чтобы не допустить его. (как показывает мой вопрос)
источник
SOA
+NS
записей, 2.CNAME
записи не могут сосуществовать с другими данными)CNAME
самом деле означает запись, так как это, вероятно, наиболее часто неправильно понимаемый тип записи. Несмотря на то, что это не совсем точно, я думаю, что вопрос часто задаваемых вопросов является прямым результатом того, что многие (большинство?) Не имеют правильного пониманияCNAME
.SRV
вместо этого, что также сделало бы это не проблемой. Проблема не ограничивается тем, что обсуждается здесь;CNAME
это, вопреки распространенному мнению, не очень подходит для того, что нужно. В конце концов, посколькуCNAME
это не работает так, как люди ожидают (!) И не может быть изменено задним числом, а поскольку реализации HTTP не используют,SRV
кажется более вероятным, что функциональность стиля "псевдонима" становится более распространенной для удовлетворения HTTP (специфический для типа записи). псевдонимы реализованы за кулисами, а не как видимый тип записи)Консорциум Internet Systems недавно опубликовал статью о CNAME на вершине зоны , почему существует такое ограничение, и ряд альтернатив. Это вряд ли изменится в ближайшее время, к сожалению:
Но есть надежда:
источник
Если вы перенаправляете всю зону, вы должны использовать DNAME. Согласно RFC 6672 ,
источник