Это немного теологический вопрос, но тем не менее ...
Итак, у сервера есть имя хоста, скажем, fqdn - hostname.example.com (чтобы быть точным, о чем я говорю, это имя, которое установлено в /etc/sysconfig/network
).
Один и тот же сервер имеет несколько интерфейсов в разных подсетях. Допустим, это IP-адреса 10.0.0.1 и 10.0.1.1.
Теперь вопрос в том, это теоретически (заметьте, это важно, я знаю, что практически он работает, но меня интересует чисто академический ответ) разрешено иметь следующую настройку:
interface1.example.com. IN A 10.0.0.1
interface2.example.com. IN A 10.0.1.1
hostname.example.com. IN CNAME interface1.example.com.
ИЛИ должно быть:
hostname.example.com. IN A 10.0.0.1
interface2.example.com. IN A 10.0.1.1
interface1.example.com. IN CNAME hostname.example.com.
Я думаю, очевидно, какой из них имеет больше смысла с точки зрения управления / администрирования, но является ли это технически правильным?
Аргумент против первой установки состоит в том, что обратный поиск до 10.0.0.1 возвращает interface1.example.com
а не то, что можно было ожидать (например, имя хоста: hostname.example.com
), поэтому прямой запрос и последующие последующие обратные поиски будут возвращать разные результаты.
Как я уже сказал, мне нужен теоретический ответ. Ссылки на разделы RFC и т. Д., Которые явно разрешают или запрещают использование имени CNAME в качестве имени хоста. Если его нет, это тоже нормально, мне просто нужно подтвердить. Мне пока не удалось найти никаких явных заявлений, кроме эта книга, где эта ситуация дается в качестве примера и подразумевает, что это можно сделать как один из способов избежать записей MX, указывающих на CNAME.
ОБНОВИТЬ: Несколько интерфейсов предназначены не для избыточности (в любом случае они связаны), а для достижения логического разделения трафика. Например, весь трафик БД находится в подсети A, трафик служб - в подсети B, а общий доступ - в подсети C.
ОБНОВЛЕНИЕ2: Похоже, это не регулируется RFC / другими правилами и является вопросом предпочтений. Поэтому я отмечу ответ @Vatine как рабочий ответ на данный момент, который подразумевает, что нет никаких правил. Также большое спасибо @Alnitak за предложения и обсуждения!
Я бы даже сказал, что нет никакой связи между записями в DNS и тем, что сервер сообщает вам свое имя, поэтому с точки зрения DNS единственная разница между вашими двумя сценариями заключается в том, какое имя идет куда.
С точки зрения машины ему все равно. Однако, с точки зрения ваших пользователей, я бы выбрал один из двух и придерживался его.
Вообще говоря, имя хоста должно быть A
запись, так как есть места, где не разрешено использовать CNAME
когда это имя хоста упоминается в других записях DNS (например, MX
рекордный случай, который вы дали).
Что бы это ни стоило, мне интересно, чего вы пытаетесь достичь, имея несколько интерфейсов?
Если они обеспечивают избыточность, то лучшим методом, чем публикация IP-адреса конкретного физического адреса, является настройка общедоступного IP-адреса на «виртуальном» (или кольцевом) интерфейсе. Затем используйте протоколы маршрутизации (например, OSPF), чтобы гарантировать, что трафик который адрес может использовать любой физический интерфейс.
Тогда вы можете получить:
$ORIGIN example.com
@ IN SOA (...)
en0.server IN A 10.0.0.1
en1.server IN A 10.0.1.1
lo1.server IN A 192.168.1.1
www IN CNAME lo1.server
Это обеспечивает отказоустойчивость, гарантируя, что объявил общедоступный IP-адрес доступен, даже если один из физический интерфейсы выходят из строя.
Обновить: поскольку это делается для разделения трафика, я бы лично сделал голое имя хоста A
запись, указывающая на общедоступный интерфейс (поскольку это видит внешний мир), а затем отделить A
записи для двух внутренних интерфейсов.
Я бы сказал так: IN CNAME требует двух DNS-запросов, IN A требует одного DNS-запроса.
Лично мне не нравятся IN CNAME, и я использую только IN A