Назад | Перейти на главную страницу

Не могу отправлять большие сообщения с помощью Sendmail CentOS 5

Недавно я заменил сервер Fedora Core 3 сервером с CentOS 5 для ретрансляции почты в DMZ.

Моя проблема в том, что когда сервер отправляет сообщения определенной удаленной организации, сообщения размером более 500 КБ не отправляются должным образом. Кажется, что они где-то зависают во время передачи, тайм-аут, затем после предсказуемых повторных попыток истекает в очереди.

Sendmail описывает проблему как: MDeferred: Превышено время ожидания соединения с [сайтом].

Большие (или более крупные) сообщения успешно отправляются во все остальные удаленные системы, с которыми мы тестировали. У нас проблемы только с этой единственной организацией. Точно так же мы можем отправлять большие или большие сообщения в эту организацию, если наш ретранслятор CentOS 5 не задействован.

Мы потратили много времени на трассировку пакетов, которая оказалась не очень полезной. Похоже, что после определенной глубины передачи другая сторона начала запрашивать повторную передачу пакета, что мы и сделали, но повторно переданные пакеты никогда не доходили до их стороны.

Возникновение с iptables (т.е. полное отключение) тоже не помогло.

Сегодня мы помещаем систему XP в демилитаризованную зону в качестве однорангового узла для ретранслятора, и она может нормально отправлять сообщения в удаленную организацию, в то время как ретранслятор не может. Это, на мой взгляд, исключает все брандмауэры и сетевые пути между нами и удаленной организацией и указывает пальцем прямо на почтовый ретранслятор.

Учитывая, что я повторно посещаю этот sendmail после его настройки для Fedora Core 3, могу ли я сделать что-то не так при настройке этой системы, что проявится таким образом?

В большинстве случаев, когда я сталкивался с этой проблемой, я отключаю масштабирование окна TCP, и проблема решается. В твоем /etc/sysctl.conf добавьте следующие строки внизу:

net.ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_window_scaling = 0

Затем от имени root выполните sysctl -p и посмотрим, что произойдет. Учтите, что это не решение проблемы, а просто обход. Я обнаружил, что такое поведение запускается, включая переключатели, к которым подключены ваши машины, фактические кабели, версию программного обеспечения некоторого промежуточного устройства, а также различные комбинации драйвера Ethernet tg3 и наборов микросхем. Вы даже можете заметить, что если вы установите другую операционную систему (скажем, OpenBSD) на тот же компьютер, проблема исчезнет.

Я также видел, как другие устанавливали MTU на 500, чтобы это ушло.

Но, как я уже сказал, я предложил возможный обход, а не решение вашей проблемы.