如何testing和实际执行互联网域名转移到一个新的服务器有关邮件?

我的设置是一个高效的服务器(例如1.1.1.1 )托pipe一个,可以说example.com 。 目前,postfix和courier(只有IMAP)正在做托pipe邮件的工作。 我打算将域名转移到新的服务器(例如1.1.1.2 ),也使用postfix,但dovecot作为新的IMAP服务器。 我已经在1.1.1.2上设置了postfix来接受example.com的所有邮件,这些邮件被发送到邮箱并且可以通过IMAP访问。 所有帐户(包括邮件)都是shell帐户。 我使用Debian的两个服务器。

在我的虚拟主机提供商的Web界面中,我可以设置example.com的服务器(A-record)和邮件服务器(MX-record)的IP。 目前,它们分别指向1.1.1.1server.example.com (后者自动parsing为1.1.1.1 )。 我不能影响任何TTL设置。 而且,我不会更改我的提供者,只是更改托pipe域的虚拟机。

两个问题:

  1. 我希望我的旧服务器1.1.1.1将所有收到的邮件发送到新的服务器1.1.1.2用于testing目的(例如testing邮件filter,垃圾邮件识别等,因为不是所有的东西都将被设置为相同的)。 这是一个好主意(例如关于反弹等)? 在postfix中实现这个的正确方法是什么(类似Apache HTTP Server中的反向代理)?

  2. 什么是从旧服务器到新服务器进行域名转移的最佳方式,这样停机时间最less(至less在IMAP帐户转移时,我确信我需要停止所有邮件服务器),并且没有邮件丢失/被推迟? 我曾想过让旧服务器将邮件转发到新服务器一段时间,以便可以从DNScaching过时的系统收到邮件。

一般来说,我正在寻找一个方便和最佳实践的方式来执行此操作。 而且,我不知道,如果我对这两个问题的看法都指向了正确的方向。

我通过让旧服务器1.1.1.1将所有邮件转发到新服务器1.1.1.2来做到这一点。 在旧服务器1.1.1.1上使用postfix,可以执行以下操作,将每个传入邮件的副本发送到其他服务器:

  1. 在每个邮件中添加一个盲人收件人为一些假域。 例如,对于[email protected] ,BCC收件人[email protected]被添加到每个邮件
  2. configuration这个虚假的域名被传送到你的新服务器。 因此,邮件example.migration被传送到1.1.1.2
  3. 在传递到新服务器的过程中,将这个伪造的域名转换回正常状态。 因此,在SMTP发送时,用example.migrationreplaceexample.com

为此,请创build以下文件:

  • /等/后缀/迁移/ recipient_bcc_map:

     /^(.*)@example\.com$/ [email protected] 
  • /等/后缀/迁移/ transport_map:

     example.migration smtp:[1.1.1.2] 
  • /等/后缀/迁移/ 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 

2.3版本的Postfix避免了在这个configuration中的反弹。 因此,如果在1.1.1.2发生错误,则不会返回它们(请参阅http://www.postfix.org/postconf.5.html#recipient_bcc_maps )。

现在所有邮件都作为副本交付给1.1.1.2 。 使用此设置,您可以testing所有迁移的东西,如新服务器上的filter。 确保/etc/aliases同步。

要执行迁移本身:

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

对于收到的邮件,宕机时间最短,因为它们只在步骤2和3之间延迟。

要回答2号码:

将当前MXlogging上的TTL设置为适当的设置(1小时可能会更好)。 然后更改MXlogging以指向新的服务器。 然后等待一小时(或任何您设置TTL的时间),以获取可能传送到旧服务器的任何电子邮件(基于某些系统具有caching的旧MXlogging),然后将电子邮件从旧服务器传输到新的服务器。

将MXlogging更改为指向新服务器后,任何尚未cachingMXlogging(旧MXlogging)的电子邮件服务器都将立即parsing新的MXlogging,并在此处发送电子邮件。 任何确实拥有MXlogging(旧MXlogging)的电子邮件服务器都将继续向旧服务器发送电子邮件,直到MXlogging的TTL到期为止,届时,他们将对MXlogging执行新的查找,find新的MXlogging并在那里发送邮件。

除了使用像Roundhouse这样的软件将镜像传送到第二台服务器之外,没有任何办法可以完全testing。 这个级别的testing可能不是必要的; 使用telnet进行手动入站testing应该没问题。

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

  1. 在1.1.1.1上设置postfix将所有的用户邮件发送到新的服务器1.1.1.2。 示例configuration: 当您的系统是SECONDARY MX主机…
  2. 为1.1.1.2添加一个新的mxlogging并删除现有的logging。 当1.1.1.1上的队列为空时,closurespostfix强制发送者传递给新的mx。
  3. 将客户端访问cname从1.1.1.1移动到1.1.1.2(客户端需要知道他们现有的邮件可能不会出现)。
  4. 将邮箱内容从1.1.1.1转移到1.1.1.2
  5. 当出站邮件队列为空时,closures1.1.1.1

邮件将在发件人排队,如果他们cachingjoeqwerty说, 根据我的经验,大多数软件会尝试其他mxlogging。 请注意,mxlogging应该指向实际的主机名称,而不是诸如mail.example.com的cname。 硬件是pipe理客户端访问; 及早与客户沟通将有所帮助。