Linuxでネットワークの設定や確認をするとき、こんなことを思ったことはありませんか?

プログラミング・IT
  • 「IPアドレスを確認したいけど、どのコマンドを使えばいいの?」
  • 「ifconfigコマンドが使えないって言われた…」
  • 「ipコマンドって何?難しそう…」

実は、最近のLinuxでは ifconfig に代わって ip コマンド が標準になっています。

ipコマンドとは

  • Linuxでネットワークを管理するための現代的なツール
  • ifconfig、route、arpなどの古いコマンドを1つにまとめたもの
  • より多機能で、IPv6にも完全対応
  • ほとんどのLinuxディストリビューションに最初から入っている

この記事では、ipコマンドの基本から実際の使い方まで、初心者にも分かりやすく説明します。

スポンサーリンク

ipコマンドとifconfigの違い

なぜipコマンドが推奨されるのか?

従来のコマンドとの比較

操作古いコマンド新しいコマンド
IPアドレス確認ifconfigip addr show
ルーティング確認route -nip route show
ARPテーブル確認arp -aip neigh show
インターフェース操作ifconfig eth0 upip link set eth0 up

ipコマンドの優れた点

  • 統一性: 1つのコマンドで様々な操作ができる
  • IPv6対応: 最初からIPv6に完全対応
  • 豊富な機能: VLANやブリッジなど高度な設定も可能
  • スクリプト向け: 出力形式が安定している
  • 将来性: 新しい機能が継続的に追加される

移行が進む理由

ifconfigの問題点

  • IPv6の対応が不完全
  • 新しい機能が追加されない
  • 将来的に削除される予定
  • 複数のコマンドを覚える必要がある

ipコマンドのメリット

  • 1つのコマンドですべてできる
  • 最新のネットワーク技術に対応
  • より詳細な情報が得られる
  • JSON形式での出力も可能

ipコマンドの基本構文

基本的な書き方

ip [オプション] オブジェクト コマンド

主要なオブジェクト

  • addr (address): IPアドレス関連
  • link: ネットワークインターフェース関連
  • route: ルーティング関連
  • neigh (neighbor): ARP/NDP関連

主要なコマンド

  • show (または list): 情報を表示
  • add: 追加
  • del (または delete): 削除
  • set: 設定変更

省略形も使える

ipコマンドは多くの部分を省略できます:

# フルバージョン
ip address show

# 省略版
ip addr show
ip addr
ip a

# すべて同じ結果になる

基本的な使い方

IPアドレスの確認

すべてのインターフェースを表示

ip addr show
# または
ip a

実行例

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
    link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::a00:27ff:fe12:3456/64 scope link

出力の読み方

  • lo: ループバックインターフェース(自分自身との通信用)
  • eth0: 有線LANインターフェース
  • inet: IPv4アドレス
  • inet6: IPv6アドレス
  • link/ether: MACアドレス

特定のインターフェースのみ表示

ip addr show eth0
# または
ip a show eth0

ネットワークインターフェースの確認

インターフェースの一覧表示

ip link show
# または
ip link
ip l

実行例

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT
    link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT
    link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff

状態の意味

  • UP: インターフェースが有効
  • DOWN: インターフェースが無効
  • LOWER_UP: 物理的なリンクが確立
  • BROADCAST: ブロードキャスト対応
  • MULTICAST: マルチキャスト対応

ルーティングテーブルの確認

現在のルートを表示

ip route show
# または
ip route
ip r

実行例

default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100

出力の読み方

  • default via 192.168.1.1: デフォルトゲートウェイ
  • dev eth0: 使用するインターフェース
  • proto dhcp: DHCPで設定されたルート
  • metric 100: ルートの優先度(小さいほど優先)

ARP/NDPテーブルの確認

近隣ノード(ARP)の確認

ip neigh show
# または
ip neigh
ip n

実行例

192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.1.50 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE
fe80::1 dev eth0 lladdr 00:11:22:33:44:55 router REACHABLE

状態の意味

  • REACHABLE: 到達可能
  • STALE: 古い情報(確認が必要)
  • DELAY: 確認中
  • PROBE: 調査中

設定変更の基本操作

インターフェースの有効化・無効化

インターフェースを有効にする

sudo ip link set eth0 up

インターフェースを無効にする

sudo ip link set eth0 down

確認

ip link show eth0

IPアドレスの追加・削除

IPアドレスを追加

sudo ip addr add 192.168.1.200/24 dev eth0

IPアドレスを削除

sudo ip addr del 192.168.1.200/24 dev eth0

すべてのIPアドレスを削除(インターフェースのフラッシュ)

sudo ip addr flush dev eth0

ルートの追加・削除

デフォルトゲートウェイを追加

sudo ip route add default via 192.168.1.1

特定ネットワークへのルートを追加

sudo ip route add 10.0.0.0/24 via 192.168.1.254

ルートを削除

sudo ip route del 10.0.0.0/24

デフォルトルートを削除

sudo ip route del default

実践的な使用例

基本的なネットワーク情報の確認

ネットワーク状況の一括確認スクリプト

#!/bin/bash
echo "=== ネットワークインターフェース ==="
ip link show

echo -e "\n=== IPアドレス設定 ==="
ip addr show

echo -e "\n=== ルーティングテーブル ==="
ip route show

echo -e "\n=== ARPテーブル ==="
ip neigh show

DHCPでIPアドレスを取得

# インターフェースをいったん無効化
sudo ip link set eth0 down

# 既存のIPアドレスを削除
sudo ip addr flush dev eth0

