ネットワークコマンド入門 - ip/ifconfigで接続状態を確認する
この記事で解決できること
ipとifconfigの 使い分けと違い が分かる- 「ネットにつながらない」を どこで切れているか順に切り分け できる
- IPアドレス・リンク・経路・到達性を 確認する型 が身につく
結論(実務の型)
- IPアドレスを見るなら
ip a(ifconfigの後継) - 切り分けは下から上:リンク → IP → 経路 → 到達性 → 名前解決 の順
ifconfigが「command not found」でも壊れていない。ipを使えばよい
前提(対象環境)
- OS:Ubuntu / RHEL 系など一般的な Linux
iproute2(ipコマンド)は標準インストール済み- 一部コマンドは
sudoまたは管理権限が必要
ip と ifconfig は何が違うのか?
ifconfig は旧 net-tools パッケージ付属の古いコマンドで、現在は非推奨。ip は後継の iproute2 パッケージが提供し、IPアドレス・リンク・経路をすべて扱える。新しい環境では ip を使う。
| 項目 | ifconfig(net-tools) |
ip(iproute2) |
|---|---|---|
| ステータス | 非推奨・保守停止 | 現行・推奨 |
| デフォルト導入 | 多くのモダン環境で未導入 | 標準導入 |
| 扱える範囲 | IP・リンクのみ | IP・リンク・経路・他 |
| 複数IP/サブIF | 表示が不完全 | 正確に表示 |
ifconfig が command not found になるのは故障ではなく、net-tools が入っていないだけ。sudo apt install net-tools で入るが、まず ip を使うのが正攻法。
IPアドレスはどう確認するのか?
ip a(ip 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 側を疑う
ping が 100% packet loss でも、相手が ICMP を遮断しているだけのこともある。Web サーバなら curl -I https://example.com で HTTP レベルの到達性も併せて確認する。
つながらない時はどう切り分けるのか?
下のレイヤから順に潰すのが鉄則。リンク → IP → 経路 → 到達性 → 名前解決の順で、最初に失敗した層が原因。上から見ると遠回りになる。
- リンク:
ip link show→state UPか - IP:
ip a→ IPアドレスが付与されているか - 経路:
ip route→default via ...があるか - 到達性:
ping -c 4 <ゲートウェイ>→ping -c 4 8.8.8.8 - 名前解決:
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行ずつ簡潔表示。一覧把握に最適。