我有一个场景:
- Postfix 服务器 M(存储邮件)
- Postfix 服务器 A(使用互联网连接 IA 中继邮件)
- Postfix 服务器 B(使用互联网连接 IB 中继邮件)
- 内部 DNS 服务器(执行本地名称解析)
服务器 M、A 和 B 位于同一个网络 LAN 中,这意味着即使互联网连接 IA 和 IB 断开,M 和 A 与 M 和 B 之间的通信也不会断开,因此我不能为此使用 Postfix 的 smtp_fallback_relay 选项。
现在,我需要服务器 M 仅提交给在中继时具有互联网连接的服务器。
我们怎样才能做到最好?
我们尝试过
我和我的同事分享了两种替代方案(并非详尽无遗):
- 创建脚本,使中继邮件从邮件存储 (M) 感知的“LAN”脱机,以便它返回到其后备中继
- 在 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 是存储转发协议。