ネットワークコマンド入門 - ip/ifconfigで接続状態を確認する

ネットワークコマンド入門 - ip/ifconfigで接続状態を確認する

この記事で解決できること

  • ipifconfig使い分けと違い が分かる
  • 「ネットにつながらない」を どこで切れているか順に切り分け できる
  • IPアドレス・リンク・経路・到達性を 確認する型 が身につく

結論(実務の型)

  • IPアドレスを見るなら ip aifconfig の後継)
  • 切り分けは下から上:リンク → IP → 経路 → 到達性 → 名前解決 の順
  • ifconfig が「command not found」でも壊れていない。ip を使えばよい

前提(対象環境)

  • OS:Ubuntu / RHEL 系など一般的な Linux
  • iproute2ip コマンド)は標準インストール済み
  • 一部コマンドは sudo または管理権限が必要

ip と ifconfig は何が違うのか?

ifconfig は旧 net-tools パッケージ付属の古いコマンドで、現在は非推奨。ip は後継の iproute2 パッケージが提供し、IPアドレス・リンク・経路をすべて扱える。新しい環境では ip を使う。

項目 ifconfig(net-tools) ip(iproute2)
ステータス 非推奨・保守停止 現行・推奨
デフォルト導入 多くのモダン環境で未導入 標準導入
扱える範囲 IP・リンクのみ IP・リンク・経路・他
複数IP/サブIF 表示が不完全 正確に表示

ifconfigcommand not found になるのは故障ではなく、net-tools が入っていないだけ。sudo apt install net-tools で入るが、まず ip を使うのが正攻法。

IPアドレスはどう確認するのか?

ip aip addr show の短縮)で全インターフェースのIPアドレスを確認する。ifconfig 派なら ifconfig 単体でも同じ情報が見られる。まずはここで自分のIPを把握する。

$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
    inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0

読みどころ:

  • eth0 … インターフェース名(環境により enp0s3 等)
  • inet 192.168.1.20/24 … 割り当てられた IPv4 アドレスとサブネット
  • UP / LOWER_UP … 論理的に有効・物理リンクあり

特定インターフェースだけ見るなら次のとおり。

$ ip addr show eth0

ifconfig での同等操作:

$ ifconfig
$ ifconfig eth0

ip link でケーブル接続やインターフェースの有効/無効(物理レイヤ)を確認する。IPが付いていても state DOWN なら通信できない。「つながらない」時はまずここを見る。

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP ...
  • state UP … リンク有効。state DOWN なら無効
  • LOWER_UP が無い … ケーブル未接続・対向機器側の問題を疑う

インターフェースを手動で有効/無効化する(要管理権限):

$ sudo ip link set eth0 up
$ sudo ip link set eth0 down

リモート(SSH)接続中に作業用インターフェースを down にすると、その場で接続が切れて復旧できなくなる。コンソールアクセスが無い本番機では特に注意。

経路(ルーティング)はどう確認するのか?

ip route でデフォルトゲートウェイと経路表を確認する。IPが正しくてもゲートウェイが無ければ外部に出られない。LAN内は通るが外部に出られない時の定番チェックポイント。

$ ip route
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20
  • default via 192.168.1.1 … デフォルトゲートウェイ。これが無い=外部に出られない
  • 2行目 … 同一サブネット宛は直接配送

特定宛先への経路を引くなら ip route get が便利。

$ ip route get 8.8.8.8

到達性はどう確認するのか?

ping で対象まで実際にパケットが届くかを確認する。-c で回数を指定して止める。ゲートウェイ → 外部IP → ドメイン名の順に試すと、どこで切れているか切り分けられる。

$ ping -c 4 192.168.1.1
$ ping -c 4 8.8.8.8
$ ping -c 4 example.com

切り分けの読み方:

  • ゲートウェイにも届かない … リンクか経路の問題(ip link / ip route へ戻る)
  • 8.8.8.8 は OK だが example.com は NG … 名前解決(DNS)の問題
  • すべて NG … 経路・ファイアウォール・ISP 側を疑う

ping100% packet loss でも、相手が ICMP を遮断しているだけのこともある。Web サーバなら curl -I https://example.com で HTTP レベルの到達性も併せて確認する。

つながらない時はどう切り分けるのか?

下のレイヤから順に潰すのが鉄則。リンク → IP → 経路 → 到達性 → 名前解決の順で、最初に失敗した層が原因。上から見ると遠回りになる。

  1. リンクip link showstate UP
  2. IPip a → IPアドレスが付与されているか
  3. 経路ip routedefault via ... があるか
  4. 到達性ping -c 4 <ゲートウェイ>ping -c 4 8.8.8.8
  5. 名前解決ping -c 4 example.com が NG なら DNS を疑う
# 上から順に1コマンドずつ
ip link show
ip a
ip route
ping -c 4 8.8.8.8
ping -c 4 example.com

やりがちな失敗

  • いきなりドメイン名で ping して「ネットが死んだ」と誤判断(実は DNS だけ)
  • IPが付いているのを見て安心し、ゲートウェイ未設定を見落とす
  • SSH 越しに ip link set ... down を実行して自分の接続を切る

旧コマンドとの対応表(チートシート)

ifconfig / route / netstat に慣れていても、ip / ss での同等操作を覚えれば移行できる。下表を手元に置けば困らない。

やりたいこと 旧(net-tools) 新(iproute2)
IPアドレス確認 ifconfig ip a
リンク有効化 ifconfig eth0 up ip link set eth0 up
経路表表示 route -n ip route
ARP テーブル arp -n ip neigh
待ち受けポート netstat -tlnp ss -tlnp
# コピペ用:状態把握ワンライナー
ip -br a && ip route && ss -tlnp

ip -br a-br = brief)はインターフェースとIPを1行ずつ簡潔表示。一覧把握に最適。

次に読む