
Если мы установим запись A и запись CNAME для одного и того же поддомена, как будет выполняться поиск DNS?
Например,
A record:
example.com => xx.xx.xx.xx
www.example.com => xx.xx.xx.xx
CNAME record:
www. => example.com
При разрешенииwww.example.com, DNS-резолвер напрямую ищет запись A для поддомена www и получает IP-адрес или ищет CNAME для www, чтобы получить домен перенаправления (example.com), а затем ищет запись A для example.com, чтобы в итоге получить IP-адрес?
решение1
Что такое CNAME
записи?
Запись CNAME
определяетимя владельца(имя, куда добавляется запись) как псевдоним для имени в CNAME
значении записи (каноническое имя, согласно названию типа записи).
Обратите внимание, что это определение псевдонима находится на уровне имени, полностью игнорируя типы записей.
Одним из следствий того, что имя владельца является псевдонимом, является то, что у него не может быть других записей, поскольку это будет прямо противоречить тому, что это просто псевдоним другого имени.
С точки зрения распознавателя, если вы запрашиваете A
, допустимыми вариантами для ответа являются A
типизированный ответ, если имя не было псевдонимом, или CNAME
типизированный ответ, если имя было псевдонимом. Получение обоих вариантов для одного и того же имени не является вариантом (не тем, который разрешен стандартом и имел бы определенное поведение, в любом случае).
Тогда как мой поставщик услуг DNS может это сделать?
Если предположить, что утверждение о том, что они позволяют вам добавлять CNAME
записи A
бок о бок, верно, то с их сервисом происходит что-то неочевидное.
Я бы разделил это на два основных варианта, поскольку, не зная больше, невозможно понять, какой из них актуален в вашем случае:
- Их система не использует напрямую вводимые пользователем данные, но так или иначе преобразует их во что-то, что будет допустимым. Либо они могут добавить одну из конфликтующих записей, но не другую (что будет означать, что пользовательский интерфейс довольно плох), либо у них может быть некая форма функциональности "выравнивания CNAME", когда они фактически не обслуживают записи,
CNAME
введенные пользователем, а вместо этого разрешают соответствующие записи из канонического имени со своей стороны и обслуживают их так, как если бы они были непосредственно по имени псевдонима (что является нестандартной функциональностью, но некоторые службы реализовали этот тип динамических поисков для "выравнивания"CNAME
). - Их система сломана, что позволяет пользователю добавлять несовместимые данные, которые не разрешены в спецификациях, и можно ожидать, что это вызовет странные проблемы тем или иным образом (либо из-за того, что их служба сломает их, либо из-за того, что их служба фактически будет предоставлять несовместимые данные, которые могут сломать что-то на стороне резолвера). Пользователь выстрелит себе в ногу, если воспользуется этим типом поломки в своей службе.