许多域名/网站托pipe在同一台服务器,CNAME替代品,以避免在DNS中写入相同的IP?

我有许多网站(每个都有自己的域名)都在同一个cPanel托pipe的服务器(假设服务器IP是1.1.1.1 ,服务器主域是myserver.com

所有这些域使用第三方DNS(而不是cPanel托pipe的) ,我将这些域中的每一个的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的logging。

所以我想为什么不使用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或任何其他与CNAMElogging相同级别的logging。 从rfc1912 :

CNAMElogging不允许与任何其他数据共存。 在
换句话说,如果suzy.podunk.xx是sue.podunk.xx的别名,
不能同时拥有suzy.podunk.edu的MXlogging或Alogging或
甚至是一个TXTlogging。 特别是不要尝试将CNAME和NS结合起来
logging

从技术上讲,这可能会起作用,但将CNAMES与其他logging混合可能会混淆其他DNS服务器,这将导致奇怪的失败,并将成为一个行政头痛。

尽pipe域名的CNAME是邪恶的,但是存在一个鲜为人知的DNAME,它将完全按照你想要的方式进行(这是为了这个目的)。 如果还允许覆盖子域中的某些条目(例如,spf文本logging等,如果需要的话) – 看到这个问题和我的答案为例。

为什么不在BIND中使用单个区域文件?

您创build一个名为virtual_hosts的区域文件,并将Alogging,MXlogging等放在那里。 然后在named.conf文件中,将每个“简单”域指向同一个区域文件。

 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; }; }; 

如果您有很多区域和/或logging,则最好使用API​​来实现它们,而不是通过Web界面手动处理它们。

大多数有信誉的DNS提供商都有可用的API。 ( 例如 , Wiki页面 )

使用通配符(*)指向相同IP的logging

这样test.com是你的域名:

 $ORIGIN test.com. * A 1.1.1.1 

在这种情况下,每个子域都将有Alogging1.1.1.1,包括www