覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

ネットワークで接続できない時の問題切り分け

「絵で見てわかるOS/ストレージ/ネットワーク」 を読んでまして、

ここだけはメモっておきたいなーと思ったのが、ネットワークで接続できない場合の代表的な切り分け方法でした。

自分なりの言葉に直してメモしておきます。


f:id:nini_y:20200323104736p:plain


  • ping

    • ping {IPアドレス} を実行
      • コマンドが成功すれば、インターネット層 と ネットワークインターフェース層(物理レイヤー)まではOK
      • ただし、 ping を受け付けないようにしているネットワーク(機器)もあるため、その場合は他のコマンドで代用する必要がある。
      • 最初から、ping {ホスト名} を実行して上手くいけば、名前解決とインターネット層 までは問題ないはず
  • ルーティング

    • ping が成功しない場合は、接続対象としている目的のマシンと同一ネットワークに存在する他のマシンに対して ping を実行する。
      • または、トレースルートコマンド(tracerttraceroute) を実行する。
        • これにより、ルーティングが正しいかどうか分かる。
  • ポート

    • インターネット層 までOKだった場合、netstat -ass -a でサーバ側で対象のポートが開いているかを確認する。
    • また、クライアント側から nc {ホスト名} -z {ポート番号}Test-NetConnection {ホスト名} -Port {ポート番号} などのコマンドで確認できる。
  • 変換装置

    • 目的のマシンまでの中継の中に、ファイアウォールや何らかのアドレス変換装置(NAT) が存在しないことを確認する。
      • これらは特定のポートを遮断したり、アドレスを書き換えたりするため、パケットが途中で意図しないものになっていることがある。
    • ファイアウォールで診断用のコマンド(ping で用いられるICMPプロトコル)を許可していないと切り分けできないことがあるので注意が必要。
  • 名前解決

    • 名前解決が怪しい場合は hostsファイル (UNIX系であれば /etc/hosts, Windows系であれば C:¥Windows¥system32¥drivers¥etc¥hosts など)の中を確認する。
      • ホスト名とIPアドレスの対応表が載っているので、これが悪さをしているケースもある。
    • nslookupResolve-DnsName などのコマンドを使って、DNSの情報が正しいかどうかも確認する。
  • アプリケーション層の確認

    • TCPのポートまで正しくたどり着けている場合、TCP/IP や ネットワークインターフェース層 などではなく、アプリケーションのレイヤーに問題がある。
    • アプリケーション(DBMSなど)の設定や、アプリケーションに渡しているユーザ名やパスワード、設定情報が間違っていないかを確認する。


補足

各レイヤーでのトラブルシューティング

f:id:nini_y:20200328102849p:plain



関連エントリ