hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

nmcliコマンドの使い方



1 nmcliコマンドとは?

NICIPアドレス設定等のネットワーク管理方法として、CentOS7よりNetwokManagerが採用されました。NetwokManagerを利用するために、GUIベースのnmtuiコマンドと、CUIベースのnmcliコマンドがあります。本記事では、nmcliコマンドの使い方を説明します。

用語について簡単に説明しておきます。nmcliのマニュアルを参照すると、connectionについて以下の説明があります。connectionとは、IPアドレス等を定義した設定ファイルのことです。本記事では、設定ファイルのことをプロファイルと呼ぶことにします。

NetworkManager stores all network configuration as "connections", which are collections of data (Layer2
details, IP addressing, etc.) that describe how to create or connect to a network.

プロファイルの使い方として、例えば、ネットワークXに接続するときのプロファイルをプロファイルX、ネットワークYに接続するときのプロファイルをプロファイルYとして作成しておきます。このとき、NICの接続がネットワークXからネットワークYに切り替わったとき、プロファイルYを読み込むことで、簡単にNICの設定を切り替えることができます。

2 検証環境

CentOS版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

NetworkManagerサービスの状態を確認します。activeであることを確認します。

[root@kvm ~]# systemctl is-active NetworkManager
active

3 書式

nmcliコマンド書式は以下のとおりです。本記事では、deviceコマンドおよびconnectionコマンドについて説明します。

# nmcli [OPTIONS...] {help | general | networking | radio | connection | device | agent | monitor} [COMMAND] [ARGUMENTS...]

4 事前準備

お手軽にnmcliコマンドを試すため、本記事では仮想マシンNICを作成します。そのために、以下を実行します。
KVM上に仮想ブリッジ作成
仮想マシンNIC追加

4.1 仮想ブリッジ作成

仮想マシンと接続する仮想ブリッジをKVMホストに作成します。このとき、ifnameには仮想ブリッジの名前、con-nameにはプロファイル名を指定します。プロファイルとは設定ファイルのことです。どちらも任意の文字列を指定できます。

[root@kvm ~]# nmcli connection add type bridge ifname br1 con-name br1-profile
接続 'br1-profile' (0db2f7b8-ba21-4d84-98a4-29de2154e620) が正常に追加されました。

プロファイルを確認します。なお、プロファイル名は、ifcfgにcon-nameで指定した文字列を連結したものになります。

[root@kvm ~]# cat /etc/sysconfig/network-scripts/ifcfg-br1-profile
STP=yes
BRIDGING_OPTS=priority=32768
TYPE=Bridge
-snip-

作成した仮想ブリッジに、管理用のIPアドレスを設定します。

[root@kvm ~]# nmcli connection modify br1-profile ipv4.method manual ipv4.addresses "10.0.0.1/24"

仮想ブリッジをシステムに接続します。

[root@kvm ~]# nmcli device connect br1
デバイス 'br1' が '0db2f7b8-ba21-4d84-98a4-29de2154e620' で正常にアクティベートされました。

バイスの状態を確認します。仮想ブリッジがシステムに接続されたことがわかります。

[root@kvm ~]# nmcli device |grep br1
br1         bridge    接続済み  br1-profile

4.2 仮想マシンNIC追加

仮想マシンの状態を確認します。serverが実行中であることがわかります。このserverにNICを追加します。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中

仮想ブリッジと接続するNICをserverに追加します。

[root@kvm ~]# virsh attach-interface --type bridge --source br1 --model virtio server
インターフェースが正常に接続できました

serverにログインしてNICを確認します。serverには元々eth0が存在していたので、eth1が追加されたことがわかります。本記事では、eth1に対してnmcliコマンドを試してみます。

[root@server ~]# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    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 group default qlen 1000
    link/ether 52:54:00:6f:b0:ca brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:e6:11:cc brd ff:ff:ff:ff:ff:ff

5 デバイスに対する操作(device)

5.1 デバイス一覧を表示する方法

