У меня есть три почтовых маршрутизатора на базе Linux, которые запускают postfix и ретранслируют почту на наш локальный сервер обмена, а также на outlook.com, разделяя почту на основе атрибутов ldap. То, что я время от времени наблюдал после обновления этой весной с Exchange 2007 до 2010, так это то, что все три почтовых реле в течение примерно 20 минут не могли подключиться к обмену.
Postfix регистрирует это как «потерянное соединение с exchange.contosso.edu»; эта проблема почти всегда возникает со всеми тремя почтовыми ретрансляторами одновременно и длится чуть менее 20 минут. Если я могу поймать это, пока это происходит, и я вручную выполняю "telnet exchange.contosso.edu 25" с одного почтового реле и принудительно отправляю сообщение (helo, mail from, rcpt to, data и т.д.), тогда он очищает это реле вверх.
«Сервер» обмена - это фактически две машины с ролью HT на них, балансировка нагрузки осуществляется через Windows NLB.
Я очень много работал, чтобы выяснить, что происходит со стороны постфикса, и я не вижу никаких доказательств какого-либо плохого поведения. У меня вопрос, как решить проблему со стороны биржи? Есть ли журнал подключений, или настройка отладки, или что-то, что я могу сделать, чтобы регистрировать все входящие подключения и сообщать мне, что заставляет обмен их отбрасывать?
После многочисленных неудачных запусков - исключения NLB из уравнения, настройки postfix queue_run_delay, отключения масштабирования окна TCP на машинах postfix, решением было отключить smtp_connection_cache_on_demand в main.cf postfix:
postfix -e 'smtp_connection_cache_on_demand = no'
postfix reload
Я не знаю, виноват ли обмен в тихом закрытии соединений, или постфикс виноват, или стек TCP Windows 2008, или Linux, но отключение smtp_connection_caching решило нашу проблему.