当主服务器超时时,Postfix 不会尝试辅助服务器

当主服务器超时时,Postfix 不会尝试辅助服务器

感觉这个问题应该之前就问过,也许我用的语言不对,但经过 2 个小时的搜索,我还是不知道如何解决这个问题。

我的出站 Postfix 电子邮件队列中有一条消息,其中主电子邮件服务器已关闭(日志中显示“连接超时”),并且 Postfix绝不尝试辅助服务器(或优先级较低的服务器)。

它会连续几天重试(当前配置),然后最终弹出,并且没有提及辅助服务器。

我正在运行 postfix 2.8。

唯一可能与此相关的选项是 smtp_skip_quit_response 和 smtp_skip_5xx_greeting(我确信还有更多,但不确定是什么),但由于没有与服务器的连接,所以没有响应代码,我认为这些设置是正确的(都设置为是)。

我希望发生的是,如果连接主服务器时出现问题,它会尝试连接辅助服务器(我知道这听起来很明显)。

另一件值得注意的事情是(失败的)主服务器的 A 记录解析为多个 IP 地址(它是 A 记录,而不是 CNAME)。

日志如下所示(删除了大量重复内容):

Mar  2 02:00:04 postfix/qmgr[2672]: D78739817D8: from=<[email protected]>, size=24736, nrcpt=1 (queue active)
Mar  2 02:02:34 postfix/smtp[18263]: D78739817D8: to=<[email protected]>, relay=none, delay=294106, delays=293955/0.02/151/0, dsn=4.4.1, status=deferred (connect to mx1.example.com[192.0.2.4]:25: Connection timed out)
Mar  2 03:10:04 postfix/qmgr[2672]: D78739817D8: from=<[email protected]>, size=24736, nrcpt=1 (queue active)
Mar  2 03:12:35 postfix/smtp[22822]: D78739817D8: to=<[email protected]>, relay=none, delay=298306, delays=298156/0/151/0, dsn=4.4.1, status=deferred (connect to mx1.example.com[192.0.2.161]:25: Connection timed out)
Mar  2 04:20:04 postfix/qmgr[2672]: D78739817D8: from=<[email protected]>, size=24736, nrcpt=1 (queue active)
Mar  2 04:22:05 postfix/smtp[28734]: D78739817D8: to=<[email protected]>, relay=none, delay=302477, delays=302356/0.01/121/0, dsn=4.4.1, status=deferred (connect to mx1.example.com[192.0.2.152]:25: Connection timed out)
...
Mar  3 15:20:03 postfix/qmgr[16791]: D78739817D8: from=<[email protected]>, size=24736, nrcpt=1 (queue active)
Mar  3 15:22:34 postfix/smtp[20853]: D78739817D8: to=<[email protected]>, relay=none, delay=428506, delays=428355/0/151/0, dsn=4.4.1, status=deferred (connect to mx1.example.com[192.0.2.167]:25: Connection timed out)
Mar  3 16:30:03 postfix/qmgr[16791]: D78739817D8: from=<[email protected]>, size=24736, nrcpt=1 (queue active)
Mar  3 16:31:04 postfix/smtp[30310]: D78739817D8: to=<[email protected]>, relay=none, delay=432615, delays=432555/0/60/0, dsn=4.4.1, status=deferred (connect to mx1.example.com[192.0.2.236]:25: Network is unreachable)
Mar  3 16:31:04 postfix/qmgr[16791]: D78739817D8: from=<[email protected]>, status=expired, returned to sender
Mar  3 16:31:04 postfix/bounce[30772]: D78739817D8: sender non-delivery notification: 3036F14E0002
Mar  3 16:31:04 postfix/qmgr[16791]: D78739817D8: removed

答案1

这让我朝着正确的方向寻找,在这种情况下,解决方案就是smtp_mx_address_limit = 20设置main.cf

为了澄清起见,域配置是:

  • 2 个 MX 记录(成本 10 和 20)。
  • 第一个MX记录有5个A记录。
  • 第二条 MX 记录有 2 个 A 记录。

默认smtp_mx_session_limit值为 5,您会注意到,这与主 MX 记录的 A 记录数相匹配,因此 Postfix 从未查看前 5 个 IP 以外的 IP。在本例中,将其设置为大于 5 的任何值都会有所帮助,但对于我们的配置,我将保留一个稍大的值,以帮助处理目前存在的 CDN 等的数量。

希望其他人发现这很有用,因为我在其他地方找不到它!

答案2

我想你可能会发现你遇到了后缀的一些内部限制,因为Viktor 在后缀上列表说:

..with a static preference, Postfix may fail deliver mail to a 
reachable destination, just because enough IPv4 or enough IPv6 
addresses are dead.  Remember, Postfix tries a limited number of 
MX addresses per delivery. 

可能,您在过去 24 小时内也曾成功向其中一个服务器发送过一封邮件,而 Postfix 将缓存成功的 MX 记录。

我想说你有两个选择,刷新队列postqueue -f,这将强制 Postfix 执行另一个 MX 查找,或者为该域设置一个临时传输,使用辅助 MX 记录作为传输example.com smtp:secondary.mx.servername

相关内容