deviceはデバイス一覧を表示するコマンドです。eth1がテスト用に追加したデバイスです。eth1にはIPアドレスを設定していないので、状態(STATE)が「接続中」となっています。eth1のプロファイル名は有線接続 1であることがわかります。

[root@server ~]# nmcli device
DEVICE  TYPE      STATE                     CONNECTION
eth0    ethernet  接続済み                  eth0
eth1    ethernet  接続中 (IP 設定を取得中)  有線接続 1
lo      loopback  管理無し                  --

5.2 デバイスの状態を表示する方法(show)

showはデバイスの詳細情報を表示するオプションです。

[root@server ~]# nmcli device show eth1
GENERAL.DEVICE:                         eth1
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         52:54:00:E6:11:CC
GENERAL.MTU:                            1500
GENERAL.STATE:                          70 (接続中 (IP 設定を取得中))
GENERAL.CONNECTION:                     有線接続 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               オン

6 プロファイルに対する操作(connection)

プロファイルはNICに設定するIPアドレスやデフォルトルータのIPアドレス等の定義のことです。プロファイルは/etc/sysconfig/network-scripts配下に作成されます。作成されるファイル名は、ifcfg+プロファイル名、という書式になります。

6.1 プロファイル名の変更方法

プロファイル一覧を確認します。eth0と有線接続 1という名前のプロファイルが2つ存在することがわかります。

[root@server ~]# nmcli connection show
NAME        UUID                                  TYPE      DEVICE
有線接続 1  0a3de8e8-6615-3898-a691-222ef3580417  ethernet  eth1
eth0        faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

プロファイル名の変更は、プロファイル名もしくはUUIDを指定することができます。まず、uuidを指定してプロファイル名を有線接続 1からeth1-profileに変更してみます。

[root@server ~]# nmcli connection modify 0a3de8e8-6615-3898-a691-222ef3580417 connection.id eth1-profile

プロファイル一覧を確認します。プロファイル名が有線接続 1からeth1-profileに変更されたことがわかります。

[root@server ~]# nmcli connection show
NAME          UUID                                  TYPE      DEVICE
eth1-profile  0a3de8e8-6615-3898-a691-222ef3580417  ethernet  eth1
eth0          faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

次は、プロファイル名を指定してプロファイルを変更してみます。

[root@server ~]# nmcli connection modify eth1-profile connection.id eth1

プロファイル一覧を確認します。プロファイル名がeth1-profileからeth1に変更されたことがわかります。

[root@server ~]# nmcli connection show
NAME  UUID                                  TYPE      DEVICE
eth1  0a3de8e8-6615-3898-a691-222ef3580417  ethernet  eth1
eth0  faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

6.2 プロファイルを削除する方法

プロファイル一覧を確認します。2つのプロファイルが存在することがわかります。

[root@server ~]# nmcli connection show
NAME  UUID                                  TYPE      DEVICE
eth1  0a3de8e8-6615-3898-a691-222ef3580417  ethernet  eth1
eth0  faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

eth1という名前のプロファイルを削除してみます。

[root@server ~]# nmcli connection delete eth1
接続 'eth1' (0a3de8e8-6615-3898-a691-222ef3580417) が正常に削除されました。

プロファイル一覧を確認します。eth1-profileが削除されたことがわかります。

[root@server ~]# nmcli connection show
NAME  UUID                                  TYPE      DEVICE
eth0  faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

/etc/sysconfig/network-scripts配下を確認すると、プロファイルが削除されたことがわかります。

[root@server ~]# ls -l /etc/sysconfig/network-scripts/ifcfg-eth1-profile
ls: /etc/sysconfig/network-scripts/ifcfg-eth1-profile にアクセスできません: そのようなファイルやディレクトリはありません

6.3 プロファイルを追加する方法

バイスの状態を確認します。eth0のプロファイル名はeth0であることがわかります。eth1については、プロファイルが存在しないので(CONNECTION列が"--"になっている)、eth1のプロファイルを作成してみます。

[root@server ~]# nmcli device status
DEVICE  TYPE      STATE     CONNECTION
eth0    ethernet  接続済み  eth0
eth1    ethernet  切断済み  --
lo      loopback  管理無し  --

