Postfix:回退到可以访问互联网的 SMTP 中继

Postfix:回退到可以访问互联网的 SMTP 中继

我有一个场景:

  1. Postfix 服务器 M(存储邮件)
  2. Postfix 服务器 A(使用互联网连接 IA 中继邮件)
  3. Postfix 服务器 B(使用互联网连接 IB 中继邮件)
  4. 内部 DNS 服务器(执行本地名称解析)

服务器 M、A 和 B 位于同一个网络 LAN 中,这意味着即使互联网连接 IA 和 IB 断开,M 和 A 与 M 和 B 之间的通信也不会断开,因此我不能为此使用 Postfix 的 smtp_fallback_relay 选项。

现在,我需要服务器 M 仅提交给在中继时具有互联网连接的服务器。

我们怎样才能做到最好?

我们尝试过

我和我的同事分享了两种替代方案(并非详尽无遗):

  1. 创建脚本,使中继邮件从邮件存储 (M) 感知的“LAN”脱机,以便它返回到其后备中继
  2. 在 DNS 服务器 (D) {或 M 上的 etc 主机中创建一个脚本,无论哪个更好,但对于 M 来说 DNS 必不可少},该脚本会改变 mail-relay.ourdomain.com 以指向具有互联网访问权限的服务器邮件中继 A 或 B,并且 TTL 足够小(例如 5 秒)

这两个选项在大多数情况下都有效,我需要的是为什么它们不起作用(使用其中一个有任何危险吗)?

答案1

这两种方法的问题在于赛车状况,即您的互联网正在运行,A 或 B 确认已成功交付给他们,但是,当 A 或 B 尝试将其转发到互联网时,连接却断开了。

上述情况是可能的,因为电子邮件在 Postfix 中流动的方式。

Email from client ---> Received ---> Queued -> Sent

当邮件进入队列时,服务器 A 中的 Postfix 将向 M 发送确认信息,表示邮件已被 A 接受。因此,当 Postfix 尝试将邮件发送到互联网时,连接可能会被切断,您的邮件将排队,直到连接再次恢复。

注意:此行为在典型的 MTA 中是预料之中的。请记住,SMTP 是存储转发协议。

相关内容