「絵で見てわかるOS/ストレージ/ネットワーク」 を読んでまして、
ここだけはメモっておきたいなーと思ったのが、ネットワークで接続できない場合の代表的な切り分け方法でした。
自分なりの言葉に直してメモしておきます。
ping
ping {IPアドレス}
を実行- コマンドが成功すれば、インターネット層 と ネットワークインターフェース層(物理レイヤー)まではOK
- ただし、
ping
を受け付けないようにしているネットワーク(機器)もあるため、その場合は他のコマンドで代用する必要がある。 - 最初から、
ping {ホスト名}
を実行して上手くいけば、名前解決とインターネット層 までは問題ないはず
ルーティング
ping
が成功しない場合は、接続対象としている目的のマシンと同一ネットワークに存在する他のマシンに対してping
を実行する。- または、トレースルートコマンド(
tracert
、traceroute
) を実行する。- これにより、ルーティングが正しいかどうか分かる。
- または、トレースルートコマンド(
ポート
- インターネット層までOKだった場合、
netstat -a
やss -a
でサーバ側で対象のポートが開いているかを確認する。 - また、クライアント側から
nc {ホスト名} -z {ポート番号}
やTest-NetConnection {ホスト名} -Port {ポート番号}
などのコマンドで確認できる。
- インターネット層までOKだった場合、
変換装置
- 目的のマシンまでの中継の中に、ファイアウォールや何らかのアドレス変換装置(NAT) が存在しないことを確認する。
- これらは特定のポートを遮断したり、アドレスを書き換えたりするため、パケットが途中で意図しないものになっていることがある。
- ファイアウォールで診断用のコマンド(
ping
で用いられるICMPプロトコル)を許可していないと切り分けできないことがあるので注意が必要。
- 目的のマシンまでの中継の中に、ファイアウォールや何らかのアドレス変換装置(NAT) が存在しないことを確認する。
名前解決
- 名前解決が怪しい場合は hostsファイル (UNIX系であれば
/etc/hosts
, Windows系であればC:¥Windows¥system32¥drivers¥etc¥hosts
など)の中を確認する。- ホスト名とIPアドレスの対応表が載っているので、これが悪さをしているケースもある。
nslookup
やResolve-DnsName
などのコマンドを使って、DNSの情報が正しいかどうかも確認する。
- 名前解決が怪しい場合は hostsファイル (UNIX系であれば
アプリケーション層の確認
- TCPのポートまで正しくたどり着けている場合、TCP/IP や ネットワークインターフェース層 などではなく、アプリケーションのレイヤーに問題がある。
- アプリケーション(DBMSなど)の設定や、アプリケーションに渡しているユーザ名やパスワード、設定情報が間違っていないかを確認する。
補足
各レイヤーでのトラブルシューティング