我们设置了一个多租户电子邮件中继,其传输图文件如下所示:
domain1.com smtp:mail.domain1.com
domain2.com smtp:mail.domain2.com
domain3.com smtp:mail.domain3.com
[etc]
如果 mail.domain1.com 发生故障,postfix 服务器将保留 domain1.com 的电子邮件,直到 mail.domain1.com 再次开始响应。但是,我们的一位客户在其站点上有一条备用 DSL 线路,他们的电子邮件服务器也可通过该线路使用。如果第一个主机不可用,我该如何告诉传输将故障转移到其他主机?
澄清 我认为此设置的目的有些令人困惑。此 postfix 服务器是针对现场没有 AV 和垃圾邮件保护的客户端的入站邮件中继。它是一对服务器之一,配置为这些客户的 2 个 MX 记录。他们接收并清理电子邮件,然后将其转发到本地邮件服务器,并在他们那一端发生中断时充当缓冲区。这些客户通常没有多个现场邮件服务器,他们太小,因此需要此服务。但他们通常拥有的是辅助连接,例如光纤和 DSL,因此如果第一个连接无法访问,我希望能够将转发的 SMTP 定向到他们的第二个连接。
答案1
您可以添加一个故障转移服务器,声明一个指向故障转移 IP 的新 MX DNS 记录(我猜如果服务器外部 IP 在 DSL 线路后面进行 NAT,它将会改变)。
新的 MX 记录的权重值将低于默认 MX 记录,这将阻止在默认/主服务器可访问时使用它
答案2
第一个问题是“为什么”。
如果您的 DNS 设置正确,则通过 mail.example.com 中继到 example.com 的邮件是自动的;这就是它应该工作的方式。
为什么你要绕过正常的电子邮件流程?
如果答案是“因为我们不能使用 DNS”,那么您的 transport_maps 中根本不应该有主机名;使用带括号的 IP 文字:
example.com smtp:[1.2.3.4]
example.net smtp:[5.6.7.8]
至于故障转移部分:如果中继域列表不大,您可以将名称解析设置为“本机”,并将多个 IP 放在 /etc/hosts 文件中:
1.2.3.4 mail.example.com
1.2.3.5 mail.example.com
5.6.7.8 mail.example.net
5.6.7.9 mail.example.net