nmcliコマンドでNW設定

#はじめに

RHEL7系からNetworkManager経由でNW設定するように変更になりました。
普段はnmtuiでNW設定をしていますが今回はnmcliコマンドを使用してmanコマンドでオプションを確認しがら実機で動作確認しました。


個人的にはRHEL6以前のNW設定より分かりづらい印象です。

これを新人エンジニアに伝える際、どう伝えたら分かりやすいのか？を考えてみましたが、
LANケーブルが物理サーバ側のNICに挿し込まれているか、挿し込まれていないかをイメージすると分かりやすいと思いました。

もっと良い例えがありましたらコメント頂けると助かります。

NetworkManagerは物理(仮想)NICとの接続をNWプロファイル単位で管理していますがNWプロファイルの接続、切断と言われても理解しにくいと思いました。

もし理解が間違っていた際はコメント頂けると助かります。


#nmcliコマンドでNW設定

##NWデバイスの状態確認

次のコマンドを使用してNWデバイス名の確認とSTATEが"disconnected"となっている行がNWデバイスとNetworkManager間で切断されていることを確認します。(プロファイルが割り当てられていない状態になります。)

この状態がLANケーブルが物理サーバのNICに挿し込まれていない状態とイメージすると分かりやすいと思います。

```
nmcli device
```

実行結果

```
DEVICE  TYPE      STATE         CONNECTION
----------------------------------------
ens160  ethernet  disconnected  --
lo      loopback  unmanaged     --
```

##NWデバイスを接続する

次のコマンドを使用して実行結果がsuccessfullyと表示されたことを確認します。
今回はNWデバイス名は"ens160"になります。各環境毎に読み替えて下さい。

```
nmcli device connect ens160
```

実行結果

```
Device 'ens160' successfully activated with '73d6567b-3e14-4c0c-9fd8-52e3a9b6a26a'.
```

##NWデバイスの状態確認

次のコマンドを使用してSTATEが"connected"となっている行がNWデバイスとNetworkManagerが接続されていることを確認します。(プロファイルが割り当てられている状態となります。)

この状態がLANケーブルが物理サーバ側のNICに挿し込まれている状態とイメージすると分かりやすいと思います。

```
nmcli device
```

実行結果

```
DEVICE  TYPE      STATE      CONNECTION
ens160  ethernet  connected  ens160
lo      loopback  unmanaged  --
```


##NWプロファイル設定の確認

次のコマンドを実行してNWプロファイルの以下の項目を確認します。

```
nmcli connect show ens160
```

実行結果(一部抜粋)
★印は今回の変更箇所

```
connection.id:                          ens160
connection.interface-name:              ens160
connection.autoconnect:                 no　★
ipv4.method:                            auto　★
ipv4.dns:                               --　★
ipv4.addresses:                         --　★
ipv4.gateway:                           --　★
IP4.ADDRESS[1]:                         192.168.145.128/24
IP4.GATEWAY:                            192.168.145.2
IP4.DNS[1]:                             192.168.145.2
```

因みにnmcli connection show CONNECTION名、nmcli connect show Device名でも同じ結果得られます。

今回は仮想環境ソフトウェアから提供された各種NW情報を手動で設定します。
具体的にはNW自動接続、IPv4固定、DNS設定、GWを手動で設定します。

現在使用されているNW情報は、IP4.ADDRESS[1]、IP4.GATEWAY、IP4.DNS[1]項目等で確認します。

DNSはGoogleが提供しているパブリックDNSを利用します。詳細は以下のURLを参考にしてください。

https://developers.google.com/speed/public-dns


##現在のIPアドレスを確認

次のコマンドを実行し現在のIPアドレスを確認します。

```
ip address show
```

実行結果(一部抜粋)

```
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:72:27:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.145.128/24 brd 192.168.145.255 scope global dynamic noprefixroute ens160
       valid_lft 1770sec preferred_lft 1770sec
    inet6 fe80::b966:3f82:a9a3:3768/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```

##NWプロファイルの内容を変更

以下のコマンドでNWプロファイルに変更をします。

```
nmcli connection modify ens160 \　←　変更するプロファイル名(CONNECTION名)を指定
ipv4.method manual \　←　IPv4を自動からマニュアル設定に変更
connection.autoconnect yes \　←　OS再起動時に自動的にプロファイルに接続に変更
ipv4.addresses 192.168.145.100/24 \　←　IPv4に設定するIPアドレスを指定
ipv4.gateway 192.168.145.2 \　←　IPv4に設定するデフォルトゲートウェイを指定
ipv4.dns 8.8.8.8　←　IPv4に設定するDNSサーバを指定
```

##NWプロファイルの内容を確認

次のコマンドを実行し★印の箇所が変更されたことを確認します。

```
nmcli connection show ens160
```

実行結果

```
connection.id:                          ens160
connection.interface-name:              ens160
connection.autoconnect:                 yes　★
ipv4.method:                            manual　★
ipv4.dns:                               8.8.8.8　★
ipv4.addresses:                         192.168.145.100/24　★
ipv4.gateway:                           192.168.145.2　★
IP4.ADDRESS[1]:                         192.168.145.128/24
IP4.GATEWAY:                            192.168.145.2
IP4.DNS[1]:                             192.168.145.2
```

プロファイルに変更を実施したためIP4.ADDRESS[1]、IP4.GATEWAY、IP4.DNS[1]項目は変更されないことが正しい動作となります。

##プロファイル変更後、現在のIPアドレスを確認

次のコマンドを実行し現在のIPアドレスを確認します。NWデバイスに設定を反映させていないためIPアドレスが変更されていないことを確認します。

```
ip address show
```

実行結果

```
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:72:27:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.145.128/24 brd 192.168.145.255 scope global dynamic noprefixroute ens160
       valid_lft 1015sec preferred_lft 1015sec
    inet6 fe80::b966:3f82:a9a3:3768/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```

##NWデバイスにNWプロファイルの変更内容を反映

次のコマンドを実行してNWプロファイルの内容をNWデバイスに反映させます。

```
nmcli connection down ens160
nmcli connection up ens160
```
nmcli connection upの実行でもNWデバイスに設定を反映させることは可能です。


##NWプロファイルの内容を確認

次のコマンドを実行し★印の箇所が変更されたことを確認します。

```
nmcli connection show ens160
```

実行結果

```
connection.id:                          ens160
connection.interface-name:              ens160
connection.autoconnect:                 yes
ipv4.method:                            manual
ipv4.dns:                               8.8.8.8
ipv4.addresses:                         192.168.145.100/24
ipv4.gateway:                           192.168.145.2
IP4.ADDRESS[1]:                         192.168.145.100/24　★
IP4.GATEWAY:                            192.168.145.2　★
IP4.DNS[1]:                             8.8.8.8　★
```

##NWデバイスに設定反映後のIPアドレスを確認

次のコマンドを実行し現在のIPアドレスを確認します。

```
ip address show
```

実行結果(一部抜粋)

```
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:72:27:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.145.100/24 brd 192.168.145.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::b966:3f82:a9a3:3768/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```

#まとめ

nmcliコマンドのオプション表記を省略しない形で記載しました。
今回の作業をオプションを省略した形で記載した場合は以下のようになります。

```
nmcli d

nmcli d c ens160

nmcli d

nmcli c s ens160

ip a

nmcli c modify ens160 \
ipv4.method manual \
connection.autoconnect yes \
ipv4.addresses 192.168.145.100/24 \
ipv4.gateway 192.168.145.2 \
ipv4.dns 8.8.8.8

nmcli c s ens160

ip a

nmcli c u ens160

nmcli c s ens160

ip a

```