このページの本文へ

サーバトラブル解決のセオリー 第8回

いつもメーラの設定ミスとはいい切れない

メールサーバからメールが送信されない

2009年08月21日 09時00分更新

文● のりぞう

  • この記事をはてなブックマークに追加
  • 本文印刷

メールサーバに未送信のメールが溜まる

 メールサーバは配送するメールを一時的に保管して実際の送信に備える。このとき保管する領域を「メールキュー」という。配送が済んだメールはメールキューから削除されるが、送信先のメールサーバに接続できないなどの理由で配送が完了しないメールはここに残され、一定時間後に再び配送が試行される。

 メールサーバソフトウェアにsendmailやPostfixを利用している場合は、mailqコマンドでメールキューに溜まったメールを確認できる。画面1の例では、送信先のメールサーバ“norisvr01.example.com”への接続がタイムアウトしたために、3通のメールがキューに残って再送を待っている。このことからどのような原因が考えられるだろうか。

画面1 sendmailでメールキューに溜まっているメールを調べる。mailqコマンドを実行すると、メールキューの内容を表示できる。この例では3通のメールが滞留している。いずれも“norisvr01.example.com”という送信先メールサーバに接続できないのが原因であることがわかる

一時的なサーバダウン

 “norisvr01.example.com”以外のメールサーバに送信されるメールが正常に配送されているなら、何らかの理由により“norisvr01.example.com”がダウンしている可能性が高い。通常、メールサーバソフトウェアは配送に失敗してキューに残ったメールを何度か再送信しようとする。その間に送信先のメールサーバが復活すればメールは無事に送信される。

 サーバに設定された期間を過ぎても配送できなければ、送信者にエラーメールが返送される。ほかのネットワークから送信したメールにもエラーメールが返ってくるようであれば、先方に問い合わせたほうがよいだろう

DNSのデータ不整合

 もう1つ考えられる原因はDNSが障害を起こしていたり、正しい配送先を示していないというものだ。インターネットを介してメールを送信するメールサーバは、DNSの仕組みを利用して送信先のメールサーバを特定する。DNSにはMX(Mail eXchanger)レコードというメールサーバを示す情報があり、送信先メールアドレスのドメインパートに対応するMXレコードが送信先のメールサーバになる。

 MXレコードを調べた結果が正しくないと、送信先のメールサーバに接続できなくなるのはいうまでもない。DNSのレコードを更新する管理者の設定ミスのほか、DNSキャッシュの内容が正しく更新されず古い情報が提供されている可能性もある。

 bindをはじめ、多くのDNSサーバソフトウェアは、検索した結果をキャッシュしてレスポンスを向上させるとともにネットワークの負荷を軽減するようになっている。キャッシュの生存時間(TTL:Time To Live)は、DNSのレコードごとに設定されているものの、DNSサーバによってはそれに従わずもっと長期にわたってキャッシュを保持するものがある。キャッシュの内容が最新かどうかを確認するには、キャッシュサーバと対象ドメインに権威を持つ(そのドメインを担当する)DNSサーバ双方に問い合わせて結果を比較すればよい。

キャッシュの整合性チェック

 画面2はWidnows XPのnslookupコマンドを用いて“nmag.jp”のMXレコードを調べた結果だ。DNSサーバを指定していないので、システムで設定されているサーバ(ns.example.com:キャッシュ機能あり)に問い合わせている。キャッシュサーバは“nmag.jp”に対応するメールサーバはmail.nmag.jpで、IPアドレスは202.181.97.86だと返答した。また、nmag.jpドメインに権威を持つDNSサーバはns2.dns.ne.jpとns1.dns.ne.jpであることもわかる。

画面2 キャッシュ機能を持つローカルDNSサーバでnmag.jpのMXレコードを検索。Windowsのnslookupコマンドでは“-querytype=”オプションで検索するレコードの種類を指定する

 次に、“nmag.jp”ドメインに権威を持つns1.dns.ne.jpに同じ問い合わせを行なった。下の画面3の結果を見ると、メールサーバのホスト名とIPアドレスいずれも先の画面2と同じなので、キャッシュサーバが保持している情報は正しいとわかった。

画面3 nmag.jpドメインに権威を持つDNSサーバでMXレコードを検索。nmag.jpドメインのDNS情報を管理するサーバに直接問い合わせるので、キャッシュの影響を受けない

 UNIX系のOSで調べる場合は、digコマンドかnslookupコマンドを使う。digを使う場合は、

$ dig nmag.jp MX
$ dig @ns1.dns.ne.jp nmag.jp MX

を実行すると、それぞれ画面2、画面3と同じことを調べられる。また、キャッシュの生存時間も表示される。

(次ページ、「ローカルメールサーバがすぐにエラーを返してくる」に続く)


 

カテゴリートップへ

この連載の記事