ipコマンドの基本的な使い方 (iproute2)

ネットワーク関連の設定をするipコマンドの基本的な使い方について説明します。

Red Hatが公開しているチートシートも参考になります。PDFでダウンロードできます。
Red Hat Enterprise Linux の ip コマンドチートシート


ipコマンド関連個別記事

ipコマンドによるVLANとデフォルトゲートウェイの設定については以下の記事を参照してください。

閲覧系コマンド

ネットワークデバイスやIPアドレスの一覧などを表示する閲覧系コマンドは一般ユーザでも実行できます。

IPアドレスを表示する ip address show

IPアドレスを含むネットワークデバイスの一覧を表示します。各デバイスのデバイス名、IPv4アドレス、IPv6アドレス、MACアドレス、デバイスの状態などを確認できます。
個人的に最もよく使用するサブコマンドで、普段はaddressの部分をかなり省略してip aと入力しています。ここではip addrとしました。

$ ip addr
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
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.0.2.10/24 brd 192.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::XXXX:XXXX:XXXX:XXXX/64 scope link
valid_lft forever preferred_lft forever

ネットワークデバイスを表示する ip link show

ネットワークデバイスの一覧を表示します。各デバイスのデバイス名、MACアドレス、デバイスの状態などを確認できます。

$ ip link
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 qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

ネットワークデバイスに関する統計を表示する ip -s link show

$ ip -s link
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
RX: bytes packets errors dropped overrun mcast
81784055 726405 0 0 0 0
TX: bytes packets errors dropped carrier collsns
81784055 726405 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
14879508675 194399446 0 0 0 0
TX: bytes packets errors dropped carrier collsns
29021979217 63591982 0 0 0 0

ルーティングテーブルを表示する ip route show

デフォルトルートが192.0.2.1に設定されていることが分かります。

$ ip route
default via 192.0.2.1 dev eth0 proto static metric 100
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.10 metric 100

ARPテーブルを表示する ip neigh show

$ ip neigh
192.0.2.10 dev eth0 lladdr XX:XX:XX:XX:XX:XX STALE
192.0.2.1 dev eth0 lladdr XX:XX:XX:XX:XX:XX REACHABLE
192.0.2.2 dev eth0 lladdr XX:XX:XX:XX:XX:XX STALE

設定系コマンド

各種デバイスへの設定コマンドについて説明します。設定にはroot権限が必要となります。
rootになってコマンドを実行するか、sudoコマンドを付与して実行する必要があります。

ちなみに、一般ユーザで設定系のコマンドを実行するとRTNETLINK answers: Operation not permittedというエラーが発生します。

デバイスをリンクアップする ip link set DEVICE up

ip link setコマンドでデバイスの状態をUPに設定します。ip link showコマンドなどで指定したデバイスのstateがUPになっていることを確認します。

# ip link set eth1 up
# ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

デバイスをリンクダウンする ip link set DEVICE down

ip link setコマンドでデバイスの状態をDOWNに設定します。

# ip link set eth1 down
# ip link show eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

IPアドレスを追加(設定)する ip address add

ip address addコマンドでデバイスにIPアドレスを設定(追加)します。1つのデバイスに複数のIPアドレスを設定することができます。

# ip addr add 198.51.100.132/24 dev eth1

IPアドレスを削除する ip address del

ip address delコマンドでデバイスに設定されているIPアドレスを削除します。

# ip addr del 198.51.100.132/24 dev eth1

VLANインターフェイスを作成する ip link add type vlan

ip link addコマンドで特定のVLAN IDでタグ付けされたVLANインターフェイスを作成します。

作成したVLANインターフェイスを利用するには状態をUPにしておく必要があります。

ここでは、物理インターフェイスeth1に対してVLAN ID101を指定したVLANインターフェイスeth1.101を作成します。

インターフェイスの詳細を表示すると、プロトコル802.1QでVLAN ID 101が設定されていることが分かります。

# ip link add link eth1 name eth1.101 type vlan id 101
# ip link set eth1.101 up
# ip -d link show eth1.101
4: eth1.101@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0
vlan protocol 802.1Q id 101 <REORDER_HDR> addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

ネットワークブリッジを作成する ip link add type bridge

ip link addコマンドでブリッジインターフェイス(ネットワークブリッジ)を作成します。

ここではbr1_101という名前のブリッジを作成します。

ブリッジの詳細を表示すると、デバイスの種類がbridgeであることが分かります。

# ip link add name br1_101 type bridge
# ip link set up dev br1_101
# ip -d link show br1_101
5: br1_101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0
bridge forward_delay 1500 hello_time (省略)

デバイスをブリッジにアタッチするにはip link setmasterを設定します。

ここでは、VLANインターフェイスeth1.101をブリッジbr1_101にアタッチします。つまり、eth1.101に対してmasterとしてbr1_101を設定します。

# ip link set dev eth1.101 master br1_101
# ip link show eth1.101
4: eth1.101@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1_101 state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

例えば、KVMの仮想マシンの仮想NICをブリッジbr1_101へアタッチすることで、eth1から外に出るパケットはVLAN ID101でタグ付けされることになります。

ちなみに、brctlコマンドで確認した場合は次の様になります。ブリッジ周りに関しては、brctlの方が表示やコマンド体系がわかりやすいかもしれません。
(Rocky LinuxではEPELリポジトリのbridge-utilsパッケージにbrctlが含まれています。)

$ brctl show br1_101
bridge name bridge id STP enabled interfaces
br1_101 8000.000c29b8658b no eth1.101