У меня много сайтов (каждый со своим собственным доменом) на одном сервере cPanel (допустим, IP-адрес сервера 1.1.1.1
а основной домен сервера - myserver.com
)
Все эти домены используют сторонний DNS (не хостинг cPanel), Я настроил DNS каждого из этих доменов так, чтобы они указывали на IP-адрес сервера. Пример того, как в настоящее время настроен DNS каждого домена:
domainx.com -> A -> 1.1.1.1
domainx.com -> MX -> mail.domainx.com
mail.domainx.com -> A -> 1.1.1.1
www.domainx.com -> CNAME -> domainx.com
ftp.domainx.com -> CNAME -> domainx.com
Эта ситуация заставляет меня сотни раз повторять IP сервера 1.1.1.1
один раз для каждого домена. В случае изменения IP-адреса сервера мне придется пройти через DNS каждого домена, чтобы обновить записи с новым IP-адресом.
Поэтому я подумал, почему бы не использовать CNAME, чтобы не перезаписывать IP-адрес сервера везде ?! Я мог бы настроить DNS для каждого домена следующим образом:
domainx.com -> CNAME -> myserver.com
domainx.com -> MX -> mail.myserver.com
mail.domainx.com -> CNAME -> myserver.com
www.domainx.com -> CNAME -> myserver.com
ftp.domainx.com -> CNAME -> myserver.com
Но я читал это domainx.com -> CNAME -> myserver.com
зло, смотри этот и этот.
Но какие альтернативы мне есть, чтобы избежать повсеместной перезаписи IP-адреса сервера?
Но я читал, что domainx.com -> CNAME -> myserver.com - это зло
CNAME - это не зло. Однако использование CNAMES для домена второго уровня нарушит работу DNS для этих доменов. Вы не можете добавить MX, TXT или какие-либо другие записи на том же уровне, что и запись CNAME. Из rfc1912:
Запись CNAME не может сосуществовать с другими данными. В
другими словами, если suzy.podunk.xx - это псевдоним sue.podunk.xx, вы
также не может иметь запись MX для suzy.podunk.edu, или запись A, или
даже запись в формате TXT. Особенно не пытайтесь комбинировать CNAME и NS
записи
Технически это может сработать, но смешивание CNAMES с другими записями может сбить с толку другие DNS-серверы, что приведет к странным сбоям и станет головной болью администратора.
Хотя CNAME для доменов - зло, существует малоизвестное имя DNAME, которое будет делать в значительной степени именно то, что вы хотите (и предназначено именно для этого). Если также позволит переопределить определенные записи в поддоменах (например, текстовые записи spf и т. Д., Если вам нужно) - см. Это вопрос и мой ответ для примера.
Если у вас много зон и / или записей, вам может быть лучше использовать API для их реализации, чем обрабатывать их все вручную через веб-интерфейсы.
У большинства авторитетных поставщиков DNS есть API. (пример, пример, Вики-страница.)
Почему бы не использовать в BIND отдельный файл зоны?
Вы создаете файл зоны с именем virtual_hosts
, и поместите туда записи A, MX и т. д. Тогда в named.conf
file вы указываете каждому «простому» домену один и тот же файл зоны.
zone "domainx.com" IN {
type master;
file "virtual_hosts";
allow-update { none; };
};
zone "domainy.com" IN {
type master;
file "virtual_hosts";
allow-update { none; };
};
zone "domainz.com" IN {
type master;
file "virtual_hosts";
allow-update { none; };
};
используйте подстановочный знак (*) для записей, указывающих на один и тот же IP-адрес
Таким образом, test.com является вашим доменом:
$ORIGIN test.com.
* A 1.1.1.1
В этом случае каждый субдомен будет иметь запись A 1.1.1.1, включая www.