我正在运行一个 DNS 服务器example.com
,其中有多个 A/CNAME 记录指向不同的 IP 地址。
@ IN A 198.51.100.1
a IN A 198.51.100.3
b IN CNAME a
c IN A 203.0.113.12
mail.example.com
现在我想为顶级域([email protected]
)和该域内的所有主机([email protected]
,[email protected]
)运行单个邮件服务器(例如)
我想象过类似的事情
@ IN MX 10 mail
* IN MX 10 mail
mail IN A 203.0.113.25
现在上面的内容对于主域来说已经足够好了:
$ dig mx example.com | grep MX
;example.com. IN MX
example.com. IN MX 10 mail.example.com.
$
但它不适用于 A/CNAME 记录:
$ dig mx a.example.com | grep MX
;a.example.com. IN MX
$
相反,通配符*
将按字面意思进行解释:
$ dig mx '*.example.com' | grep MX
;*.example.com. IN MX
*.example.com. 604800 IN MX 10 mail.example.com.
$
看来要走的路是为域中的每个主机设置一个 MX 记录:
@ IN MX 10 mail
a IN MX 10 mail
b IN MX 10 mail
c IN MX 10 mail
现在想象一下我的域中有数百个主机...为每个主机添加相同的 MX 记录似乎很容易出错。
有没有办法为域的所有 A/CNAME 记录指定单个 MX 条目?
我知道 serverfault 上有类似的问题,例如子域名的 MX 记录但答案似乎只处理所有主机都解析到同一个 IP 地址的情况,也就是不是这里的情况。
;; I cannot use this!
@ IN A 198.51.100.3
* IN CNAME @
奖励问题
如果有这样的办法,是否也可以为特定记录指定 MX 记录?例如所有主机都应使用mail.example.com
,仅c.example.com
应使用mail.c.example.com
?
概括
总而言之,我想避免在我的域中MX
为每个A
/记录都有一个记录。CNAME
例如我想要避免下列:
@ IN A 198.51.100.1
@ IN MX 10 mail
a IN A 198.51.100.3
a IN MX 10 mail
b IN CNAME a
b IN MX 10 mail
c IN A 203.0.113.12
c IN MX 10 mail
mail IN A 203.0.113.25
答案1
通配符仅适用于不存在任何类型的 RR 的 FQDN。由于您有“a.example.com”的 A 记录,因此任何 RR 类型的通配符都不会与“a.example.com”匹配。听起来您已经掌握了替代方案;主要是手动生成每条记录或使用一些复杂的包含系统。
还有一件事要提一下,如果一个域名没有 MX 记录,但有一个 A 记录,那么邮件交换器应该尝试使用电子邮件服务的 A 记录。我见过的所有主流电子邮件软件都这样做。