IPコマンドの基本の使い方


```
ip [OPTION] OBJECT {COMMAND | help}
```
よく使うOPTIONは、
1. -4 – IPV4表示
2. -6 - IPV6表示


よく使うOBJECTは、
1. link (l) – ネットワークインターフェースを表示する時に使う
2. address (addr/a) – IPアドレスの表示・変更の時に使う
3. route (r) – Routingの表示・設定するときに使う

*ip help*を叩くと詳細が表示される。
<img src="https://phoenixnap.com/kb/wp-content/uploads/2019/08/ip-command-options.png">


## IPアドレスの確認
よく使うコマンド

- show
- add
- del

```bash
# ip addr show

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
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
```

### 特定のインタフェースに絞る
```bash
# ip addr show dev ens3

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:42:ac:11:00:10 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.16/16 brd 172.17.255.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:10/64 scope link 
       valid_lft forever preferred_lft forever
```
*dev = device*

#### 結果の読み方
**mtu 1500** 
> maximum transmission unit = 1500 bytes
ネットワーク上で送信可能なパケットの最大サイズは1500バイト

**link/ether**
> macアドレス

**inet**
> IPv4 アドレス
**brd**: ブロードキャストアドレス
**scope global**: 送信先はグローバル
**lft**: （Lifetime）有効期限

**inet6**
> IPv6 のアドレス
**scope link**: 送信先はローカルネットワーク内のみ

**Scope補足**
>
|Scope|Description|
|:-:|:-:|
|global|valid everywhere|
|site|valid only within this site (IPv6)|
|link|valid only on this device|
|host|valid only inside this host (machine)|

### IPバージョン指定
```bash
ip -4 addr show dev eth0 
ip -6 addr show dev eth0
```
※addrをaだけにしてもOK！
例、*ip -4 a dev eth0*

## IPアドレスの追加/削除
### 追加

```bash
ip addr add 192.168.10.10/24 dev eth0
```


### 削除
```bash
ip addr del 192.168.10.10/24 dev eth0
```

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

```bash
# ip link show

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: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
```
<font color="red">※IPアドレス表示されない点が「ip addr show」と違う点です。</font>

### 特定のインタフェースに絞る
```bash
# ip link show eth0
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
```

## インタフェースの接続・切断

```
ip link set dev {DEVICE} {up|down}
```

### ネットワークインターフェースUp
```bash
ip link set eth0 up
```

### ネットワークインターフェース切断
```
ip link set eth0 down
```

<hr>
# Routing

```bash
$ ip route
default via 172.17.0.1 dev ens3 
10.244.1.0/24 via 172.17.0.9 dev ens3 
```
**line 1**
<code>*default via 172.17.0.1 dev ens3*</code>
下記以外のネットワークと通信する時（デフォルトルート）は、

- Next hop(パケットが転送する次のゲートウェイ）は**172.17.0.1**
- 転送するインタフェース(device)は**ens3**

**line 2**
<code>*10.244.1.0/24 via 172.17.0.9 dev ens3*</code>
**10.244.1.0/24**ネットワークと通信する時は、

- Next hop(パケットが転送する次のゲートウェイ）は**172.17.0.9**
- 転送するインタフェース(device)は**ens3**


[![Youtube Video](http://img.youtube.com/vi/hvuiigb0fKA/0.jpg)](http://www.youtube.com/watch?v=hvuiigb0fKA "The IP Toute Table")

# subneting
[![Youtube Video](http://img.youtube.com/vi/ecCuyq-Wprc/0.jpg)](http://www.youtube.com/watch?v=ecCuyq-Wprc "Network Subnet")

<hr>
- [参考１](https://linuxize.com/post/linux-ip-command/)
- [参考２](https://phoenixnap.com/kb/linux-ip-command-examples)