【基礎】Network Managerについて(概要とコマンド制御) | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

年末年始休暇がもうすぐ終わっちゃいますね(´・ω・`)

(休暇関係なく働いてくださっている皆さま、本当にありがとうございます。)

 

さて、2021年は毎週2回のブログ更新を目標の1つにしようと思うので、

今日も頑張って書いていきます。

今回はRedHat7以降で標準利用されている、Network Managerについて。

 

もくじ

1.Network Managerとは

2.Network Managerができること

3.Network Managerの操作手段概要 / GNOME control-center / nmtui / nmcli

4.nmcliからNetwork Managerを利用するnmcliの基本書式general / networking / radio / device / connection / agent / monitor

 

1.Network Managerとは

Linuxで、ネットワークに関する様々な制御をしてくれるソフトウェア。

RedHat系ディストリビューションでは、バージョン7以降標準でインストールされている。

 

ググると小難しいことがたくさん書かれているが、

Linuxで、ネットワーク通信を行うために、頑張って働いてくれているヤツだと思えばとりあえずOK。

 

2.Network Managerができること(概要)

Network Managerによって制御できる主な内容と、制御対象(オブジェクトという。詳細後述)の名称は以下の通り。

No 制御内容 制御対象名
(オブジェクト)
説明
1 ネットワーク全般 general ネットワーク全般に関しての設定確認と
変更が出来る
2 ネットワーク全体の機能の
オン/オフ、状態確認
networking オフにすると外部との通信が出来なくなる。
3 ネットワーク種類別の機能の 
オン/オフ、状態確認
radio Wi-Fi、WANという種別ごとに、
オン/オフを制御できる。
4 接続デバイスの確認、
設定変更
device 接続デバイスの一覧確認や設定変更が
可能。
※接続デバイスとは、有線LANや
無線LANなど、ネットワーク接続を行う
ための周辺装置のこと。
ネットワークインタフェースとも呼ばれる。
5 接続ネットワーク構成の
確認、設定変更、
有効化/無効化
connection 接続プロファイルの一覧確認や
設定変更が可能。
※接続プロファイルとは、
ネットワーク接続をするための詳細情報。

 

それぞれの確認方法や制御の仕方について、さらに詳しく見ていく。

 

3.Network Managerの操作手段

■概要

Network Managerによるネットワークへの各種管理は、

Network Managerを利用するためのインタフェース(GNOME control-centerまたはnmtuiまたはnmcli)を通じて行う。

…と言ってもちょっと分かりづらいので、図示してみる。

 

パソコンを使うとき、パソコンに対する命令をマウスやキーボードなど複数の手段で行うことができるのと同様、

Network Managerを利用するときも、Network Managerに対する命令を、複数の手段(インタフェース)で行えるようになっている。

 

各インタフェース(GNOME control-center/nmtui/nmcli)について、それぞれ詳細を見ていく。

 

■インタフェース① GNOME control-center

GUI(Graphical User Interface)、すなわち、パソコンのデスクトップのような画面で操作する方法。

※画面出してスクショ貼ろうとしたんですが、PCのスペックの関係で、そもそも手元のLinuxマシンにGUIの機能入れてなかったこと思い出しました…m(__)m 気になる方はググってください…。

 

■インタフェース② nmtui

nmtuiはNetwork Manager Text User Interfaceの略。

GUI(画面)と、CUI(Character User Interface/文字だけで操作する方法)の中間くらいの方法。

 

ターミナルに「nmtui」を打ち込むと、Network Managerを操作するための画面が現れる。

マウスではなく、キーボードの各矢印キーと、Enterキー、ESCキーで操作する。

nmtuiで設定できる内容は、上のスクショの通り、限られている。

 ・接続インタフェースの編集(確認・削除を含む)

 ・接続インタフェースの有効化/無効化

 ・ホスト名の設定

 

以下のように、設定内容が見やすいという利点はある。

nmtuiで対応している項目を設定したい場合は、利用するのも1つの手段かと思う。

 

■インタフェース③ nmcli

nmcliはNetwork Manager Command Line Interfaceの略。

名前の通り、コマンドラインからCUIでNetwork Managerを操作する。

 

個人的にはnmcliを一番お勧めする。

他の2つの手段に比べてやれることが多いうえ、何より操作をログに残すことができるためである。

本番環境ではログによる操作証跡を残すことが必須となるのはもちろん、検証環境でもエビデンスや検証内容の確認用途でログは必要となる(はず)。

 

ので、次の章ではnmcliによってNetwork Managerを利用するための、具体的なコマンドをいくつか紹介したい。(GNOME control-centerとnmtuiの具体的な使い方は割愛)

 

4.nmcliからNetwork Managerを利用してみる

■nmcliの基本書式

nmcliを利用する時のコマンドの基本書式は以下の通り。

 $ nmcli [オプション] オブジェクト コマンド

 

オブジェクトは、2.Network Managerができること(概要) でも出てきたが、

Network Managerの管理対象となるものを指す。nmcliで制御できるものは全部で7つある。

 

なおネットワークの設定は、OS全体に関わる重大な設定となるため、rootユーザでしか設定変更はできない。(状態の確認・参照は可能)

 

オブジェクトごとに実行できるコマンドが異なるため、以下代表的なものを記載する。

 

■generalオブジェクト

generalは、ネットワーク全般に関しての設定確認と変更に関するオブジェクト。

 

・ネットワーク全般の状態の確認

※「status」を付けずに「nmcli general」とした場合も同様の結果となる。

$ nmcli general status

STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN
connected  full          enabled  enabled  enabled  enabled

 

・ホスト名の確認と変更

$ nmcli general hostname   # 確認

localhost.localdomain
 

$ nmcli general hostname localhost1.localdomain # ホスト名をlocalhost1.localdomainに変更
 

$ nmcli general hostname   # 変更を確認
localhost1.localdomain

 

・Network Managerが持つ権限の確認

$ nmcli general permissions
PERMISSION                                                        VALUE
org.freedesktop.NetworkManager.enable-disable-network             yes
org.freedesktop.NetworkManager.enable-disable-wifi                yes
org.freedesktop.NetworkManager.enable-disable-wwan                yes
org.freedesktop.NetworkManager.enable-disable-wimax               yes
org.freedesktop.NetworkManager.sleep-wake                         yes
org.freedesktop.NetworkManager.network-control                    yes
org.freedesktop.NetworkManager.wifi.share.protected               yes
org.freedesktop.NetworkManager.wifi.share.open                    yes
org.freedesktop.NetworkManager.settings.modify.system             yes
org.freedesktop.NetworkManager.settings.modify.own                yes
org.freedesktop.NetworkManager.settings.modify.hostname           yes
org.freedesktop.NetworkManager.settings.modify.global-dns         yes
org.freedesktop.NetworkManager.reload                             yes
org.freedesktop.NetworkManager.checkpoint-rollback                yes
org.freedesktop.NetworkManager.enable-disable-statistics          yes
org.freedesktop.NetworkManager.enable-disable-connectivity-check  yes
org.freedesktop.NetworkManager.wifi.scan                          unknown

 

 

■networkingオブジェクト

ネットワーク全体の機能のオン/オフの制御と、稼働状態を確認できるオブジェクト。

 

・状態確認

$ nmcli networking
enabled

 

・オン/オフ

$ nmcli networking on   / nmcli networking off

※オフにするとネットワーク機能全体がオフになるので注意。

 

■radioオブジェクト

ネットワーク種類別の接続有効化/切断の制御と、接続状況を確認できるオブジェクト。

 

・接続状況確認

$ nmcli radio
WIFI-HW  WIFI     WWAN-HW  WWAN
enabled  enabled  enabled  enabled

 

・種別毎(wi-fi、wwan、全て)で、接続する/切断する

Wi-Fi

$ nmcli radio wifi on / nmcli radio wifi off

wwan

$ nmcli radio wwan on / nmcli radio wwan off

すべて

$ nmcli radio all on / nmcli radio all off

 

 

■deviceオブジェクト

接続デバイスの一覧確認や設定変更に関するオブジェクト。
※接続デバイスとは、有線LANや無線LANなど、ネットワーク接続を行うための周辺装置のこと。

 

・一覧確認

※「status」を付けずに「nmcli device」とした場合も同様の結果となる。

 $ nmcli device status
DEVICE      TYPE      STATE      CONNECTION
ens33       ethernet  connected  ens33
virbr0      bridge    unmanaged  --
lo          loopback  unmanaged  --
virbr0-nic  tun       unmanaged  --

 

・デバイスの詳細を確認

$ nmcli device show

GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:73:11:C3
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.227.132/24
IP4.GATEWAY:                            192.168.227.2

(略 ※かなり長い)

ちなみにデバイス名を指定すると、そのデバイスについてのみの情報が示される。

$ nmcli device show ens33   # ens33のところは適切なデバイス名


・デバイスのプロパティ値の変更

nmcli device show で確認した各値について、値を変更することができる。

$ nmcli device set デバイス名 プロパティ名 プロパティ値

例:

$ nmcli device set ens33 managed no

 

・デバイスの接続

$ nmcli device connect デバイス名

 

・デバイスの再接続

 ※接続していたデバイスに何らかの変更が生じた時、再接続して変更を適用する時に利用。

$ nmcli device connect デバイス名

 

・デバイスの設定変更の即時適用

 ※接続プロファイルの内容は変えずに、デバイスのプロパティ値の変更を直ちに適用する時に利用。

$ nmcli device modify デバイス名 プロパティ名 プロパティ値

ちなみに、値の変更ではなく、値の追加/削除も可能。

 追加:

$ nmcli device modify デバイス名 +プロパティ名 プロパティ値

 削除:

$ nmcli device modify デバイス名 -プロパティ名 プロパティ値

 

 

・デバイスの接続断

$ nmcli device disconnect デバイス名

 

・デバイスの削除

 ※ソフトウェアデバイス(仮想デバイスなど)を対象とする。ハードウェアデバイス(物理的にサーバにくっついてるやつ)の削除は不可。

$ nmcli device delete デバイス名

 

■connectionオブジェクト

デバイスの接続ネットワーク構成の確認、設定変更、有効化/無効化を行うオブジェクト。

 

・ネットワーク構成の確認

※「status」を付けずに「nmcli device」とした場合も同様の結果となる。

$ nmcli connection show
NAME   UUID                                  TYPE      DEVICE
ens33  899856f4-5c89-491c-aaef-xxxxxx  ethernet  ens33

 

・特定のネットワークの詳細を確認

※「nmcli connection show」で確認できたUUIDを指定することで詳細確認が可能。

$ nmcli connection show 899856f4-5c89-491c-aaef-xxxxxx
connection.id:                          ens33
connection.uuid:                        899856f4-5c89-491c-aaef-xxxxxx
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              ens33
connection.autoconnect:                 yes

 

・指定ネットワークの接続を有効化/無効化する

 有効化

$ nmcli connection up networkのUUID

 無効化

$ nmcli connection down networkのUUID

 

 

・接続プロファイルを新規に作成する

 ※新しいネットワークプロファイルを作ることができる。新しいネットワークプロファイルの設定として、指定できるプロパティはかなり多いので、詳細はnmcli connection add --helpでご確認のこと。

$ nmcli connection add 作成するネットワークの中身のプロパティ名 プロパティ値

 

・既存の接続プロファイルのプロパティ値を編集する

$ nmcli connection modify ネットワークのUUID プロパティ名 プロパティ値

 

 

・既存の接続プロファイルのプロパティ値を編集する

modifyでは、プロパティを引数に指定することで、当該プロパティの値を編集していたが、

editでは対話形式でプロパティを編集することができる。

$ nmcli connection edit ネットワークのUUID

例:

$ nmcli connection edit 899856f4-5c89-491c-aaef-xxxxxx

===| nmcli interactive connection editor |===

Editing existing '802-3-ethernet' connection: '899856f4-5c89-491c-aaef-xxxxxx'

Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli>

対話形式になったときに使えるコマンドは、以下の通り「?」で確認できる。

nmcli> ?

------------------------------------------------------------------------------
---[ Main menu ]---
goto     [<setting> | <prop>]        :: go to a setting or property
remove   <setting>[.<prop>] | <prop> :: remove setting or reset property value
set      [<setting>.<prop> <value>]  :: set property value
describe [<setting>.<prop>]          :: describe property
print    [all | <setting>[.<prop>]]  :: print the connection
verify   [all | fix]                 :: verify the connection
save     [persistent|temporary]      :: save the connection
activate [<ifname>] [/<ap>|<nsp>]    :: activate the connection
back                                 :: go one level up (back)
help/?   [<command>]                 :: print this help
nmcli    <conf-option> <value>       :: nmcli configuration
quit                                 :: exit nmcli
------------------------------------------------------------------------------

 

・接続プロファイルを削除する

$ nmcli connection delete ネットワークのUUID

 

・接続プロファイルのアクティビティを監視する。

 監視のイメージは、後述のmonitorオブジェクトと同じかんじ。

$ nmcli connection monitor ネットワークのUUID

 

・ディスクからの接続プロファイル読み込み

 すべて読み込み

$ nmcli connection reload

 指定プロファイルのみ読み込み

$ nmcli connection load ファイル名

 

 

■agentオブジェクト

Network Managerの動作エージェントを制御するオブジェクト。

公式マニュアルも見てみたけどよく分からず…。(ゴメンナサイ)

おそらくセキュリティ関連の設定が出来るのだと思われる。

 $ nmcli agent secret または polkit または all

 

 

■monitorオブジェクト

Network Managerの変更を監視する(モニタリング)ためのオブジェクト。

コマンドは無く、以下のようにして放置しておくと、Network Managerによるネットワーク変更時に、変更内容を出力してくれる。

 

以下では例として、監視中にホスト名を変更したときにどのような出力が出るかを確認した。

 $ nmcli monitor

Hostname set to 'localhost1.localdomain' 

 

 

 

以上、Linux(主にRedHat系)のネットワークに関して色んな制御をしてくれるNetwork Managerについてでした。