今回やること
この記事では、ネットワーク不調を切り分けるために、基本コマンドを順番に実行します。
目的はコマンドを暗記することではなく、DNS、到達性、経路、HTTP応答を分けて確認することです。
前提条件
- ターミナルを開ける
- インターネットに接続できる
- macOS/Linux、またはWindows PowerShellを使える
- 本番環境ではなく、学習用として確認する
この記事では例として example.com を使います。
Step 1: DNSで名前解決できるか確認する
まず、ドメイン名からIPアドレスを引けるか確認します。
macOS/Linux:
nslookup example.com
Windows PowerShell:
nslookup example.com
IPアドレスが表示されれば、名前解決はできています。
Step 2: digでDNSレコードを見る
macOS/Linuxでは dig を使うと、DNSの結果をより詳しく見られます。
dig example.com
Aレコードだけ見たい場合は次を使います。
dig example.com A
Windowsで dig がない場合は、まず nslookup で十分です。
Step 3: pingで到達性を見る
次に、相手へ届く可能性があるかを確認します。
ping example.com
Windowsでも同じです。
ping example.com
応答が返る場合、少なくともICMPの到達確認はできています。ただし、pingが成功してもHTTPが成功するとは限りません。
Step 4: tracerouteで経路を見る
相手までの途中経路を確認します。
macOS/Linux:
traceroute example.com
Windows:
tracert example.com
途中に * が表示されても、必ず障害とは限りません。途中の機器が応答を返さない設定の場合があります。
Step 5: curlでHTTP応答を見る
Webサーバーの応答を見るには curl を使います。
curl -I https://example.com
ステータスコードとレスポンスヘッダーが表示されます。
HTTP/2 200
content-type: text/html
HTTPとして返事があるかを確認できます。
Step 6: curl -vでどこまで進んだか見る
詳細ログを出します。
curl -v https://example.com
見るポイントは次です。
| 表示 | 意味 |
|---|---|
Trying | 接続先IPへ接続を試している |
Connected | TCP接続できた |
SSL connection | TLS接続できた |
> GET | HTTPリクエストを送った |
< HTTP | HTTPレスポンスを受け取った |
curl -v は、DNS、TCP、TLS、HTTPのどこで止まっているかを見るために使います。
確認結果の整理
| DNS | ping | curl | 見方 |
|---|---|---|---|
| 失敗 | 未確認 | 未確認 | まずDNSを確認 |
| 成功 | 失敗 | 失敗 | 経路やICMP制限を確認 |
| 成功 | 失敗 | 成功 | ping拒否の可能性あり |
| 成功 | 成功 | 失敗 | HTTP、TLS、ポートを確認 |
| 成功 | 成功 | 成功 | 通信の基本部分は通っている |
よくあるエラー
| エラー | よくある原因 | 確認すること |
|---|---|---|
command not found: dig | dig が入っていない | nslookup を使う |
could not resolve host | DNSで名前解決できない | ドメイン名、DNS設定 |
connection refused | ポートで待ち受けていない | サーバー起動、ポート番号 |
Operation timed out | 返事がない | 経路、FW、VPN |
| 証明書エラー | TLS証明書の問題 | ドメイン名、期限、CA |
次にやること
DNSが原因か確認する手順 で、名前解決の確認をもう少し詳しく練習します。
まとめ
ネットワーク不調は、DNS、到達性、経路、HTTP応答に分けて確認します。最初は nslookup、ping、traceroute、curl -I、curl -v の順番で見ると、原因の範囲を狭めやすくなります。