MX 记录指向具有两个不同 IP 的 A 记录

MX 记录指向具有两个不同 IP 的 A 记录

所以我的问题很简单,我只需要一个可靠的答案,这样我就不会破坏电子邮件服务。

我有两台服务器,一台用于邮件,另一台用于 Web 服务。Web 服务器负责 SSL 证书更新(我使用的是 Let's Encrypt 证书颁发机构)。

我的 DNS A 记录是 mail.example.com,指向邮件服务器 IP。MX 记录指向该 A 记录。

SSL 证书验证是通过 DNS 进行的,因此我添加了另一个具有相同主机名(mail.example.com)但指向 Web 服务器 IP 的 A 记录。

我尝试了一段时间并且成功了(验证成功并且邮件服务正常运行)但我不是 100% 确定,并引发了以下两个想法:

1-之后添加了 Web 服务器的 A 记录,因此在 DNS 查询中邮件服务器 IP 会首先出现,因此一切正常。

2 - 我读到过,在浏览器中,DNS查询结果是按随机顺序使用的。如果第一个IP无法提供HTTP请求,则将使用第二个IP。我对此不确定,但对于邮件服务来说,是否会发生同样的情况?如果解析的第一个IP不接受邮件,它会尝试第二个IP吗?

我希望澄清这一点,因为我想 100% 确定发生了什么以及为什么发生,以防止将来出现任何问题。

答案1

你已经创建了一个DNS 循环

不要创建多个同名的 A 记录,除非你希望它们指向同一个服务。还有其他方法可以解决你正在尝试做的事情;例如,在邮件服务器上设置一个最小的 Web 服务,并明确指定更新证书的任务,或者在两个服务器前面放置一个负载平衡器/反向代理。后者会使证书管理变得更加繁琐。

答案2

对于没有安装 Web 服务器的邮件服务器来说,这是获取 Let's Encrypt 证书的错误方法。

相反,您应该使用 certbot 的独立插件。这样,certbot 就会启动其内置的临时 Web 服务器来执行 HTTP 验证。

您请求与 MX 记录值对应的名称的证书。例如,如果您有域名 example.com,并且您的 MX 记录指向 mail.example.com,则您请求 mail.example.com 的证书,该证书的 IP 地址必须仅指向该邮件服务器。

例如:

certbot certonly --standalone -d mail.example.com

然后,您可以将生成的证书链接添加/etc/letsencrypt/live到您的邮件服务器配置中。

请注意,当您 时certbot renew,您的邮件服务器不会自动重新启动。您需要设置 才能--post-hook执行此操作。例如:

certbot renew --post-hook "systemctl reload postfix dovecot"

有关自动证书续订的更多信息,请参阅用于 Let's Encrypt 续订的 Cron 作业

答案3

Mickael 关于 DNS 循环的说法是正确的。另一种选择是通过 DNS 而不是 HTTP 请求来验证域。请查看此链接来自 Certify The Web 的说明,解释了如何使用他们的软件执行 DNS 验证。然后,如果您只需要域验证,则可以完全删除 Web 服务器。

相关内容