RHEL9(Red Hat Enterprise Linux 9)のネットワーク設定では、NetworkManagerサービスの利用が重要になってきます。
今後、NetworkManagerサービスを利用したネットワーク設定をする時に、特に重要な「4つの設定」を理解する事で、”想定した動作をしない”、”設定が反映しない”などハマったりせずに、スムーズに対応できます。
■理解しておきたい4つの設定
- ネットワーク設定においてNetworkManagerサービスの起動が必須で、network-scriptサービスは存在しません。
すなわち、NetworkManagerサービスをサーバ起動時に有効にしておかないとネットワーク接続できません。 - ネットワークの設定ファイルにおいて、「キーファイル」と「ifcfgスタイル」の2種類があり、デフォルトは、「キーファイル」の設定が優先され反映されます。
すなわち、「キーファイル」と「ifcfgスタイル」の設定ファイルが2つあった場合は「キーファイル」の設定が反映され「ifcfgスタイル」の設定はデフォルトでは利用されません。
■「キーファイル」の保存先
例
/etc/NetworkManager/system-connections/eth0.nmconnection
■「ifcfgスタイル」の保存先
例
/etc/sysconfig/network-scripts/ifcfg-eth0 - ネットワークの設定ファイルには「UUID」を必ず設定します。
「UUID」によってネットワークデバイスを判別するため、「キーファイル」、「ifcfgスタイル」いずれにおいても「UUID」を設定してください。
■ネットワークデバイスに割り振られた「UUID」を確認するコマンド
# nmcli c s
■「UUID」の記述方法
※「キーファイル」「ifcfgスタイル」も記述方法は同じ
例
UUID=061fc60e-a393-ffff-947c-942f83f9ce39 - ネットワークの「NAME」はデバイス名と同名に設定します。
# nmcli c s
コマンドで確認したときに「NAME」と「DEVICE」の名前を確認できます。
この「NAME」名を「DEVICE」名と同じ名前に設定します。
■「NAME」名の変更方法
# nmcli c s
# nmcli c modify 【UUID】 connection.id 【NAME名】
# nmcli c s
例
# nmcli c modify 3372ae2d-15dc-3516-9f6c-bd370b9c2013 connection.id enp0s8
「NAME」を「DEVICE」名に合わせたいので「DEVICE」名である「enp0s8(適宜)」を設定します。
これら4つの事を掘り下げて解説します。
RHEL9ではNetworkManagerサービス起動が必須になった
RHEL9から「network-scripts」のパッケージがありません。
# systemctl 【status|start|stop|restart】 network.service
は使えません。
RHEL8以前では、「network-scripts」パッケージをインストールすることで、「NetworkManagerサービス」を停止してネットワーク管理ができていました。
すなわち、どちらを利用するか?選択することができました。
RHEL9からは、ネットワークを利用する場合「NetworkManagerサービス」の起動が必須となっております。
※通常、RHEL9をインストールする際に、ネットワーク設定を行うと「NetworkManagerサービス」の自動起動が有効で、サーバが起動するように設定されています。
systemctl enable NetworkManager.service
極端ですが
以下の条件で利用する場合は、「NetworkManagerサービス」を起動する必要はありません。
- サーバ起動時にネットワークが無効でもよい
->ネットワークサービスの自動起動が不要な場合 - ネットワークの設定は、毎回サーバを起動してから実施したい
->恒久的な設定(ネットワークの設定ファイル)が不要な場合
「NetworkManagerサービス」を起動せずにネットワークを管理したい場合は、「ipコマンド」を利用すると実現できます。
「ipコマンド」を利用することで、ネットワークの設定および利用が可能になります。
但し、「ipコマンド」によるネットワーク設定は、サーバを再起動すると設定が消えます。
すなわち、「ipコマンド」では、恒久的な設定を行うことができません。
「NetworkManagerサービス」を利用せずに、「ipコマンド」を使用した自動起動を実現したい場合は、スクリプトを作成してサーバの自動起動に組み込む必要があります。
通常は、ここまで手間をかけて「ipコマンド」に固執することはなく、RHEL9に準備されている「NetworkManagerサービス」を起動して利用することになると思います。
RHEL9では「キーファイル」のネットワーク設定がデフォルトで優先されるようになった
RHEL9のNetworkManagerサービスが起動している条件化で、ネットワーク設定をする方法が、「キーファイル」と「ifcfgスタイル」の2種類あります。
それぞれに、「同じUUID」で設定ファイルが存在していた場合、デフォルトでは「キーファイル」の設定ファイルが優先されて設定が反映されます。
設定ファイルの優先順位を決定しているファイルが下記になります。
more /etc/NetworkManager/NetworkManager.conf
ファイル内の[main]タグで「キーフィル」と「ifcfgスタイル」の設定ファイルの優先順位を設定しています。
RHEL9では以下の設定になっています。
■NetworkManager.conf
---
[main]
#plugins=keyfile,ifcfg-rh
----
■解説
これは、「#」でコメントアウトされていますが、「キーファイル」->「ifcfgスタイル」の順に設定を確認します。
「#」のコメントアウトを外しても同じ意味になります。
「キーファイル」に設定ファイルがなく、「ifcfgスタイル」に設定ファイルがあった場合は、「ifcfgスタイル」の設定が反映されます。
※「キーファイル」と「ifcfgスタイル」の設定ファイルがなかった場合は「auto設定」となりDHCPによる反映を試みて設定します。
■「キーファイル」と「ifcfgスタイル」のファイル有無による反映状況
※「同じUUID」が設定されていた場合
NetworkManager.conf の[main]タブ設定 | 「キーファイル」 「ifcfgスタイル」 両方ファイル有 | 「キーファイル」 のみファイル有 | 「ifcfgスタイル」 のみファイル有 |
---|---|---|---|
#plugins=keyfile,ifcfg-rh plugins=keyfile,ifcfg-rh と同じ意味 | 「キーファイル」 のファイルが反映 | 「キーファイル」 のファイルが反映 | 「ifcfgスタイル」 のファイルが反映 |
plugins=ifcfg-rh | 「ifcfgスタイル」 のファイルが反映 | 「キーファイル」 のファイルが反映 | 「ifcfgスタイル」 のファイルが反映 |
plugins=keyfile | 「キーファイル」 のファイルが反映 | 「キーファイル」 のファイルが反映 | 「auto設定」で反映 ※「ifcfgスタイル」 のファイル反映しない |
plugins=ifcfg-rh,keyfile | 「ifcfgスタイル」 のファイルが反映 | 「キーファイル」 のファイルが反映 | 「ifcfgスタイル」 のファイルが反映 |
■「NetworkManager.conf」ファイル
---追加情報---
「キーファイル」と「ifcfgスタイル」の両方のファイルが存在しない状態からnmcliコマンドでネットワーク設定をすると上記ルールに従って設定ファイルが自動作成されます。
例1.
■前提条件
・サーバ内に「キーファイル」と「ifcfgスタイル」の両方のファイルが存在しない
・NetworkManager.confファイルが「#plugins=keyfile,ifcfg-rh」の場合
->
nmcliコマンドでネットワーク設定すると「キーファイル」が作成されます。
例2.
■前提条件
・サーバ内に「キーファイル」と「ifcfgスタイル」の両方のファイルが存在しない
・NetworkManager.confファイルが「plugins=ifcfg-rh,keyfile」の場合
->
nmcliコマンドでネットワーク設定すると「ifcfgスタイル」ファイルが作成されます。
「キーファイル」によるNW設定ファイル
■保存先
/etc/NetworkManager/system-connections/【NWインターフェース名】.nmconnection
more /etc/NetworkManager/system-connections/enp0s3.nmconnection
■サンプル:「enp0s3.nmconnection」ファイル
[connection]
id=enp0s3
uuid=061fc60e-a393-38b0-947c-942f83f9ce39
type=ethernet
interface-name=enp0s3
[ethernet]
[ethtool]
feature-lro=false
[ipv4]
address1=192.168.11.40/24,192.168.11.1
dns=192.168.11.1;192.168.11.2;
method=manual
[ipv6]
method=ignore
never-default=true
[proxy]
■実機で上記サンプルの「キーファイル」を確認
「ifcfgスタイル」によるNW設定ファイル
■保存先
/etc/sysconfig/network-scripts/ifcfg-【NWインターフェース名】
more /etc/sysconfig/network-scripts/ifcfg-enp0s3
■サンプル:「ifcfg-enp0s3」ファイル
DEVICE=enp0s3
TYPE=Ethernet
NAME=enp0s3
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.11.40
PREFIX=24
GATEWAY=192.168.11.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
UUID=061fc60e-a393-38b0-947c-942f83f9ce39
DNS1=192.168.11.1
DNS2=192.168.11.2
NW_CONTROLLED=no
PROXY_METHOD=none
BROWSER_ONLY=no
■実機で上記サンプルの「ifcfgスタイル」ファイルを確認
RHEL9でもネットワークの設定ファイルにUUIDを設定した方がよい
UUIDを設定しないことで、以下のようなデメリットがあるので、ネットワークの設定をするときは、必ず「UUID」を設定してください。
※「UUID」は、サーバにネットワークデバイスが追加されていると勝手に割り振られます。「UUID」を確認するコマンドは以下になります。
nmcli c s
■UUIDを設定しないと発生する3つのデメリット
- ネットワークデバイスと設定ファイルの紐づけができていないので、設定ファイルと実際に設定されているネットワーク設定が意図しないものになっている場合があります。
- UUIDを設定せずに「キーファイル」か「ifcfgスタイル」でネットワーク設定すると途中でUUIDを設定すると設定がおかしくなります。
- nmcliコマンドにて設定変更するとネットワークの設定ファイル(「キーファイル」・「ifcfgスタイル」)に「UUID」の設定がない場合、意図せずに「UUID」が追記されます。
「UUID」を明示的に設定するメリット3選
1.設定ファイルとデバイスおよび実際の設定を紐づける
自分が意図したネットワーク設定が、意図したネットワークデバイスに正しくサーバに反映されているか?を確認できます。
下記の「1.」~「3.」で紐づけを確認しています。
実際にコマンドを実行した紐づけを確認した画像を下記に添付しているの確認できます。
1.設定ファイル:自分が設定したいネットワーク設定
more /etc/sysconfig/network-scripts/ifcfg-enp0s8
2.ネットワークデバイス:ネットワークデバイスとネットワーク設定を紐づけを確認
nmcli c s
3.サーバ設定:サーバに反映された設定とネットワーク設定を紐づけを確認
nmcli c s enp0s8
■「設定ファイル」と「ネットワークデバイス」および「サーバ設定」の紐づけを確認
「UUID」を設定することで、これらの3つ内容を紐づけて正しくネットワークの設定ができているか?確認することができます。
2.サーバのネットワーク設定がおかしくならないよう防止
「UUID」を設定していない状態から「UUID」を後から設定するとネットワークデバイスの設定やネットワーク設定がおかしくなるので「UUID」を設定しておくことでそれらを防ぐことができます。
■「UUID」を設定しなかったことで設定がおかしくなった例
「UUID」を設定することで、このような何らかの操作による設定がおかしくなることを防止することができます。
3.「UUID」を明示的にして意図しないネットワークの設定ファイルの追記を防止
ネットワークの設定ファイルである「キーファイル」・「ifcfgスタイル」いずれかを利用してネットワークの設定を行います。
このファイルに「UUID」を設定しない状態で「nmcli」コマンドを実行して設定を変更すると「UUID」が意図せずに追記されます。
このように意図せずに追記され混乱を避けるためにもネットワークの設定ファイルには、「UUID」を明示的に記載しておきます。
■「nmcli」コマンド実行により「UUID」が追記された例
「UUID」を設定することで、すでに明示的になっており、設定変更による追記はなく意図した設定ファイルに実行結果が反映されます。
ネットワークの「NAME」はデバイス名に設定すると便利になる
#nmcli c s
コマンドで表示される「NAME」名が日本語だったりするときがあるので、「nmcli」コマンドを利用するときに日本語だと使い勝手が悪くなります。
「NAME」名は「nmcli」コマンドでよく利用するので、「DEVICE」名と同じにしておくと便利なので、必ず変更してください。
■ネットワークの「NAME」変更手順
nmcli c s
nmcli c modify 3372ae2d-15dc-3516-9f6c-bd370b9c2013 connection.id enp0s8
nmcli c s
■ネットワークの「NAME」を「DEVICE」の名前と同じに設定
コメント