# インターフェースを有効化
sudo ip link set eth0 up

# DHCPクライアントを起動(Ubuntu/Debian)
sudo dhclient eth0

# または(CentOS/RHEL)
sudo dhcpcd eth0

静的IPアドレスの設定

# 既存設定のクリア
sudo ip addr flush dev eth0

# 静的IPアドレスを設定
sudo ip addr add 192.168.1.100/24 dev eth0

# デフォルトゲートウェイを設定
sudo ip route add default via 192.168.1.1

# インターフェースを有効化
sudo ip link set eth0 up

# 設定確認
ip addr show eth0
ip route show

ネットワークトラブルシューティング

接続性の確認手順

# 1. インターフェースの状態確認
ip link show

# 2. IPアドレスの確認
ip addr show

# 3. ルーティングの確認
ip route show

# 4. ゲートウェイへの疎通確認
ping -c 3 $(ip route | awk '/default/ {print $3}')

# 5. DNS解決の確認
nslookup google.com

# 6. 外部への疎通確認
ping -c 3 8.8.8.8

高度な機能

JSON形式での出力

# JSON形式で出力(スクリプト処理に便利)
ip -j addr show

# 見やすく整形
ip -j addr show | python3 -m json.tool

カラー出力

# カラー表示で見やすく
ip -c addr show
ip -c link show
ip -c route show

特定の情報のみ抽出

# IPv4アドレスのみ表示
ip -4 addr show

# IPv6アドレスのみ表示
ip -6 addr show

# 特定のファミリーのルート
ip -4 route show
ip -6 route show

統計情報の表示

# 詳細な統計情報
ip -s link show

# より詳細な統計
ip -s -s link show

実行例

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT
    link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    1048576   1024     0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    524288    512      0       0       0       0

よくある問題と解決方法

問題1:ipコマンドが見つからない

症状

$ ip addr show
bash: ip: command not found

解決方法

# Ubuntu/Debian
sudo apt update
sudo apt install iproute2

# CentOS/RHEL 7以前
sudo yum install iproute

# CentOS/RHEL 8以降
sudo dnf install iproute

# Arch Linux
sudo pacman -S iproute2

問題2:権限がない

症状

$ ip addr add 192.168.1.100/24 dev eth0
RTNETLINK answers: Operation not permitted

解決方法

# sudoを使用
sudo ip addr add 192.168.1.100/24 dev eth0

問題3:設定が再起動後に消える

症状 ipコマンドで設定した内容が再起動後に元に戻る

解決方法 永続化するには、OS固有の設定ファイルを編集する必要があります:

Ubuntu(Netplan)

# /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

適用:

sudo netplan apply

CentOS/RHEL(ifcfg形式)

# /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes

適用:

sudo systemctl restart NetworkManager

問題4:インターフェース名がわからない

解決方法

# すべてのインターフェースを表示
ip link show

# アクティブなインターフェースのみ
ip link show up

# 有線インターフェースを探す(通常 eth*, en* で始まる)
ip link show | grep -E "(eth|en)"

# 無線インターフェースを探す(通常 wlan*, wl* で始まる)
ip link show | grep -E "(wlan|wl)"

便利なエイリアスとスクリプト

.bashrcに追加すると便利なエイリアス

# ~/.bashrcに追加
alias ipa='ip addr show'
alias ipl='ip link show'
alias ipr='ip route show'
alias ipn='ip neigh show'

# カラー版
alias ipac='ip -c addr show'
alias iplc='ip -c link show'
alias iprc='ip -c route show'

# 統計付き
alias ipls='ip -s link show'

ネットワーク情報表示スクリプト

#!/bin/bash
# network-info.sh

echo "======================================"
echo "        ネットワーク情報              "
echo "======================================"

echo -e "\n📡 アクティブなインターフェース:"
ip link show up | grep -E "^[0-9]+" | awk '{print "  - " $2}' | sed 's/://g'

echo -e "\n🌐 IPv4アドレス:"
ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print "  - " $NF ": " $2}'

echo -e "\n🛣️  デフォルトゲートウェイ:"
ip route | grep default | awk '{print "  - " $3 " (via " $5 ")"}'

echo -e "\n🔍 DNS サーバー:"
if [ -f /etc/resolv.conf ]; then
    grep nameserver /etc/resolv.conf | awk '{print "  - " $2}'
fi

echo -e "\n📊 接続性テスト:"
if ping -c 1 -W 2 8.8.8.8 >/dev/null 2>&1; then
    echo "  ✅ インターネット接続: OK"
else
    echo "  ❌ インターネット接続: NG"
fi

まとめ

ipコマンドは、Linuxでネットワークを管理するための現代的で強力なツールです。

重要なポイント

  • ifconfigの後継: より多機能で将来性がある
  • 統一的な操作: 1つのコマンドで様々な操作が可能
  • 豊富な情報: 詳細なネットワーク情報を取得可能
  • スクリプト向け: 安定した出力形式

基本コマンド一覧

# 情報確認
ip addr show        # IPアドレス確認
ip link show        # インターフェース確認
ip route show       # ルーティング確認
ip neigh show       # ARP確認

# 設定変更(sudo必要)
ip link set eth0 up              # インターフェース有効化
ip addr add IP/mask dev eth0     # IPアドレス追加
ip route add default via GW     # デフォルトルート追加

# 省略形
ip a                # ip addr showの省略
ip l                # ip link showの省略
ip r                # ip route showの省略
ip n                # ip neigh showの省略

コメント

タイトルとURLをコピーしました