はじめに
ある日、開発環境のサーバーにSSHで入ろうとしたら、いつまで経ってもつながりませんでした。
ssh user@111.111.1.111
コマンドを打ってしばらく待っても、返ってくるのはタイムアウトだけ。サーバーが落ちているのか、ネットワークがどこかで切れているのか、DNSがおかしいのか、それともSSHのサービスだけが死んでいるのか。正直、この時点では見当もつきませんでした。
こういうときに使用するのが ping です。
何が起きていたか
症状はシンプルで、SSHが通らないのに加えて、同じサーバーのWeb画面も開けなくなっていました。
ただ、症状が分かっても原因は別問題です。PCがおかしいのか、途中のネットワーク機器がおかしいのか、サーバー自体がおかしいのか。この3つのどこに問題があるかを一つずつ潰していく作業が必要でした。
pingで何がわかるか
pingはICMPのEcho Requestを投げて、相手からEcho Replyが返ってくるかを見るだけの、かなり原始的なコマンドです。ですが原始的な分、シンプルに「IPレベルで相手と話せているか」を確認できます。トラブルシューティングの一番最初に叩くコマンドとしては定番中の定番です。
まずは対象サーバーに打ってみる
ping 111.111.1.111
Request timed out.
Request timed out.
Request timed out.
見事に全滅でした。
この時点でわかったこと
pingすら通らないということは、SSHだけの問題では済みません。ネットワークの、しかもかなり基礎的なレイヤーで詰まっている可能性が高いということです。
考えられる原因はいくつかあって、サーバー自体の停止、LANケーブルの抜け、ルーティングの異常、ファイアウォールの設定変更、ネットワーク機器そのものの障害あたりが候補になります。この時点ではまだどれとも言えません。
範囲を絞る
サーバー個別の問題なのか、それとも同じネットワーク全体の問題なのかを見るために、同じセグメントの別サーバーにもpingを打ってみました。
ping 111.111.1.112
Reply from 111.111.1.112
こちらは普通に返ってきました。
ということは、自分のPCもネットワーク自体も問題なく、疑わしいのは対象サーバーだけということになります。ここまで来ると、かなり原因が絞れてきた感覚がありました。
実際の原因
サーバー側を見てみると、OSのファイアウォール設定が変更されていて、ICMPの通信が丸ごとブロックされていました。設定を戻してから、もう一度pingを打ちます。
ping 111.111.1.111
Reply from 111.111.1.111
無事に応答が返ってきて、SSHも問題なくつながるようになりました。
pingで見えること一覧
今回みたいに、pingは意外といろいろな切り分けに使えます。
| 課題 | pingでわかること |
|---|---|
| サーバーへ接続できない | 通信経路が生きているか |
| Webサイトが開けない | ネットワークの問題かどうか |
| SSH接続できない | サーバーまで到達できるか |
| 通信が遅い | 応答時間 |
| 回線が不安定 | パケットロスの有無 |
| DNS障害 | IP直打ちとの比較 |
まとめ
最初は「サーバーにつながらない」というふわっとした症状しかなくて、正直どこから手をつけるべきか迷いました。でも ping を打ってみるだけで、「そもそもIPレベルで通信できていない」というところまで一気に絞り込めました。
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
