web-dev-qa-db-ja.com

SendmailDNSタイムアウト期間を短縮する方法

DNSの問題がある電子メールアドレスに送信しようとすると、sendmailDNSタイムアウト期間に問題があります。問題のあるメールアドレスが[email protected]だとしましょう

次を使用して、このドメインにDNSの問題があることがわかります。

>Host -t mx example.com
;; connection timed out; no servers could be reached

次を使用して、問題のある電子メールアドレスへのsendmail呼び出しをテストして時間を計ることができます。

> time echo "This is a test message" | /usr/lib/sendmail [email protected] [email protected]
real 2m36.252s
user 0m0.004s
sys  0m0.005s

現在、sendmailがタイムアウトするまでに2分36秒かかります!これにより、このメールアドレスに送信しようとするPHP Webページがハングし、最終的にブラウザにエラーが返されます。

私の質問は:このタイムアウトを減らすにはどうすればよいですか?

Sendmailに関連するタイムアウト構成をいくつか見てきました。

> grep resolver /etc/mail/sendmail.cf
Timeout.resolver.retrans=5s
Timeout.resolver.retry=4

Sendmailは4回再試行するように設定されているようで、再送信ごとに5秒の遅延があります。

しかし、実際のDNSタイムアウト期間が見つかりませんか?

参考:これは、Red Hat Enterprise Linux Serverリリース5.2、sendmail 8.13.8、Linuxカーネル:2.6.18、Apacheバージョン:2.2.3、PHP =バージョン:5.3.0注:この質問はフォローアップですfrom 一部のメールアドレスでSendmailの遅延

3
Tom

簡単な回避策として、/ etc /resolv.confをいじることができます。もちろん、これによりシステムリゾルバーの動作が変わります。これはsendmail固有の問題ではありません。

timeout: n
    sets the amount of time the resolver will wait for a response from a remote name server before retrying the query via a different name server. Measured in seconds, the default is RES_TIMEOUT (see <resolv.h> ). 
attempts: n
    sets the number of times the resolver will send a query to its name servers before giving up and returning an error to the calling application. The default is RES_DFLRETRY (see <resolv.h> ). 

長期的には、上記はあまり良い解決策ではありません。 DNSサーバーの設定が壊れているため、修正する必要があります。存在しないMX /ドメインに関するクエリがある場合、サーバーはNXDOMAINで迅速に応答する必要があります。一般に、多くのプログラム(初心者向けのsendmailだけでなく、通常はsshdやNFS)であらゆる種類の問題が発生するため、それほど長く待つべきではありません。

1
kubanczyk