初歩のipコマンドの使い方（Link、IPアドレス）

RHEL（Cent）6.xまでは、ネットワークインタフェースの設定にはifconfigコマンドが主に使われていましたが、RHEL（Cent）7.xからipコマンドが推奨され、ifconfigコマンドは非推奨となりました。
またifconfigコマンドは、DockerコンテナやOpenStackの仮想ネットワークを実現する際に必須となるLinux Network Namespaceに対応していないので、いつまでもifconfigコマンドを使っているわけにもいかなくなっています。

ipコマンドの背景などの細かい話は、中井さんの[RHEL7/CentOS7でipコマンドをマスター](http://enakai00.hatenablog.com/entry/20140712/1405139841)を読んでください。

で、ここではipコマンドの簡単な使い方を自分用メモも兼ねて書きます。
なお検証は、CentOS7、NetwrokManagerを無効にした環境で行っています。
# Link（ip link）
ネットワークインタフェースのリンク状態の確認や、LinkUp/Downの設定に使います。
## Link状態確認
まずはリンク状態の確認方法について...
以下のコマンドを実行すると、ネットワークインタフェースのリンク状態が確認できます。

```
ip link show
```

このコマンドの省略形は

```
ip l
```

になります。
実行した結果は以下のような感じ...

```
# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:f2:e7:3f brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
```

これでリンク状態やMACアドレスなど、ネットワークインタフェースの状態が確認できます。
オプションに-sをつけると、ネットワークインタフェースごとのパケット処理数も出力できます。

```
# ip -s l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode 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
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    192156     1758     0       0       0       192
    TX: bytes  packets  errors  dropped carrier collsns
    117715     780      0       0       0       0
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:f2:e7:3f brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    10257      100      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    1226       15       0       0       0       0
```

##LinkのUp/Down
以下のコマンドで、ネットワークインタフェースのLink Up/Downの設定ができます。

```
ip link set <インタフェース名> [up/down]
```

コマンド実行例はこんな感じ...

```
ip link set enp0s9 up
```

このコマンドの省略形は

```
ip l set enp0s9 up
```

になります。
Link Upの実行はこんな感じ...

```
# ip l set enp0s9 up

# ip l
...
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
```

enp0s9のstatusが`state UP`に変わっています。

Link Downの実行はこんな感じ...

```
# ip l set enp0s9 down

# ip l
...
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
```

enp0s9のstatusが`state DOWN`に変わっています。
## タグVLANインタフェースの作成
ipコマンドを使って、タグVLANインタフェースが作れます。
通常ノードに接続されたスイッチのポートはuntag（access）設定で使用されるケースが多いので、使用頻度はあまり高くないかもしれませんが、知っておくと仮想ネットワーク構築時に便利なので...

タグVLANインタフェースを作成するコマンドはこんな感じ...

```
ip link add link <インタフェース名> name <タグVLANインタフェース名> type vlan id <VLAN ID>
```

コマンド実行例はこんな感じ...

```
ip link add link enp0s9 name enp0s9.100 type vlan id 100
```

タグVLANインタフェース名は、`<インタフェース名>.<VLAN ID>`って感じでつけてください。

で、作成したタグVLANインタフェースはこんな感じで確認できます。

```
# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:f2:e7:3f brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
5: enp0s9.100@enp0s9: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
```

5番目のenp0s9.100@enp0s9が追加されたタグVLANインタフェースになります。
このインタフェースをLinkUpしてIPアドレスを付与すれば、VLANtag付パケットのやり取りができるようになります。

タグVLANインタフェースの削除は、`ip link del <タグVLANインタフェース名>`とコマンドを実行して行います。
以下のように実行すれば削除できます。

```
# ip link del enp0s9.100
```

#IPアドレス（ip addr）
ネットワークインタフェースへのIPアドレスの割り当てに使います。
##IPアドレスの確認
以下のコマンドを実行すると、ネットワークインタフェースに割り当てられているIPアドレスが確認できます。

```
ip addr show
```

このコマンドの省略形は

```
ip a
```

になります。
実行した結果は以下のような感じ...

```
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.113/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 3023sec preferred_lft 3023sec
    inet6 fe80::a00:27ff:fe38:8f84/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 08:00:27:f2:e7:3f brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 08:00:27:8e:f0:cf brd ff:ff:ff:ff:ff:ff
```

`inet`、`inet6`のところにIPアドレスが表示されます。

##IPアドレスの追加/削除
以下のコマンドで、ネットワークインタフェースにIPアドレスを追加することができます。

```
ip addr add <IPアドレス/マスクbit数> dev <インタフェース名>
```

コマンド実行例はこんな感じ...

```
ip addr add 10.0.7.0/24 dev enp0s3
```

このコマンドの省略形は

```
ip a add 10.0.7.0/24 dev enp0s3
```

になります。
IPアドレス追加の実行はこんな感じ...

```
# ip a add 10.0.7.0/24 dev enp0s3

# ip a
...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.113/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 2239sec preferred_lft 2239sec
    inet 10.0.7.0/24 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe38:8f84/64 scope link

```

`inet 10.0.7.0/24 scope global enp0s3`という感じで、enp0s3にIPアドレスが追加されています。

IPアドレスの削除は、追加コマンドのaddの部分を、以下のようにdelに変えるだけです。

```
ip addr del 10.0.7.0/24 dev enp0s3
```

実際に実行すると

```
# ip a del 10.0.7.0/24 dev enp0s3

# ip a
...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:38:8f:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.113/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 3455sec preferred_lft 3455sec
    inet6 fe80::a00:27ff:fe38:8f84/64 scope link
       valid_lft forever preferred_lft forever
```

のように、`inet 10.0.7.0/24 scope global enp0s3`が削除されています。



以上が基本的なipコマンドの使い方になります。
ルーティング確認やARPテーブルの確認などもipコマンドからできるようになっていますが、最初のところでリンクしている中井さんの[RHEL7/CentOS7でipコマンドをマスター](http://enakai00.hatenablog.com/entry/20140712/1405139841)に書かれているので、そちらを参考にしてください。