CentOS 7などでは、net-toolsの使用について非推奨となっているため、IPアドレスなどを調べるifconfigコマンドは使わず、出来る限りipコマンドを使った方が良いと言われてる。 でこのipコマンド、ifconfigに比べると結構いろんなことができるので、ちょっと使い方について調べてまとめてみることにした。

基本的に、ipコマンドでは指定するオブジェクトに応じて行える操作が切り替わる。

オブジェクト 省略形 備考
address addr(a) デバイスに紐づくIPv4/IPv6アドレスの管理
addrlabel addrl アドレスラベルの管理
link l ネットワークデバイスの管理
maddress maddr(m) マルチキャストアドレスの管理
mroute mr マルチキャストルーティングのキャッシュエントリ
neighbour neigh(n) ARP/NDISのキャッシュエントリ
route r ルーティングテーブルの情報
rule ru ルーティングルールの管理
tunnel t IP over tunnel
xfrm x IPSecプロトコルのフレームワーク

以下、いくつか実際の利用例について、使いそうな機能だけ抜粋して記述する。

1. デバイスに紐づくIPアドレスの管理

1-1. IPアドレスを確認する

ifconfigでも主に使われていたであろう、多分ipコマンドで一番良く使う機能。 ipコマンドでIPアドレスを確認する場合、以下のようにコマンドを実行する。

ip addr # 何も付与しないとshowとして実行される
ip addr show
ip taddr show dev インターフェイス名 # インターフェイスを指定
blacknon@BS-PUB-UBUNTU-01:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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 group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.XXX/24 brd 172.28.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:64ff:fe64:6131/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 32:63:31:63:38:61 brd ff:ff:ff:ff:ff:ff
    inet 172.20.100.XXX/24 brd 172.20.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:31ff:fe63:3861/64 scope link
       valid_lft forever preferred_lft forever
blacknon@BS-PUB-UBUNTU-01:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.XXX/24 brd 172.28.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:64ff:fe64:6131/64 scope link
       valid_lft forever preferred_lft forever

この時、「-4」でIPv4、「-6」でIPv6のアドレスのみを表示させることもできる。

1-2. IPアドレスを追加・削除する

一時的に利用するIPアドレスを追加したり、削除を行う場合は以下のようにipコマンドを実行する。

ip addr add IPアドレス/ネットマスク brd + dev 対象のネットワークデバイス # IPアドレス追加時
ip addr del IPアドレス/ネットマスク brd + dev 対象のネットワークデバイス # IPアドレス削除時

もし特定のネットワークアドレスのIPアドレスをすべて削除する場合は、以下のようにipコマンドを実行することで一気に削除ができる。 (以下の例では、172.16.0.0/24のネットワークアドレスを持つIPアドレスをすべて削除している)

ip -s -s a f to 172.16.0.0/24
blacknon@BS-PUB-UBUNTU-01:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.XXX/24 brd 172.28.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.16.0.120/24 brd 172.16.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.16.0.121/24 brd 172.16.0.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet 172.16.0.122/24 brd 172.16.0.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:64ff:fe64:6131/64 scope link
       valid_lft forever preferred_lft forever
blacknon@BS-PUB-UBUNTU-01:~$ sudo ip -s -s a f to 172.16.0.0/24
2: eth0    inet 172.16.0.121/24 brd 172.16.0.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
2: eth0    inet 172.16.0.122/24 brd 172.16.0.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
2: eth0    inet 172.16.0.120/24 brd 172.16.0.255 scope global eth0
       valid_lft forever preferred_lft forever

*** Round 1, deleting 3 addresses ***
*** Flush is complete after 1 round ***
blacknon@BS-PUB-UBUNTU-01:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.XXX/24 brd 172.28.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:64ff:fe64:6131/64 scope link
       valid_lft forever preferred_lft forever

2.ネットワークデバイスのリンクアップ・リンクダウンを行う

ネットワークデバイスのリンクアップ・リンクダウンもipコマンドで行える。 以下のようにipコマンドを実行してやれば良い。

ip link set dev ネットワークデバイス名 up # リンクアップ
ip link set dev ネットワークデバイス名 down # リンクダウン

