ネットワーク障害の基本対応 - ping/traceroute/ss/dig【LPIC-1 109.3】
この記事で達成できること
pingでホストとの疎通を確認し、-cで回数を制御できるtraceroute/tracepathで経路上のどこで止まっているか特定できるssで待ち受けポートと接続状態を確認し、netstatとの対応を説明できるip addr/ip routeで IP 設定とルーティングを確認できるdig/hostで DNS 名前解決の成否を切り分けられる- 物理層から DNS・アプリ層まで、層を追った障害切り分けができる
LPIC-1 主題 109.3「基本的なネットワークの問題を解決する」の中核。「つながらない」を、思い込みではなく層ごとの確認で原因に絞り込む技術。
障害切り分けはどの順で進めるか
ネットワーク障害は「下の層から上の層へ」順に確認すると最短で原因に到達する。下が壊れていれば上は必ず失敗するため、下から潰すのが鉄則。
| 層 | 確認内容 | 主なコマンド |
|---|---|---|
| 物理 / リンク | NIC が上がっているか | ip link show |
| IP | アドレスが付いているか | ip addr show |
| ルーティング | ゲートウェイ・経路 | ip route show / traceroute |
| 疎通 | 相手まで届くか | ping |
| DNS | 名前を解決できるか | dig / host |
| アプリ | ポートが開いているか | ss -tulnp |
「Web サイトが見られない」なら、まず ping 8.8.8.8 のように IP 直打ちで疎通を見て、次に ping example.com で名前解決込みを見る。IP では通るのにドメインで通らなければ DNS の問題、と一発で切り分けられる。
手順
Step 1: インターフェースと IP を確認する
ip link show ip addr show
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 08:00:27:ab:cd:ef brd ff:ff:ff:ff:ff:ff
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
inet 192.168.1.20/24 brd 192.168.1.255 scope global enp0s3
ip link はネットワークデバイス(リンク層)の状態を表示する。UP と LOWER_UP があればリンクは生きている。ip addr で IP アドレス(inet 192.168.1.20/24)が付いているかを確認する。アドレスが付いていなければ、ここから先は確認しても無駄。
ip は iproute2 パッケージのコマンドで、ip addr が従来の ifconfig、ip route が route に相当する役割を担う。LPIC-1 v5.0 では ip コマンド体系を中心に学習する。
Step 2: ルーティングとゲートウェイを確認する
ip route show
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.20
ip route はルーティングテーブルを表示する。default via 192.168.1.1 がデフォルトゲートウェイ。この行が無いとローカルネットワーク外(インターネット)へ出られない。「LAN 内は通るが外に出られない」障害の大半はここが原因。
Step 3: ping で疎通を確認する
ping -c 4 192.168.1.1 ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=12.3 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=11.8 ms --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms
ping は ICMP ECHO パケットで疎通を確認する。-c 4 は「4 回送信したら終了」の意味(man ping: "Stop after sending count ECHO_REQUEST packets")。これを付けないと Ctrl+C まで送り続ける。送信間隔は -i で秒指定でき、デフォルトは 1 秒。まずゲートウェイ、次に外部 IP の順で確認する。
ping が通らない=ネットワーク不通とは限らない。セキュリティ上 ICMP をブロックしているホストやファイアウォールは珍しくない。ping 失敗は「ICMP 応答が無い」事実に過ぎず、TCP ポートへの接続(後述の ss や別手段)と合わせて判断する。
Step 4: traceroute で経路を追う
traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 0.8 ms 0.7 ms 0.7 ms 2 10.0.0.1 (10.0.0.1) 8.2 ms 8.1 ms 8.0 ms 3 * * * 4 8.8.8.8 (8.8.8.8) 12.1 ms 12.0 ms 11.9 ms
traceroute は宛先までの経路上の各ホップ(ルーター)を順に表示する(man: "tracks the route packets taken ... on their way to a given host")。各ホップで止まっていれば、その手前まではつながっていると分かる。* * * はそのホップが「タイムアウト内に応答しなかった」表示で、必ずしも障害ではなく ICMP を返さないルーターでも出る。
非特権ユーザーで実行したい、または経路の MTU も知りたい場合は tracepath を使う。man tracepath によれば「tracepath は traceroute と違い特権プログラムではない」。
tracepath example.com
Step 5: dig / host で DNS を確認する
dig example.com dig +short example.com
;; ANSWER SECTION: example.com. 3600 IN A 93.184.216.34 93.184.216.34
dig は DNS 問い合わせの詳細を表示する。基本構文は dig @server name type(BIND 9 公式)。ANSWER SECTION に解決結果(リソースレコード)が出れば名前解決は成功。+short は簡潔表示で、結果の値だけを返す。
dig MX example.com dig -x 93.184.216.34 host example.com
レコード種別を指定するには type を付ける(dig MX example.com)。-x は IP からホスト名への逆引き(PTR)。host はより簡潔な DNS ルックアップユーティリティで、host name だけで A・AAAA・MX をまとめて確認できる。
ping 8.8.8.8 は通るのに ping example.com が Name or service not known で失敗する場合、ネットワークは正常で DNS だけが壊れている。dig で名前解決の可否を直接確認し、/etc/resolv.conf の nameserver 設定を見る。
Step 6: ss で待ち受けポートと接続を確認する
ss -tulnp
Netid State Local Address:Port Peer Address:Port Process
tcp LISTEN 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
tcp LISTEN 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=940,fd=6))
udp UNCONN 0.0.0.0:68 0.0.0.0:*
ss はソケット統計を表示する。よく使う組み合わせ -tulnp の意味は man ss に従い以下のとおり。
| オプション | 意味(man ss) |
|---|---|
-t |
TCP ソケットを表示 |
-u |
UDP ソケットを表示 |
-l |
LISTEN(待ち受け)状態のソケットのみ表示 |
-n |
サービス名を解決しない(ポート番号を数値で表示) |
-p |
ソケットを使用しているプロセスを表示 |
「サービスを起動したのに接続できない」場合、ss -tlnp で対象ポートが LISTEN になっているか、どのプロセスが握っているかを確認する。
なぜ netstat ではなく ss を使うのか
netstat の man ページ NOTES 節には次のように明記されている。「This program is mostly obsolete.(このプログラムはほぼ廃止予定)Replacement for netstat is ss.」。つまり公式に ss が後継と位置づけられている。同様に netstat -r の代替は ip route、netstat -i の代替は ip -s link と man に書かれている。
実務上も ss は netstat より高速で、/proc/net を直接読まずカーネルから直接ソケット情報を取得する。オプション体系は互換性が高く、netstat -tulnp はほぼそのまま ss -tulnp に置き換えられる。古い手順書には netstat が残っているが、新規環境では ss を第一選択にするのが定石。LPIC-1 でも両者の対応関係(ss が後継、ip route が route/netstat -r の後継)は頻出ポイント。
| レガシー | 後継(推奨) | 用途 |
|---|---|---|
netstat -tulnp |
ss -tulnp |
ソケット・ポート一覧 |
netstat -r |
ip route |
ルーティングテーブル |
ifconfig |
ip addr |
インターフェース・IP 設定 |
route add |
ip route add |
経路の追加 |
よくあるミス
netstat前提で手を止める: 最小構成のコンテナや新しいディストリにはnetstat(net-tools)が入っていないことがある。ssを覚えておけば追加インストール不要で動く。pingが通らない=不通と決めつける: ICMP をブロックした環境では正常でもpingは失敗する。TCP ポートへの接続可否(ss/ アプリ層の確認)と合わせて判断する。- DNS 障害を疎通障害と取り違える:
ping ドメイン名の失敗だけで「ネットワークが切れた」と判断しない。IP 直打ち(ping 8.8.8.8)が通れば物理・IP・経路は正常で、原因は DNS。 - デフォルトゲートウェイ未設定を見落とす: LAN 内は通るのに外に出られないとき、
ip routeにdefault via ...が無いケースが多い。アドレスだけ見て満足しない。 ssのポート番号をホスト名解決で読み違える:-nを付けないと:22が:sshと表示され、ポート番号の特定に手間取る。確認時は-nを付ける。
トラブルシューティング
症状: ping example.com が Name or service not known で失敗する
原因: ネットワークは正常だが DNS 名前解決が失敗している
確認:
ping -c 2 8.8.8.8 dig +short example.com
対処: IP 直打ちの ping が通れば物理・IP・経路は正常。dig で解決できなければ /etc/resolv.conf の nameserver 行を確認し、到達可能な DNS サーバーを設定する。
症状: LAN 内は通るがインターネットに出られない
原因: デフォルトゲートウェイが未設定、または誤っている
確認:
ip route show ping -c 2 192.168.1.1
対処: ip route に default via <ゲートウェイIP> の行があるか確認する。無ければ ip route add default via <ゲートウェイIP> で追加(恒久化はディストリの設定ファイルで行う)。
症状: サービスを起動したのにクライアントから接続できない
原因: プロセスが意図したアドレス/ポートで待ち受けていない、またはファイアウォールでブロックされている
確認:
ss -tlnp
対処: 対象ポートが LISTEN か、待ち受けアドレスが 127.0.0.1(ローカルのみ)でなく 0.0.0.0 等になっているかを確認する。LISTEN していればアプリは正常で、原因はファイアウォール側の可能性が高い。
症状: traceroute の途中が * * * のまま進まない
原因: 途中のルーターが ICMP を返さない、または実際にそこで経路が途切れている
確認:
traceroute 8.8.8.8 tracepath 8.8.8.8
対処: * * * でも宛先まで到達し最終行に応答があれば経路は生きている(中継ルーターが ICMP を返さないだけ)。最終ホップまで届かない場合は、最後に応答したホップの先で障害が起きていると絞り込める。
作業完了チェックリスト
- [ ]
ip addr/ip linkでインターフェースと IP を確認した - [ ]
ip routeでデフォルトゲートウェイを確認した - [ ]
ping -cでゲートウェイと外部 IP の疎通を確認した - [ ]
traceroute/tracepathで経路上の停止点を確認した - [ ]
dig/hostで DNS 名前解決を確認した - [ ]
ss -tulnpで待ち受けポートとプロセスを確認した
まとめ
| 層 | コマンド | 確認すること |
|---|---|---|
| リンク / IP | ip addr / ip link |
NIC・IP アドレス |
| ルーティング | ip route |
デフォルトゲートウェイ |
| 疎通 | ping -c 4 |
相手まで届くか |
| 経路 | traceroute |
どのホップで止まるか |
| DNS | dig / host |
名前を解決できるか |
| アプリ | ss -tulnp |
ポートが開いているか |
ネットワーク障害対応の本質は「層を順に潰す」こと。下から確認すれば、勘に頼らず原因にたどり着ける。netstat は ss に、ifconfig/route は ip に置き換わった点も合わせて押さえれば、109.3 の出題範囲を一通りカバーできる。