困った!Webサイトに接続できない時に活躍するかもしれないコマンドとトラブルシューティング手順
どうもoreoです。
開発しているWebサイトに突然接続できなくなると焦りますよね。そんな時に役に立つかもしれないコマンドとトラブルシューティング手順を記載します。
1 活躍するかもしれないコマンド達
1-1 名前解決の確認をするnslookupコマンド
nslookupコマンドを使えば、DNSサーバーに対して、名前解決リクエスを送信できます。
nslookup 「IPアドレス」or「ホスト名」
例えば、DNSサーバーを構築した時のように、ホスト名からIPアドレスを知りたい場合は、下記のように確認できます。この例では、ホスト名「ec2-13-231-24-225.ap-northeast-1.compute.amazonaws.com」のIPアドレスが「13.231.24.225」であることがわかります。

ここでの「Non-authoritative answer」は「権威DNSサーバー(ネットワーク情報を保持しているDNSサーバー)」ではなく、「キャッシュDNSサーバー」からの応答であることを示します。
尚、digコマンドを使用すると、nslookupコマンドよりも詳細情報を取得できます(下記ご参照)。
1-2 ネットワークの疎通確認をする pingコマンド
ネットワークの疎通確認にはpingコマンドを使用します。ネットワークの到達性確認だけでなく、死活監視にも利用されます。
ping 「IPアドレス」or「ホスト名」
pingでは、ICMPというプロトコルを用いて、ホストに対して「ICMPエコー要求」というパケットを送信し、ホストから「ICMPエコー応答」というパケットを受け取ることで、疎通確認することができます。
例えば、pingコマンドを実行して、下記のように指定したIPアドレス(またはホスト名)からの応答を受け取ることができれば、疎通していることがわかります。

time out、Destination net unreachable、Destination host unreachableなどの応答結果によって、どのような問題が発生しているのかの予測を立てることもできます(下記ご参照)。
また、セキュリティグループやファイアフォールでは、明示的にICMPプロトコルを通す設定をしなければ、pingでのパケットが通過できません。その為、pingが失敗する場合は、その設定の確認も必要です。
pingコマンドのオプションなどは下記ご参照。送信するICMPエコー要求の数などを制御できたりします(下記ご参照)。
1-3 ポートへの到達確認をするtelnetコマンド
pingコマンドで確認できるのは、ICMPを使ってネットワークに到達できたかどうかです。特定のポートへの到達性を確認したい場合には、telnetコマンドを使用します。
telnet [「IPアドレス」or「ホスト名] [ポート番号]
telnetを使用すればwebサーバーなどが起動しているかどうかの確認ができます。
例えば、awsにHTTPのウェルノウンポートである80番に接続すると、HTTPリクエストの待ち受け状態となり、接続できていることがわかります(Enterを何度か押すか、時間が経つと勝手にコマンドプロンプトに戻ります)。

ポート81番に接続すると、下記のように失敗し、ポート81番への接続が許可されていないまたはポート81番で待ち受けているアプリケーションが起動していないことが考えられます。

尚、telnetがない場合は、下記を参照して、インストールしてみてください。
telnetのオプションなどは下記ご参照。
2 トラブルシューティング手順
Webサイトに接続できな場合、以下のような4つの手順で確認していくと原因を特定できるかもしれません。これらを確認して、それでも解決しない場合は、アプリケーション内部に問題がある可能性があります。
例として、「http://www.hogehoge.com/ 」にアクセスできなくなった場合を考えます。
2-1 クライアント側のネットワーク環境の確認
「http://www.hogehoge.com/ 」以外のWebサイトにアクセスできるかどうか確認します。もし、アクセスできない場合は、クライアント側のネットワークに問題が発生している可能性があります。
2-2 名前解決できているか確認
nslookupコマンドなどを使用して、「www.hogehoge.com」 が名前解決できているか確認します。もで解決できていなければ、DNSサーバーやDNSの設定に問題が発生している可能性があります。
2-3 ネットワークの疎通確認
pingコマンドを使って、ネットワークへの疎通確認をします。pingコマンドが失敗すれば、途中のネットワークに問題があるか、Webサーバーが落ちているなどの可能性があります。
ただし、ICMPが許可されていない場合、Webサーバーが正しく動作していてもpingコマンドは失敗するので、その点注意です。
2-4 ポートへの接続確認
telnetコマンドで、HTTPのウェルノウンポートである80番への接続確認をします。もし応答がなければ、HTTPサーバーのプロセスが起動していない、またはポードが閉じられている可能性があります。
3 その他(ネットワーク上の経路を確認するtraceruteコマンド)
traceruteコマンドで、宛先へのネットワーク上の経路を確認することができます。
traceroute 「IPアドレス」or「ホスト名」
例えば、www.aws.comへの経路を確認した場合、パケットは「100.65.27.240」→「100.65.12.146」→・・・・とパケットが転送されていくことがわかります。

tracerouteコマンドを用いると、通信時間が長い場合に、想定外の経路を通っていないかなどの確認ができます。もし想定外の経路をパケットがとている場合は、ルーティングの設定に不備がある可能性があります。
なお、*が表示される場合は、通過した経路の設定などで応答が返ってこなかったことを表します(下記ご参照)。
tracerouteコマンドのオプションなどは下記ご参照。
4 最後に
今回のコマンドと手順を知っていれば、ネットワークでの問題が発生した時に、原因特定の対応ができそうですね!
5 参考
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
telnetコマンドについて詳しくまとめました 【Linuxコマンド集】
Discussion