sendmail 是否缓存 DNS 或通过与 host/dig/nslookup 不同的方法获取它?

sendmail 是否缓存 DNS 或通过与 host/dig/nslookup 不同的方法获取它?

我们有一台 Linux 服务器正在运行sendmail,它通过我们的主邮件服务器中继电子邮件,但自从上周更改 DNS 服务器以来,它一直无法连接到我们的邮件服务器。经过进一步调查,/var/log/maillog显示如下行,包括不正确邮件服务器的 IP 地址:

Apr  4 15:37:32 yip sendmail[20583]: p34JVgLE020540: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:05:50, xdelay=00:02:00, mailer=esmtp, pri=258071, relay=mailserver.domain.tld. [xxx.xxx.xxx.xxx], dsn=4.0.0, stat=Deferred: Connection timed out with mailserver.domain.tld.

现在,我们上周已通过编辑 更新了 Linux 服务器的 DNS 服务器以及迁移/etc/resolv.conf。在 Linux 服务器上运行dig mailserver.domain.tldhost mailserver.domain.tldnslookup mailserver.domain.tld都会导致返回正确的 IP 地址。哪里可能sendmail获取/缓存错误的 IP 地址,我该如何解决该问题?

答案1

  • 重新开始sendmail
  • 重新启动nscd(如果系统正在使用)。

还要确保你有正确的MX 记录条目. Sendmail 依赖于 MX 查找。

尝试看看是否能得到正确的主机。如果没有,您可以使用通常位于 /etc/mail/ 中的文件dig mx domain.tld强制 sendmail 发送发往特定域的邮件。mailertable

典型的 mailertable 条目如下所示:

xxx.com esmtp:[192.168.1.2]

其中“xxx.com”是域名,并明确说明了用于交付的IP。

答案2

发送邮件在重新查询 DNS 之前缓存有关主机状态的信息。调整 Timeout.hoststatus 可以改变这种情况,但对于您的特定情况,重新启动 sendmail 是可行的方法(而不是等待超时到期)。

答案3

Sendmail 本身不进行任何缓存,它依赖于本地名称服务器。

有几件事值得检查,尽管你可能已经完成了:

  • 检查 /etc/hosts 中没有中继服务器的条目,该服务器将优先于 DNS
  • 检查 Sendmail 解析器选项,看看它是否实际设置为使用 DNS
  • 确保 /etc/resolv.conf 仅指向更新的 DNS 服务器,并且其中 1 个不会返回旧值。通过运行 nslookup 并为每个 DNS 服务器输入“server 1.2.3.4”手动执行此操作,请记住,如果设置为具有重复条目,它可能会在重复查询中返回 2 个不同的 IP。我已经多次看到这种情况了。

我知道这些都是很基础的,但是对于一个非常匆忙的管理员来说,很容易犯像这样的简单错误。

相关内容