上記のほか、txqueuelenやmtuの値についても同様に設定可能のようだ。

3.arpキャッシュの確認をする

arpコマンドで行えた、arpキャッシュの確認もipコマンドで行うことが可能だ。 以下のようにコマンドを実行する。

ip neigh show
blacknon@BS-PUB-UBUNTU-01:~$ ip neigh show
172.20.100.XXX dev eth1 lladdr 66:33:35:32:35:30 STALE
172.28.0.UUU dev eth0 lladdr 00:0d:b9:35:b2:d1 STALE
172.20.100.TTT dev eth1 lladdr 00:0d:b9:35:b2:d1 DELAY

右端のステータスは、それbぞれ以下のような意味を持つ。

  • REACHABLE … 近隣ノードが有効な状態
  • STALE … 近隣ノードに対し、到達可能かどうかが不明な状態(といっても、REACHABLEから一定時間経過するとこの状態へ遷移するだけなので、コレだけでは不明)
  • DELAY … パケットを送信して受信を待っている状態

手動でarpキャッシュを追加・削除したり、ステータスを変更する場合、以下のようにコマンドを実行してやれば良い。

ip neigh add IPアドレス lladdr MACアドレス dev ネットワークデバイス名 nud ステータス # arpキャッシュを追加
ip neigh del IPアドレス dev ネットワークデバイス名 # arpキャッシュを削除
ip neigh chg IPアドレス dev ネットワークデバイス名 nud ステータス # arpキャッシュのステータス変更

4. ルーティングテーブルを管理する

4-1. ルーティングテーブルを確認する

ipコマンドでルーティングテーブルを確認する場合、以下の様にコマンドを実行する。

ip route list
ip route
blacknon@BS-PUB-UBUNTU-01:~$ ip route
default via 172.2S.XXX.1 dev eth0 onlink
172.2X.ZZZ.0/24 dev eth1  proto kernel  scope link  src 172.2S.XXX.120
172.2S.XXX.0/24 dev eth0  proto kernel  scope link  src 172.2X.XXX.120
172.2S.YYY.0/24 via 172.2X.ZZZ.1 dev eth1

4-2. ルーティングテーブルにルートを追加・削除する

ルーティングテーブルにルートを追加・削除する場合、以下のようにコマンドを実行する。

デフォルトルートを設定する場合

ip route add default ネットワークアドレス/ネットマスク via ゲートウェイアドレス
ip route add default ネットワークアドレス/ネットマスク dev ネットワークデバイス名

ルートを追加する場合

ip route add ネットワークアドレス/ネットマスク via ゲートウェイアドレス
ip route add ネットワークアドレス/ネットマスク dev ネットワークデバイス名

ルートを削除する場合

ip route del default # デフォルトルートを削除
ip route del default ネットワークアドレス/ネットマスク via ゲートウェイアドレス
ip route del default ネットワークアドレス/ネットマスク dev ネットワークデバイス名

5.ネットワークの利用状況を確認する

ipコマンドでは「-s」オプションを使用することで、ネットワークの利用状況を表示させる事もできる。 以下、実行例

ip -s addr
ip -s link
blacknon@BS-PUB-UBUNTU-01:~$ ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    11840      160      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    11840      160      0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    229360420  236906   69931   0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4633502    66592    0       0       0       0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 32:63:31:63:38:61 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    9640135    97223    8013    0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4018539    13938    0       0       0       0
blacknon@BS-PUB-UBUNTU-01:~$ ip -s addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
    RX: bytes  packets  errors  dropped overrun mcast
    11840      160      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    11840      160      0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.XXX/24 brd 172.28.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::XXX:64ff:fe64:6131/64 scope link
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast
    229360480  236907   69932   0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4633502    66592    0       0       0       0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 32:63:31:63:38:61 brd ff:ff:ff:ff:ff:ff
    inet 172.20.100.XXX/24 brd 172.20.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::XXXX:31ff:fe63:3861/64 scope link
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast
    9644245    97263    8031    0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    4023049    13959    0       0       0       0

参考