我正在将 SMTP 服务器从一台主机移至另一台主机。为了使事情尽可能简单(因为我不在乎电子邮件是否延迟几个小时),我想采用以下策略:
我将该域的 MX 记录设置为某个值,以确保每次投递尝试都会导致暂时失败,并等待 TTL 到期。这样,尝试投递的发件人将开始保留他们的邮件,直到我完成。
我将邮箱和相关内容从旧主机复制到新主机。我测试新主机是否正常工作。发件人需要保留延迟的消息几天,所以我有充足的时间。
我更新了 MX 记录,使其指向新主机。只要发件人想要重试,他们就会使用新主机成功。
难点是 #1:如何设置 MX 记录,以便不尝试实际传送并延迟消息?不设置 MX 不起作用,因为会尝试 A 或 AAAA 解析,而我想将 A 和 AAAA 保留到旧主机以避免中断其他服务。将其设置为不存在的域是否能达到我的要求?我不明白这样的错误是否会被解释为暂时的还是永久的。
答案1
我不确定这是否是一个好的策略,如果可以避免的话,我不会在 DNS 级别尝试。但要实现它,只需找到您控制的 IP 地址,确保它没有任何监听端口 25 的东西,然后将 MX 记录指向该地址的 A 记录。如果您有时间,请为此记录设置较低的优先级(较高的数字)和较低的 TTL。将主 MX 的 TTL 也设置为低。
您可以使用旧的 MX 服务器并简单地停止其上的 SMTP 服务 - 这可能是实现目标的最简单方法,但不是 DNS 级别的解决方案。
要实现电子邮件远程排队,您要寻找的是一个未在端口 25 上应答的服务器或一个返回错误(例如 421)的服务器。
我可能会尝试不同的方法,要么设置一个服务器来接受电子邮件并对其进行排队,这样当它再次启动时,我就可以将其刷新到主服务器,或者(如果使用 maildir 格式)让新邮件立即进入服务器并同步旧邮件。理想情况下,您需要在此期间关闭 POP/IMAP。
答案2
您的方法肯定会丢失电子邮件。您需要做的是停止/阻止/禁用当前主机上的入站 SMTP。然后,发送服务器将对电子邮件进行排队,并在稍后尝试发送(通常最多 48 小时)。
当新主机准备就绪后,请相应地更改 MX 记录。一旦电子邮件流向新主机,您就可以将邮箱内容从旧主机复制到新主机。
答案3
- 我将邮箱和相关内容从旧主机复制到新主机。我测试新主机是否正常工作。发件人需要保留延迟的消息几天,所以我有充足的时间。
如果我理解正确的话,你希望分配一些时间来复制内容并进行测试。我的目标是实现接近零停机时间。
您可以测试新主机,而无需实际更改 DNS。只需将新配置复制到新主机,然后填充邮箱(它们不必包含所有邮件,只要足以进行测试即可)。
然后,您只需在测试机器上在hosts
文件中添加一个指向新 IP 地址的条目,即可绕过常规 DNS 解析。然后开始测试发送和接收。当您的配置完全准备就绪后,更改 DNS 以切换到新主机,然后您可以立即停用旧主机,这样它就不会再接收任何邮件。
一个简单的技巧是在防火墙级别阻止端口 25/465 等,例如使用iptables
。
总而言之,我会做所有的测试前停止邮件服务并更改 DNS 设置。总有出错的可能,您(和您的客户)将面临压力并与时间赛跑。
有一件事你没有提到:你将如何将邮件从一个主机复制到另一个主机,以及我们谈论的是哪种卷。例如,如果你将使用 Imapsync,我认为应该可以执行增量同步,这样当您进行切换时,新主机已经拥有几乎 100% 的邮件。