NMState:宣言型ネットワーク構成ツール


Linuxエコシステムは、人気のあるnmtuiGUIユーティリティを含むネットワークを構成する多くの方法を提供します。このガイドでは、NMStateと呼ばれるさらに別のネットワーク構成ツールを紹介します。

NMStateは、Linuxホストでネットワークを構成するための宣言型ネットワークマネージャーです。これは、ホストネットワーク設定を管理するコマンドラインツールを提供するライブラリです。ノースバウンドの宣言型APIを介してホストネットワークを管理します。このガイドの執筆時点では、NetworkManagerデーモンはNMStateでサポートされている唯一のプロバイダーです。

このガイドでは、NMStateツールの使用例をいくつか見ていきます。このガイドでは、FedoraLinuxを使用してこれをデモンストレーションします。

ネットワーク管理には、命令型と宣言型の2つのアプローチがあります。命令型アプローチでは、端末でコマンドを実行することにより、インターフェイスのネットワーク状態を明示的に定義します。焦点は「方法」にあります。

たとえば、命令型アプローチを使用してネットワークを停止するには、次のコマンドを実行します。

$ sudo ifconfig enp0s3 down

一方、宣言型アプローチでは、YAMLファイルを使用して構成に変更を適用します。 KubernetesなどのほとんどのDevOpsオーケストレーションツールは、このアプローチを使用して、YAMLファイルを使用してポッドアプリケーションをデプロイします。

このアプローチは、DevOpsサークルで一般にInfrastructure as Code(IaC)と呼ばれるものを提供します。これにより、ホスト上のネットワーク構成の自動化が強化され、エラーを最小限に抑えてネットワークインターフェイスに複数の変更を加えるための高速で信頼性の高い方法が提供されます。

それでは、ギアを切り替えて、NMState構成ツールを使用してLinuxでネットワークインターフェイスを構成する方法を見てみましょう。

ステップ1:NMState NetworkingConfigToolをインストールする

Nmstateをインストールしてボールを転がします。まず、次のようにFedoraリポジトリからパッケージが利用可能かどうかを確認します。

$ sudo dnf search nmstate

出力から、ネットワークマネージャーが公式リポジトリで利用可能であることがわかります。

次に、次のようにNMstateをインストールします。これはFedora31以降のバージョンで機能します。

$ sudo dnf install nmstate

このコマンドは、NMStateネットワークマネージャーAPIを他のPython依存関係と一緒にインストールします。

インストールが完了したら、nmstateパッケージが次のようにインストールされていることを確認します。

$ rpm -qi nmstate

RHELベースのLinuxの場合、最初にcoprリポジトリを有効にします。

$ sudo dnf copr enable nmstate/nmstate-stable

次に、次のようにNMstateをインストールします。

$ sudo dnf install nmstate

ソースからNMStateをインストールする方法に関する追加の手順を確認してください。

インストールすると、インストールされているNMstateのバージョンを次のように確認できます。

$ nmstatectl version

1.0.2

LinuxでのNMState構成ツールの使用

NMstateをインストールしたら、NetworkManagerAPIを最大限に活用する方法について説明します。

ネットワークインターフェイスの現在のネットワーク構成を表示するには、次のコマンドを実行します。これがenp0s3インターフェースの設定です。

$ nmstatectl show enp0s3

出力は4つの異なるセクションに分かれています。

  • dns-resolver:このセクションには、特定のインターフェイスのネームサーバー構成が含まれています。
  • route-rules:これはルーティングルールを規定します。
  • ルート:これには、動的ルートと静的ルートの両方が含まれます。
  • インターフェース:このセクションでは、ipv4とipv6の両方の設定を指定します。

Linuxでのネットワーク構成の変更

NMState構成ツールを使用して、対話モードまたはファイルベースモードのいずれかを使用して、ホストを目的の状態に構成できます。

  • インタラクティブ:これは、nmstatectleditコマンドを使用してネットワークインターフェースを編集します。このコマンドは、EDITOR環境変数によって定義されたテキストエディタを開きます。変更が保存されると、構文エラーが検出されない限り、NMStateは新しい構成をすぐに適用します。
  • ファイルベース:ファイルベースモードでは、インターフェース構成は、nmstatectlapplyコマンドを使用してYAMLまたはJSONファイルを使用して適用されます。

