DNS:需要 MX 记录和 CNAME 的子域

Mic*_*uch 21 domain-name-system cname-record mx-record

假设我们拥有区域 mywebservice.com。

我希望我的每个客户都有自己的子域,例如 customer.mywebservice.com。

customer.mywebservice.com 需要是给定服务器异地的 CNAME。由于该站点管理自己的设备并且可以随时更改地址,因此 CNAME 是必需的。

人们还需要能够向 inbox@customer.mywebservice.com 发送电子邮件,这需要一个简单的 MX 记录。

但是,这是我需要一些指导的地方:

根据RFC 1034

If a CNAME RR is present at a node, no other data should be
present; this ensures that the data for a canonical name and its aliases
cannot be different.
Run Code Online (Sandbox Code Playgroud)

我还验证了我的 DNS 服务器将拒绝为使用它们的主机提供 CNAME 以外的任何内容。

所以,看来我可能有输的情况。如果我想使用 MX 记录,我需要使用 A 而不是 CNAME。

任何人都可以想到任何解决方法吗?谢谢!

Jus*_*ott 24

不幸的是,您遇到的是 DNS 规范的限制。在大多数 DNS 服务器实现中,具有定义为 CNAME 记录的相同主机名的 MX 记录将失败。一些较旧的 DNS 服务器将允许这样做,但它们大多已被淘汰,取而代之的是更新、更安全的实现。

您需要直接使用带有客户站点 IP 地址的“A”记录,而不是使用 CNAME 记录,而不是为名称添加别名。

  • 我还应该注意,对于那些在路上阅读本文的人,此限制的原因是 CNAME 应该指代正在查找的主机的“规范名称”。例如,如果您有一个主机 x2.example.com,它是一个指向 x1.example.com 的 CNAME 记录,那么任何查找 x2 的解析器都应该看到 CNAME,用 x1 替换它为 x2 所做的任何事情,然后重新开始. 如果除了 CNAME 之外,您还有 x2 的 MX 记录,那么如果 x1 也有 MX,则它们可能会有所不同,这是不可取的,因此他们只是禁止它。 (4认同)

Mic*_*uch 20

经过大量的工作和研究,我找到了一个可以接受的解决方案。首先,重要的是我们都遵循 RFC。我修补了我的 DNS 服务器以违反 RFC,并且我发现其他几个主要的 DNS 服务器不会遵守更改。

合适的做法是将MX放在CNAME指向的主机上。因此,如果 customer.mywebservice.com 是 A 记录 loadbalancer.mywebservice.com 的 CNAME,则也为 loadbalancer.mywebservice.com 构建 MX 记录是合适的。我已经验证这适用于所有主要解析器。

如果对 customer.mywebservice.com 进行 MX 查询,解析器库将遵循 CNAME 并为最终 A 记录获取正确的 MX。欢呼!