我有三个基于 Linux 的邮件路由器,它们运行 postfix 并将邮件转发到我们的内部 Exchange 服务器以及 outlook.com,并根据 ldap 属性拆分邮件。自从今年春天从 Exchange 2007 升级到 2010 以来,我偶尔观察到,所有三个邮件中继器都会在大约 20 分钟内无法连接到 Exchange。
Postfix 将其记录为“与 exchange.contosso.edu 失去连接”;此问题几乎总是同时发生在所有三个邮件中继上,持续时间略短于 20 分钟。如果我能在问题发生时抓住它,并且我手动从一个邮件中继执行“telnet exchange.contosso.edu 25”并强制通过一条消息(helo、mail from、rcpt to、data 等),那么它就会清除该中继。
交换“服务器”实际上是两台具有 HT 角色的机器,通过 Windows NLB 进行负载平衡。
我已经非常努力地弄清楚了 postfix 方面发生了什么,但我没有看到任何不当行为的证据。我的问题是,我该如何从交换方面解决问题?是否有连接日志、调试设置,或者我可以做些什么来记录所有入站连接并告诉我是什么导致交换丢弃它们?
答案1
经过多次错误的尝试 - 去掉 NLB、调整 postfix 的queue_run_delay、禁用 postfix 机器上的 TCP 窗口缩放,解决方案是在 postfix 的 main.cf 中禁用“smtp_connection_cache_on_demand”:
postfix -e 'smtp_connection_cache_on_demand = no'
postfix reload
我不知道是 exchange 在默默关闭连接时出了问题,还是 postfix 出了问题,或者是 Windows 2008 TCP 堆栈出了问题,或者是 Linux 出了问题——但禁用 smtp_connection_caching 解决了我们的问题。