如何测试并实际执行将互联网域名转移到新的邮件服务器?

如何测试并实际执行将互联网域名转移到新的邮件服务器?

1.1.1.1我的设置是一台托管域名的生产服务器(例如) example.com。目前,postfix 和 courier(仅 IMAP)负责托管邮件。我计划将域名转移到新服务器(例如1.1.1.2),也使用 postfix,但使用 dovecot 作为新的 IMAP 服务器。我已经将 postfix 设置为1.1.1.2接受 example.com 的所有邮件,这些邮件将发送到邮箱并可通过 IMAP 访问。所有帐户(包括邮件)都是 shell 帐户。我在两个服务器上都使用 Debian。

在我的虚拟主机提供商的 Web 界面中,我可以为 设置服务器的 IP(A 记录)和邮件服务器的 IP(MX 记录) 。目前,它们分别example.com指向(后者也自动解析为)。我无法影响任何 TTL 设置。而且,我不会更改提供商,只会更改托管域的虚拟机。1.1.1.1server.example.com1.1.1.1

两个问题:

  1. 我想让我的旧服务器1.1.1.1将所有收到的邮件发送到新服务器1.1.1.2以进行测试(例如测试邮件过滤器、垃圾邮件识别等,因为并非所有设置都相同)。这是一个好主意吗(例如关于退回等)?在 postfix 中实现此目的的正确方法是什么(类似于 Apache HTTP Server 中的反向代理)?

  2. 将域名从旧服务器转移到新服务器的最佳方式是什么,以便停机时间最短(至少在 IMAP 帐户转移期间,我确信我需要停止所有邮件服务器)并且不会丢失/延迟任何邮件?我的想法是让旧服务器在一定时间内将邮件转发到新服务器,以便也可以从具有过时 DNS 缓存的系统接收邮件。

总的来说,我正在寻找一种方便且最佳实践的方法来执行此操作。而且,我不知道我对这两个问题的想法是否指向正确的方向。

答案1

1.1.1.1我通过让旧服务器将所有邮件转发到新服务器来实现这一点1.1.1.2。使用旧服务器上的 postfix 1.1.1.1,您可以执行以下操作将每封收到的邮件的副本发送到另一台服务器:

  1. 在每封邮件中添加某个虚假域名的密件收件人。例如,在每封邮件中添加密件[email protected]抄送收件人[email protected]
  2. 配置此虚假域名以将其传送到您的新服务器。因此, 的邮件example.migration将传送到1.1.1.2
  3. 在向新服务器交付时将此虚假域名恢复正常。因此,在 SMTP 交付时替换example.migrationexample.com

为了实现这一点,请创建以下文件:

  • 在 /etc/postfix/migration/recipient_bcc_map 中:

    /^(.*)@example\.com$/ [email protected]
    
  • 在/etc/postfix/migration/transport_map中:

    example.migration smtp:[1.1.1.2]
    
  • 在/etc/postfix/migration/smtp_generic_maps中:

    /^(.*)@example\.migration$/ [email protected]
    

现在将所有这些包括到您的main.cf

recipient_bcc_maps = pcre:/etc/postfix/migration/recipient_bcc_map
transport_maps = hash:/etc/postfix/migration/transport_map
smtp_generic_maps = pcre:/etc/postfix/migration/smtp_generic_maps

Postfix 从 2.3 版开始,在此配置下可避免邮件退回。因此,如果 上发生错误1.1.1.2,则不会返回这些错误(请参阅http://www.postfix.org/postconf.5.html#recipient_bcc_maps)。

现在所有邮件都以副本形式发送到1.1.1.2。通过此设置,您可以在新服务器上测试所有迁移内容(如过滤器)。确保同步/etc/aliases

要执行移民本身:

  1. 进行上述设置。
  2. 停止两台服务器上的 postfix 和 IMAP 服务。
  3. 将邮箱从旧服务器复制到新服务器。
  4. 在两台服务器上启动 postfix,在新服务器上启动 IMAP。
  5. 更改域名以指向新服务器。
  6. 域切换在 DNS 中传播后,用户可以访问他们的邮箱。

对于收到的邮件来说,停机时间很短,因为它们仅在步骤 2 和步骤 3 之间被延迟。

答案2

回答第 2 个问题:

将当前 MX 记录的 TTL 设置为合适的设置(1 小时可能比较合适)。然后更改 MX 记录以指向新服务器。然后等待一小时(或您设置 TTL 的任何时间),等待任何可能发送到旧服务器的电子邮件(基于某些系统缓存了旧 MX 记录),然后将电子邮件从旧服务器传输到新服务器。

一旦您将 MX 记录更改为指向新服务器,任何尚未缓存 MX 记录(旧 MX 记录)的电子邮件服务器都会立即解析新的 MX 记录并将电子邮件发送到那里。任何缓存了 MX 记录(旧 MX 记录)的电子邮件服务器将继续向旧服务器发送电子邮件,直到 MX 记录的 TTL 到期,届时,它们将对 MX 记录执行新的查找并找到新的 MX 记录并在那里发送电子邮件。

答案3

除了使用类似软件外,没有其他方法可以进行全面测试圆屋镜像传输到您的第二台服务器。这种级别的测试可能不是必需的;使用 telnet 进行手动入站测试应该没问题。

在您确定交付(入站和出站)按预期进行后,您可以像这样进行切换:

  1. 在 1.1.1.1 上设置 postfix,将所有用户邮件发送到新服务器 1.1.1.2。示例配置:当您的系统是 SECONDARY MX 主机时...
  2. 为 1.1.1.2 添加新的 mx 记录并删除现有记录。当 1.1.1.1 上的队列为空时,关闭 postfix 强制发件人投递到新的 mx。
  3. 将客户端访问 cname 从 1.1.1.1 移至 1.1.1.2(客户端需要知道他们现有的邮件可能暂时不会出现)。
  4. 将邮箱内容从 1.1.1.1 转移到 1.1.1.2
  5. 当出站邮件队列为空时,关闭 1.1.1.1

如果发件人正在缓存,邮件将在发件人处排队一段时间,正如 joeqwerty 所说;根据我的经验,大多数软件都会尝试其他 mx 记录。请注意,mx 记录应指向实际主机名,而不是 cname,例如 mail.example.com。困难的部分是管理客户端访问;尽早与客户沟通会有所帮助。

相关内容