手を汚して、NMStateを使用してネットワーク構成を変更する方法を確認しましょう。

私たちのFedoraシステムには、次の構成の2つのアクティブなネットワークインターフェースがあります。

$ ip -br -4 a
lo               UNKNOWN        127.0.0.1/8 
enp0s3           UP             192.168.2.104/24 
enp0s8           UP             192.168.2.103/24 

インタラクティブモードを使用して、enp0s3ネットワークインターフェイスのMTU(最大伝送ユニット)を変更します。デフォルトでは、これは示されているように1500に設定されています。

$ ifconfig

これを4000に変更します。次のようにnmstatectleditコマンドを使用して変更します。

$ sudo nmstatectl edit enp0s3

これにより、テキストエディタで構成が開きます。私たちの場合、vimエディターで開きます。次に、一番下までスクロールして、mtuパラメータを見つけます。 vimでファイルを編集するのと同じように、値を4000に変更します。次に、変更を保存します。

ファイルを保存して終了すると、NMstateが変更を保存するときに、端末にスクランブルされた出力が表示されます。介入は必要ないので、ただじっと座ってください。

ここで、変更が行われたことを確認しましょう。

$ ifconfig

端末の出力から、MTUをデフォルトの1500値から4000に正常に変更したことがわかります。

ここで、ファイルベースモードを使用して構成を変更しましょう。この例では、enp0s8ネットワークインターフェイスのIPv6を無効にします。最初のステップは、enp0s8ネットワークインターフェイスの目的の状態を指定するYAMLファイルを作成することです。

$ sudo nmstatectl show enp0s8 > enp0s8.yml

次に、YAMLファイルを次のように編集します。

$ sudo vim enp0s8.yml

ipv6セクションまで下にスクロールします。 IPv6を無効にするには、enabledパラメータをfalseに設定し、通過した行を削除します。

構成を保存し、次のようにYAMLファイルを使用して新しい状態を適用します。

$ sudo nmstatectl apply enp0s8.yml

次に、示されているコマンドを実行して、IPv6が無効になっていることを確認します。表示される出力は、enp0s8ネットワークインターフェイスのIPv6が空白であることを示しています。これは、インターフェイスでIPv6が正常に無効になったことを意味します。

$ ip -br a 

NMstateが提供するもう1つの非常に便利な機能は、目的のネットワーク状態を一時的に構成する機能です。構成に問題がなければ、続行して変更を永続的にすることができます。それ以外の場合、タイムアウトが経過すると、加えられた変更は初期設定にロールバックされます。デフォルトのタイムアウトは60秒です。

これを示すために、enp0s3インターフェイスに静的IPを一時的に設定し、DHCPを無効にします。もう一度、テキストエディタを使用してファイルにアクセスします。

$ sudo vim enp0s3.yml

ipv4セクションまでスクロールします。静的IPを指定します–この場合は192.168.2.150で、打ち抜かれた行を削除します。また、dhcpパラメータは必ずfalseに設定してください。

ファイルを保存し、次のように一時的に変更をコミットします。

$ sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml

-no-commit オプションは、-timeout オプションで定義された期間(この例では20秒)の変更を一時的に適用します。

変更の一時的な適用を確認するために、20秒の時間間隔でIP構成を確認します。

$ ip -br a 

出力から、20秒の時間間隔の後にインターフェイスIP構成がDHCPに戻ったことがわかります。 IPアドレスは、静的に構成された以前のIPである192.168.2.150から192.168.2.104に戻りました。

確かに、NMStateツールは、ネットワークインターフェイスを構成するための便利なツールです。これは、NetworkManagerAPIを使用してホストのインターフェースの目的の構成状態を適用する宣言型ツールです。

状態は、インタラクティブなアプローチを使用するか、事前構成されたYAMLファイルを使用するファイルベースの方法を使用して簡単に定義できます。これにより、構成タスクの自動化が強化され、構成中のエラーが減少します。