1 nmcliコマンドとは?
NICにIPアドレス設定等のネットワーク管理方法として、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技術ブログ