eth1-profileという名前のプロファイルを追加します。

[root@server ~]# nmcli connection add type ethernet ifname eth1 con-name eth1-profile
接続 'eth1-profile' (1d91c062-e4b6-4d8d-9f10-8f123749323a) が正常に追加されました。

プロファイル一覧を確認します。eth1-profileという名前のプロファイルが追加されたことがわかります。

[root@server ~]# nmcli connection show
NAME          UUID                                  TYPE      DEVICE
eth1-profile  1d91c062-e4b6-4d8d-9f10-8f123749323a  ethernet  eth1
eth0          faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

/etc/sysconfig/network-scripts配下を確認すると、プロファイルが作成されたことがわかります。

[root@server ~]# ls -l /etc/sysconfig/network-scripts/ifcfg-eth1-profile
-rw-r--r--. 1 root root 286  7月  5 20:26 /etc/sysconfig/network-scripts/ifcfg-eth1-profile

6.4 プロファイルを変更する方法

ここでは、IPv4アドレスを設定してプロファイルを変更してみます。

[root@server ~]# nmcli connection show
NAME          UUID                                  TYPE      DEVICE
eth1-profile  1d91c062-e4b6-4d8d-9f10-8f123749323a  ethernet  eth1
eth0          faa3fcd4-e5a9-484c-a98a-7615e3787b4c  ethernet  eth0

作成したプロファイルに定義されているIPv4アドレスを確認します。IPv4アドレスが設定されていないことがわかります。

[root@server ~]# nmcli -g ipv4.addresses connection show eth1-profile

作成したプロファイルにIPv4アドレスを設定します。

[root@server ~]# nmcli connection modify eth1-profile ipv4.method manual ipv4.addresses 10.0.0.20/24

プロファイルを確認します。プロファイルにIPv4アドレスが設定されたことがわかります。

[root@server ~]# nmcli -g ipv4.addresses connection show eth1-profile
10.0.0.20/24

eth1に対してもう1つIPアドレスを追加します。追加する場合"+"を使います。"+"をつけないと、元の設定を変更することになります。

[root@server ~]# nmcli connection modify eth1-profile ipv4.method manual +ipv4.addresses 20.0.0.20/24

プロファイルを確認します。20.0.0.20が追加されたことがわかります。

[root@server ~]# nmcli -g ipv4.addresses connection show eth1-profile
10.0.0.20/24, 20.0.0.20/24

プロファイルから20.0.0.20を削除します。

[root@server ~]# nmcli connection modify eth1-profile ipv4.method manual -ipv4.addresses 20.0.0.20/24

プロファイルを確認します。20.0.0.20が削除されたことがわかります。

[root@server ~]# nmcli -g ipv4.addresses connection show eth1-profile
10.0.0.20/24

6.5 プロファイルを有効(up)/無効にする方法(down)

NICの状態を確認します。IPアドレスが設定されていないので、状態が「接続中」となっています。

[root@server ~]# nmcli device status
DEVICE  TYPE      STATE                     CONNECTION
eth0    ethernet  接続済み                  eth0
eth1    ethernet  接続中 (IP 設定を取得中)  eth1-profile
lo      loopback  管理無し                  --

プロファイルを有効にします。プロファイルを有効にすると、設定ファイルに定義したIPアドレス等がデバイスに設定されます。

[root@server ~]# nmcli connection up eth1-profile
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/15)

eth1に設定されているIPアドレスを確認します。10.0.0.20が設定されたことがわかります。

[root@server ~]# nmcli device show eth1 |grep IP4.ADDRESS
IP4.ADDRESS[1]:                         10.0.0.20/24

プロファイルを無効にします。

[root@server ~]#  nmcli connection down eth1-profile
接続 'eth1-profile' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/15)

eth1に設定されているIPアドレスを確認します。IPアドレスが設定されていないことがわかります。

[root@server ~]# nmcli device show eth1 |grep IP4.ADDRESS
[root@server ~]#

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