社内のネットワーク環境を変えて、CISCO ASA5520でIPマスカレードを行なわせるようにして、インフラの最上位に設置したら、社外に設置しているメールサーバのとの間で遅延が発生するようになった。
原因はメールサーバで動いているtcpserver。
SMTPリクエストを処理する前に、リクエスト元にIDENTパケットを発信して応答を確認している。
CISCO ASA5520ではデフォルトでIDENTパケットを破棄するようになっている。
その為、メールサーバは送ったIDENTパケットが戻ってこない為、すぐにSMTPリクエストを処理できない。
応答がない場合でも最終的にSMTPリクエストの処理は行うが、毎回十数秒待たされると利用する側のストレスが溜まってしまう・・・。
解決方法がないかと探していたら、service resetinboundをグローバル側のインタフェースに設定する事で解決できた。
設定後の動きとしては、IDENTパケットに対して破棄ではなくリセット信号を返信するようになる。
リセット信号を受信したメールサーバはIDENT処理を終了し、すぐSMTP処理に移行する。
別の対処法として、メールサーバの起動スクリプトで、tcpserver -HRとオプションを付ける事で、そもそもIDENTパケットを飛ばさないようになる。