Linux & IT ノート

ネットワークの基本:ss・curl・ping で調べる

管理人 約9分で読めます

「サーバーに繋がらない」というトラブルは、原因がネットワーク層にあるのか、DNS にあるのか、アプリケーション層にあるのかで対処が変わります。 むやみに再起動や設定変更を試す前に、段階的に状況を絞り込むのが鉄則です。 本記事では、その絞り込みに使うコマンド群を紹介します。

疎通確認:ping・traceroute

まず相手ホストまでパケットが届くかどうかを確認します。

ping

ICMP エコーリクエストを送り、相手が応答するかを確認する基本コマンドです。

ping google.com           # 名前解決 + ICMP 疎通確認
ping -c 4 192.168.1.1    # 4回だけ送って終了(Linux のデフォルトは無限)
ping -i 0.5 example.com  # 送信間隔を0.5秒に

ping が通らない場合、2つの可能性があります。ひとつは相手ホストまでの経路に問題がある場合、もうひとつは相手が ICMP を意図的にブロックしている場合です。後者は珍しくないため、ping が通らなくても即「繋がらない」とは判断できません。

traceroute / tracepath

パケットが相手に届くまでの経路(ルーター一覧)を表示します。どこでパケットが止まっているかを特定するのに使います。

traceroute google.com
tracepath google.com      # traceroute がない環境でも使えることが多い

* * * と表示されるホップは、そのルーターが ICMP タイムアウト応答を返していないだけで、必ずしもそこで止まっているわけではありません。その先のホップが正常に表示されていれば通過しています。

名前解決:dig・host

疎通が取れていても DNS が壊れていると名前でアクセスできません。

# dig: DNS の詳細な応答を確認する
dig google.com
dig google.com A          # A レコード(IPv4)のみ
dig google.com AAAA       # IPv6 アドレス
dig @8.8.8.8 example.com  # 特定のDNSサーバーに問い合わせ(8.8.8.8 = Google)

# host: シンプルな名前解決確認
host google.com
host 8.8.8.8              # 逆引き(IP → ホスト名)

dig の出力にある ANSWER SECTION が空、または NXDOMAIN が返ってきたら DNS 登録がない(もしくは問い合わせ先のサーバーに問題がある)ことを示しています。@8.8.8.8 のように別のDNSサーバーに問い合わせると、自社DNSの問題なのか外部から見ても同じなのかを切り分けられます。

ポートと接続状態:ss

ss(Socket Statistics)は、サーバーがどのポートで待ち受けているかや、現在の接続状態を確認するコマンドです。従来の netstat の後継にあたり、現在の Linux ディストリビューションでは ss が標準的に使われます。

# 待ち受けポートの確認(よく使う組み合わせ)
ss -tlnp

オプションの意味:

オプション意味
-tTCP のみ表示
-lLISTEN 状態のソケットのみ
-nホスト名・サービス名を解決せず数値で表示
-pプロセス名・PID を表示(root 権限が必要な場合あり)
ss -tlnp
# State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
# LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
# LISTEN  0       511     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=5678,fd=6))

「Nginx を起動したはずなのにアクセスできない」というとき、ss -tlnp で 80/443 ポートが LISTEN になっているか確認するのが最初のステップです。LISTEN していなければサービスが起動していない、または設定ミスで別ポートで待っている可能性があります。

UDP を確認したいときは -u に変えます。

ss -ulnp    # UDP の待ち受け確認
ss -s       # ソケット統計のサマリー

HTTP の確認:curl

curl は HTTP/HTTPS を含む多プロトコルに対応した転送コマンドです。Web サーバーの応答をコマンドラインから手軽に確認できます。

よく使うオプション

# レスポンスヘッダだけ確認(-I: HEAD メソッドを送る)
curl -I https://example.com

# 詳細な通信ログを表示(TLS ハンドシェイク、ヘッダの送受信含む)
curl -v https://example.com

# リダイレクトを追従する
curl -L http://example.com

# ファイルをダウンロード
curl -o output.html https://example.com   # ファイル名を指定
curl -O https://example.com/file.tar.gz  # リモートのファイル名そのままで保存

# ステータスコードだけ取り出す
curl -o /dev/null -s -w "%{http_code}\n" https://example.com

-I で確認できるレスポンスヘッダには、ステータスコード(200/301/404/502 など)、Content-TypeServer などが含まれており、アプリケーション層での問題の手がかりになります。

-v はトラブルシュート時に特に便利で、TLS 証明書の検証失敗や接続先のドメイン不一致なども可視化されます。

wget

curl の代わりに wget が使える環境もあります。再帰ダウンロードや -c(中断再開)が得意な一方、curl のほうがオプションが豊富で柔軟です。

wget https://example.com/file.tar.gz   # ファイルをダウンロード
wget -c https://example.com/large.iso  # 中断した続きからダウンロード

IP アドレスとルーティング:ip コマンド

自分のマシンのネットワーク設定を確認するには ip コマンドを使います。ifconfig の後継です。

# インターフェース一覧と IP アドレスを表示
ip addr
ip addr show eth0   # 特定のインターフェースのみ

# ルーティングテーブルを確認
ip route

ip route の出力にある default via の行が、デフォルトゲートウェイ(外部への出口)を示します。

default via 192.168.1.1 dev eth0 proto dhcp
192.168.1.0/24 dev eth0 proto kernel scope link

デフォルトゲートウェイが設定されていない場合、ローカルネットワーク外への通信が届きません。

切り分けの考え方

「繋がらない」を素直に信じず、次の順番で確認していくと原因を絞り込みやすくなります。

1. IP アドレスとインターフェースの確認 ip addr で自分の IP が正しく割り当てられているか。ip route でデフォルトゲートウェイが存在するか。

2. 疎通確認(L3) ping でゲートウェイ、次に相手サーバーの IP アドレスに疎通を確認。IP 直打ちで通れば DNS ではなくルーティングの問題ではない。

3. 名前解決(DNS) dighost で名前解決が正しく機能しているか確認。IP 直打ちなら通るが名前で通らないなら、ここに原因がある。

4. ポートの確認(L4) ss -tlnp で相手サーバー側のポートが LISTEN しているか、ファイアウォールで遮断されていないか。curl -v で接続できるか試す。

5. アプリケーション層の確認(L7) ポートには繋がるが期待の応答が返らない場合は、アプリケーション(Nginx や Node.js など)側のエラーログを確認する。

この順番を守ると「ネットワークは正常だがアプリが落ちていた」「DNS は通るが特定のポートがファイアウォールに弾かれていた」といった原因を無駄なく特定できます。

まとめ

コマンド主な用途
pingICMP 疎通確認
traceroute / tracepath経路確認
dig / hostDNS 名前解決確認
ss -tlnp待ち受けポート確認
curl -I / -vHTTP レスポンス確認
ip addr / ip routeIP・ルーティング確認

ネットワークのトラブルは「どの層で止まっているか」を段階的に絞り込むことが解決への近道です。コマンド自体はシンプルなので、実際にサーバーを触りながら使い方を覚えていくのが一番です。

次回(#8)はいよいよ SSH の実践編です。公開鍵認証の設定から鍵管理のコツまで、リモートサーバー操作の基盤となる知識を整理します。