我们在 Ubuntu Server 18.04.1 LTS 上运行 Exim4 邮件服务器版本 4.90.1,该服务器位于 DMZ 中,并将电子邮件从 LAN 发送到互联网。
有时(也许每 24 小时成功发送的数千封邮件中有几封邮件)Exim 会出现临时的 dns 问题,因此会延迟邮件:
defer (-1):主机查找未完成
但是,当我进行手动 DNS 测试(例如使用 dig)时,对于接收域来说,获取 MX 记录没有问题。
Exim 推迟了邮件,并在下次尝试时(20 或 30 分钟后),邮件正常发送出去,不再有 DNS 问题。
我们还没有找到为什么有时数千封邮件中的一些罕见邮件会出现短 dns 问题。但我认为软件(在本例中为 exim)应该足够强大,能够处理几秒的 DNS 超时。在示例中,我们的绑定 DNS 服务器在查询错误日志中有以下条目:
22-Aug-2023 17:20:28.639 query-errors: debug 1: client @0x7f56f74b2050 195.xxx.xxx.87#45395 (examplecustom.com): query failed (SERVFAIL) for examplecustom.com/IN/MX at ../../../bin/named/query.c:8402
下面您将看到一个示例案例,由于上述错误,邮件延迟了 20 分钟才完成。
我的问题是:我们如何配置 Exim,使其在 20 分钟内每分钟重试 DNS 查找错误?因此,在最好的情况下,当 DNS 问题持续几秒钟时,邮件会在一分钟后发送,此时重试即可。目前,延迟最长可达 30 分钟,这是不可接受的。
我读过了https://www.exim.org/exim-html-current/doc/html/spec_html/ch-retry_configuration.html并尝试了以下行/etc/exim4.conf.template
:
# DNS(Lookup) retry every minute for 20 minutes, first
* lookup F,20m,1m; G,16h,1h,1.5; F,4d,6h
# This is Exim default rule
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
但不幸的是,这并没有改变任何事情,下面的示例是在上述额外规则处于活动状态时发生的。我们已经QUEUEINTERVAL='10m'
设定在/etc/default/exim4
.在此示例中,我希望邮件在 17:28:47 发送,但 Exim 却说"retry time not reached"
我们又损失了 12 分钟。我希望当时已经达到了重试时间。这种激进的重试设置应该专门针对 DNS 查找错误。
2023-08-22 17:20:19 1qBTYB5-0006NM-Nv <= [email protected] H=(smtp.example.com) [10.10.10.62] P=esmtps X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no K S=2478 [email protected]
2023-08-22 17:20:28 1qBTYB5-0006NM-Nv == [email protected] R=dnslookup defer (-1): host lookup did not complete
2023-08-22 17:28:47 1qBTYB5-0006NM-Nv == [email protected] routing defer (-51): retry time not reached
2023-08-22 17:40:59 1qBTYB5-0006NM-Nv => [email protected] R=dnslookup T=remote_smtp H=mx01.hornetsecurity.com [94.100.132.8] X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes C="250 2.0.0 OK accept as AC027FA06BA:4f234742f62fac6098baf99d16db6d79 by mx-gate97-hz1"
2023-08-22 17:40:59 1qBTYB5-0006NM-Nv Completed