この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
SE時代の2004年頃、客先に常駐していたときのことです。それまで何事もなく動いていたシステムからアラートメールが来なくなり、夕方になって初めて気づきました。気づいたきっかけも情けない話で、別の作業をしていた同僚から「今日、メール来てる?」と声を掛けられたからです。
すぐにメール送信ができなくなっていることを確認し、私が最初に疑ったのはPostfixでした。当然の判断だと思います。しかし2時間後、原因はPostfixではなくDNSにあることがわかりました。
この記事では、20年以上サーバーを運用してきた経験から、あの日の失敗が教えてくれた「障害診断で疑う範囲を広げる」という考え方についてお話しします。
この記事のポイント
・障害対応では「最も詳しいレイヤー」だけを掘り続けることが最大の落とし穴
・メール送信不可はPostfixだけでなくDNS(名前解決)まで疑う範囲を広げる
・行き詰まったら「隣のレイヤー」を確認し、外部からのテストも必ず入れる
・ログに「送信拒否の理由が見えない」ときはDNS/ネットワーク起因を疑うサイン
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜ私はPostfixを2時間疑い続けたのか
人はトラブルが起きると、自分が一番よく知っている場所から調べ始めます。私の場合、Postfixの設定を日常的に触っていたので、まずそこを疑うのは自然な判断でした。しかし、これが落とし穴でした。「自分がよくわかっている場所」は調べやすい。だから、そこに答えがないとわかっても、別の可能性を疑うのが遅くなるのです。
セミナーで3,100名以上を指導してきた中でも、この「詳しい場所に執着して時間を溶かす」パターンは本当によく見ます。特にLinuxを学び始めて2~3年目の方に多い傾向があります。
2時間で確認したこと、できなかったこと
1. maillogに向き合い続けた
まず/var/log/maillogを開きました。PostfixのSMTPプロセスがエラーを出しているはずだと思って。# /var/log/maillogの該当部分(ホスト名・アドレスはマスク済み) Sep 15 14:32:18 srv01 postfix/smtp[2841]: 3A9F62C8D1: to=
, relay=none, delay=30, status=deferred (Host or domain name not found. Name service error for name=client-xx.co.jp type=MX: Host not found, try again) Sep 15 14:33:20 srv01 postfix/smtp[2841]: 3A9F62C8D1: to= , relay=none, delay=30, status=deferred (Name service error for name=internal.co.jp type=MX: Host not found, try again)
しかしあのときの私は「relay=none」と「deferred」にしか目がいかず、「PostfixのMX参照設定が何かおかしい」と思い込んでいました。
2. main.cfを何度も見直した
/etc/postfix/main.cfの設定を何度も確認しました。relayhost、mydestination、mynetworks。いずれも変更した覚えはなく、設定値に問題も見当たりません。「設定は正しいはずなのに、なぜ動かない。」
ここで一度立ち止まれればよかったのですが、私は「見落としがあるはずだ」という気持ちでもう一巡、同じ設定ファイルを見直しました。
3. 行き詰まったとき、同僚に声をかけた
2時間が経った頃、同僚のSEに「ちょっとPostfixの設定見てもらえますか」と声をかけました。彼が一瞥して言ったのが「これ、DNSじゃないですか」という一言でした。そのときの「…あ」という感覚を今でも覚えています。
メール送信エラーの正体|原因はDNSの名前解決だった
1. pingで一発で確認できた
同僚に言われた瞬間、外部ドメインへのpingを打ちました。# 外部ドメインへのping(名前解決の確認) # ping -c 1 client-xx.co.jp ping: client-xx.co.jp: Name or service not known # 内部IPへの直接pingは通る(ネットワーク自体は生きている) # ping -c 1 192.168.x.x PING 192.168.x.x: 56 data bytes 64 bytes from 192.168.x.x: icmp_seq=0 ttl=64 time=0.4 ms # /etc/resolv.confを確認(ネームサーバーのIPを確認) # cat /etc/resolv.conf nameserver 192.168.x.1
/etc/resolv.confには正常に見えるネームサーバーのIPが記載されていましたが、そのDNSサーバー自体がメモリ過負荷で停止していました。それを調べるのは別チームの担当でしたが、すぐにresolv.confのネームサーバーを別のIPに差し替えることで復旧しました。
Postfixは何も悪くなかった。設定を2時間眺め続けた時間は、ほぼ無駄でした。
あの失敗から身についた障害診断の考え方
1. 「行き詰まり」を感じたら、隣のレイヤーを疑う
OSI参照モデルを持ち出すまでもなく、システムはレイヤー構造になっています。Postfixが送信できないとき、問題は「アプリ層(Postfix)」かもしれないし、「名前解決(DNS)」かもしれないし、「ネットワーク」かもしれない。20年以上の運用経験から言うと、「同じレイヤーを30分以上掘っても答えが出ないとき」は一度止まって隣のレイヤーを確認するのが鉄則です。あのときの私にはその習慣がありませんでした。
2. 「外部から見た動作」を早めに確認する
今の私がメール障害に当たったとき、最初の5分以内にやることは次の4つです。・メールの送受信テスト(自分のアドレスへの送信確認)
・外部ドメインへのping(名前解決の確認)
・/var/log/maillogの直近10行確認(エラーメッセージの文字列確認)
・dig コマンドでMXレコードが引けるか確認
この手順を決めておくことで、調査の入り口でDNSを疑う機会が自然に生まれます。システムの内側だけを見るのではなく、外部から見た動作も最初のチェックリストに入れておくことが重要です。
3. ログに「理由が出ていない」は、別レイヤーのサインかもしれない
Postfixのログにエラーが少ない場合、「Postfix自体は問題なく動こうとしている」ことを示している場合があります。動こうとしているのに送れない。それはPostfixの外側に問題があるサインです。この読み方は経験を積まないとなかなか身につかないのですが、セミナーでは「ログに出ていない箇所にこそ原因がある」という逆説的な見方も伝えるようにしています。
本記事のまとめ
あの日の失敗から学んだことを一言でまとめると、「詳しいところだけ調べても、原因がそこにあるとは限らない」です。Linuxの障害対応は、関連する技術領域が広いからこそ、診断のスコープを意識的に広げる習慣が大事になります。
| 状況 | まず確認すること |
|---|---|
| メール送信ができない | 外部ドメインへのping・dig MXでDNS確認 |
| maillogにName service errorが出る | /etc/resolv.confのネームサーバー死活確認 |
| 同じレイヤーを30分以上調べても答えが出ない | 一度止まって隣のレイヤー(DNS・NW)を疑う |
| 外部への通信は通るがメールだけ届かない | ポート25の外向き疎通と相手サーバーのMX確認 |
「次はすぐに気づける」障害対応の型を、最初から体系的に身につけませんか?
メール送信エラーもDNS障害も、原因を一発で特定できる診断の型があります。ネットの断片情報を拾い集めるより、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxのSamba設定をミスしてWindowsファイル共有が止まった日の話|SE時代の失敗と現役講師が今も続けるsmb.conf変更の型
- この記事の属するカテゴリ:Linux学習ガイドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます