IP コマンドの見方とオプションの説明

IP コマンド IP コマンドとは、ネットワークデバイスやルーティングなどの管理・確認コマンドです。

ip コマンドは、レガシーな net-tools パッケージの代替として推奨されてます。

iproute2 (推奨)net-tools (レガシー)説明
ip link, ip addrifconfigIP アドレスNIC
ip neigharpARP テーブル
ip routerouteIP ルーティングテーブル
ip maddripmaddr, netstat -gマルチキャスト
https://enakai00.hatenablog.com/entry/20140712/1405139841
ip addr
2: eth0: mtu 1500(一部略)
    link/ether 12:34:56:78:9a:bc
    inet 192.0.2.2/24
ネットワークのコマンド
ip link ip link とは、ネットワークデバイスを管理・確認するコマンドです。

例えば、ネットワークデバイス (NIC) の MAC アドレスを確認したりできます。

ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    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 qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
PC は NIC (有線) や、無線子機ごと
iPhone は、無線子機が内蔵されてると考えればok
(Wi-fi アドレス = MAC アドレス)

MAC アドレスは、ベンダーが出荷時に割り当てます。(最近のものはランダムに変わったりする)

ip link の見方

2つ目のネットワークデバイス eth0 を例に、各フィールドの意味を説明します。

フィールド説明
eth0ネットワークデバイス名
<BROADCAST,MULTICAST,UP,LOWER_UP>デバイスの状態
mtu 1500MTU (1回の転送で送信可能な IP パケット) のサイズ
qdisc pfifo_fastキューイング規則
state UPネットワークの状態
qlen 1000キューの長さ
link/ether 12:34:56:78:9a:bcMAC アドレス
brd ff:ff:ff:ff:ff:ffブロードキャストアドレス

ip link コマンドのオプション

show <デバイス名> (特定のデバイスを確認)

特定のネットワークデバイスだけ確認できます。

ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff

set (属性を変更)

ネットワークデバイスの属性 (設定) を変更します。

sudo ip link set lo down

lo (localhost) に対して、通信できなくなります。

ping localhost
sudo ip link set lo up

注意事項

なお、ip コマンドによるネットワークの設定変更は一時的です。

再起動しても恒久的に設定したい場合は、nmcli を使いましょう。

ip addr (ip-address)

ip addr(ip-address) ip addr とは、IP アドレスの管理・確認するコマンドです。

ip link の情報に加え、IP アドレスの情報が追加されます。

ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/24 brd 192.0.2.255 scope global dynamic eth0
       valid_lft 3000sec preferred_lft 3000sec
MAC アドレスと同様に、NIC や無線子機ごとに設定可能

ip addr の見方

IP アドレスに関連がある部分だけを説明します。

ip addr の全フィールドの説明はこちら

フィールド説明
eth0ネットワークデバイス名
<BROADCAST,MULTICAST,UP,LOWER_UP>ネットワークデバイスの状態
mtu 1500MTU (1回の転送で送信可能な IP パケット) のサイズ
qdisc pfifo_fastキューイング規則
state UPネットワークの状態
qlen 1000キューの長さ
link/ether 12:34:56:78:9a:bc
brd ff:ff:ff:ff:ff:ff
MAC アドレス
ブロードキャストアドレス
inet 192.0.2.2/24
brd 192.0.2.255
IPv4 アドレス
ブロードキャストアドレス
scope global送信先のスコープ
scope global : グローバル
scope link : ローカルネットワーク (自身のサブネット等)
scope host : 自分のみ
dynamicDHCP などで動的にアドレスを割り当て
eth0ネットワークデバイス名
valid_lft 3000secIPv4 アドレスの有効期限
preferred_lft 3000secIPv4 アドレスの適切な有効期限
https://slacknotebook.com/checking-network-configs-on-linux-using-ip-command/
フィールド説明
eth0ネットワークデバイス名
inet 192.0.2.2/24IPv4 アドレス
brd 192.0.2.255ブロードキャストアドレス
scope global送信先のスコープ
scope global : グローバル
scope link : ローカルネットワーク (自身のサブネット等)
scope host : 自分のみ
dynamicDHCP などで動的にアドレスを割り当て
eth0ネットワークデバイス名
valid_lft 3000secIPv4 アドレスの有効期限
preferred_lft 3000secIPv4 アドレスの適切な有効期限
https://slacknotebook.com/checking-network-configs-on-linux-using-ip-command/

IP アドレスの静的 (手動) 設定

ip addr コマンドで、IP アドレスを手動で割り当ててみます。

show <デバイス名> (指定したデバイスを確認)

ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/24 brd 192.0.2.255 scope global eth0
       valid_lft 3000sec preferred_lft 3000sec

add (IP アドレスを追加)

sudo ip addr add 192.0.2.3/24 dev eth0
ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/24 brd 192.0.2.255 scope global eth0
       valid_lft 3000sec preferred_lft 3000sec
    inet 192.0.2.3/24 scope global eth0
       valid_lft forever preferred_lft forever
ping 192.0.2.3
PING 192.0.2.3 (192.0.2.3) 56(84) bytes of data.
64 bytes from 192.0.2.3: icmp_seq=1 ttl=127 time=0.021 ms
64 bytes from 192.0.2.3: icmp_seq=2 ttl=127 time=0.034 ms

del (IP アドレスを削除)

sudo ip addr del 192.0.2.3/24 dev eth0
ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/24 brd 192.0.2.255 scope global eth0
       valid_lft 3000sec preferred_lft 3000sec
ping 192.0.2.3
PING 192.0.2.3 (192.0.2.3) 56(84) bytes of data.
3 packets transmitted, 0 received, 100% packet loss, time 2106ms 

IP アドレスの自動 (動的) 設定

systemd-networkd※1が DHCP サーバー※2と通信して、自動で IP アドレスを割り当てます。
※1 古い場合は dhclient
※2 ルータ広告を使う方法もある

sudo systemctl restart systemd-networkd
sudo journalctl -r
systemd-networkd[1111]: eth0: DHCPv4 address 192.0.2.2, gateway 192.0.2.1 acquired from 192.0.2.1

ip neigh (ip-neighbour)

ip neigh(ip-neighbour) ip neigh とは、ARP テーブル (送信先の IP アドレスMAC アドレスの対応表) を管理・確認するコマンドです。
ip neigh
192.0.2.1 dev eth0 lladdr 01:23:45:67:89:AB REACHABLE
192.0.2.3 dev eth0 lladdr AA:BB:CC:DD:EE:FF REACHABLE

ip neigh の見方

フィールド説明
192.0.2.1送信先の IP アドレス
dev eth0送信元のネットワークデバイス名
lladdr 01:23:45:67:89:AB送信先の Link-Layer-Address (MAC アドレス)
REACHABLE状態

ARP テーブルの手動設定

ip-neigh コマンドを利用して、ARP テーブルを手動で設定してみます。

add (ARP テーブルに追加)

sudo ip neigh add 192.0.2.4 lladdr AA:BB:CC:DD:EE:FF dev eth0
ip neigh
192.0.2.1 dev eth0 lladdr 01:23:45:67:89:AB REACHABLE
192.0.2.4 dev eth0 lladdr BA:98:76:54:32:10 REACHABLE

del (ARP テーブルから削除)

sudo ip neigh del 192.0.2.4 dev eth0
ip neigh
192.0.2.1 dev eth0 lladdr 01:23:45:67:89:AB REACHABLE

ARP テーブルの自動 (動的) 更新

ARP テーブルに登録されていない IP アドレスと通信する場合、自動で ARP リクエストを送信して ARP テーブルを更新します。

ip neigh
192.0.2.1 dev eth0 lladdr 01:23:45:67:89:AB REACHABLE
ping 192.0.2.3
ip neigh
192.0.2.1 dev eth0 lladdr 01:23:45:67:89:AB REACHABLE
192.0.2.3 dev eth0 lladdr BA:98:76:54:32:10 REACHABLE

ARP テーブルが自動で更新されたことを確認できます。

ip route

ip route ip route とは、ルーティングテーブルを管理・確認するコマンドです。
ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2

192.0.2.0/24 はデータリンク層で直接通信、それ以外はルーター 192.0.2.1 に転送を示します。

ip route の見方

フィールド説明
・default via 192.0.2.1
・192.0.2.0/24
送信先のネットワークアドレス
・default: デフォルトゲートウェイ
・via: next hop (次のルーター)
dev eth0送信元のネットワークデバイス名
proto kernelルートを作成したルーティングプロトコル
(kernel の場合は kernel により自動生成)
scope link送信先の範囲
host: 自分自身
link: 自分の所属するネットワーク (データリンク層で通信)
global: グローバル (他の) ネットワーク (ネットワーク層で通信)
src 192.0.2.2送信元ネットワークデバイスの IP アドレス

ルーティングテーブルの手動設定

ip route でルーティングテーブルを手動で設定してみます。

add ルーティングテーブルに追加

sudo ip route add 192.0.100.0/24 dev eth0
ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
192.0.100.0/24 dev eth0 scope link

del ルーティングテーブルから削除

sudo ip route del 192.0.100.0/24 dev eth0
ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2

ip maddr

ip maddr(ip-maddress) ip maddr とは、マルチキャストアドレスを管理・確認するコマンドです。
ip maddr
2:	eth0
	link  01:00:5e:00:00:00
	inet  224.0.0.1

ip maddr の見方

フィールド説明
eth0ネットワークデバイス名
link 01:00:5e:00:00:00MAC アドレス (マルチキャストアドレスは 01:00:5e から始まる)
inet 224.0.0.1IP アドレス (マルチキャストアドレスの範囲は 224.0.0.0 ~ 239.255.255.255)

関連記事

学習ロードマップ
ネットワークのコマンド
OSI 参照モデル