困った!Webサイトに接続できない時に活躍するかもしれないコマンドとトラブルシューティング手順
どうもoreoです。
開発しているWebサイトに突然接続できなくなると焦りますよね。そんな時に役に立つかもしれないコマンドとトラブルシューティング手順を記載します。
1 活躍するかもしれないコマンド達
nslookup
コマンド
1-1 名前解決の確認をする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
コマンドよりも詳細情報を取得できます(下記ご参照)。
ping
コマンド
1-2 ネットワークの疎通確認をする ネットワークの疎通確認にはping
コマンドを使用します。ネットワークの到達性確認だけでなく、死活監視にも利用されます。
ping 「IPアドレス」or「ホスト名」
ping
では、ICMPというプロトコルを用いて、ホストに対して「ICMPエコー要求」というパケットを送信し、ホストから「ICMPエコー応答」というパケットを受け取ることで、疎通確認することができます。
例えば、ping
コマンドを実行して、下記のように指定したIPアドレス(またはホスト名)からの応答を受け取ることができれば、疎通していることがわかります。
time out
、Destination net unreachable
、Destination host unreachable
などの応答結果によって、どのような問題が発生しているのかの予測を立てることもできます(下記ご参照)。
また、セキュリティグループやファイアフォールでは、明示的にICMPプロトコルを通す設定をしなければ、ping
でのパケットが通過できません。その為、ping
が失敗する場合は、その設定の確認も必要です。
ping
コマンドのオプションなどは下記ご参照。送信するICMPエコー要求の数などを制御できたりします(下記ご参照)。
telnet
コマンド
1-3 ポートへの到達確認をする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サーバーのプロセスが起動していない、またはポードが閉じられている可能性があります。
tracerute
コマンド)
3 その他(ネットワーク上の経路を確認する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