NETCONF プロトコルの概要
データ モデルの概要:プログラムによる設定と各種の標準規格に準拠した設定
ネットワーク デバイスを管理する従来の方法は、階層的データ(設定コマンド)および運用データ(show コマンド)用のコマンドライン インターフェイス(CLI)を使用することです。ネットワーク管理の場合、特にさまざまなネットワーク デバイス間で管理情報を交換するために、Simple Network Management Protocol(SNMP)が広く使用されています。頻繁に使用されている CLI と SNMP ですが、これにはいくつかの制約事項があります。CLI は非常に独自的であり、テキスト ベースの仕様を理解し、解釈するには人間の介入が必要です。SNMP は、階層的データと運用データを区別しません。
これを解決するには、手作業で設定作業を行うのではなく、プログラムを使用したり、各種の標準規格に準拠してネットワーク デバイスの設定を記述します。Cisco IOS XE で動作するネットワーク デバイスは、データ モデルを使用するネットワーク上の複数のデバイスの設定の自動化をサポートしています。データ モデルは、業界で定義された標準的な言語で開発され、ネットワークの設定とステータス情報を定義できます。
Cisco IOS XE は、Yet Another Next Generation(YANG)データ モデリング言語をサポートしています。YANG をネットワーク設定プロトコル(NETCONF)で使用すると、自動化されたプログラミング可能なネットワーク操作の望ましいソリューションが実現します。NETCONF(RFC 6241)は、クライアント アプリケーションがデバイスからの情報を要求してデバイスに設定変更を加えるために使用する XML ベースのプロトコルです。YANG は主に、NETCONF 操作で使用される設定とステート データをモデル化するために使用されます。
Cisco IOS XE では、モデル ベースのインターフェイスは、既存のデバイス CLI、Syslog、および SNMP インターフェイスと相互運用します。必要に応じて、これらのインターフェイスは、ネットワーク デバイスからノースバウンドに公開されます。YANG は、RFC 6020 に基づいて各プロトコルをモデル化するために使用されます。
(注) |
開発者に分かりやすい方法で Cisco YANG モデルにアクセスするには、GitHub リポジトリを複製し、vendor/cisco サブディレクトリに移動します。ここでは、IOS XE、IOS-XR、および NX-OS プラットフォームのさまざまなリリースのモデルを使用できます。 |
NETCONF
NETCONF は、ネットワーク デバイスの設定をインストール、操作、削除するためのメカニズムです。
コンフィギュレーション データとプロトコル メッセージに Extensible Markup Language(XML)ベースのデータ符号化を使用します。
NETCONF はシンプルなリモート プロシージャ コール(RPC)ベースのメカニズムを使用してクライアントとサーバ間の通信を促進します。クライアントはネットワーク マネージャの一部として実行されているスクリプトやアプリケーションです。通常、サーバはネットワーク デバイス(スイッチまたはルータ)です。サーバは、ネットワーク デバイス全体のトランスポート層としてセキュア シェル(SSH)を使用します。SSH ポート番号 830 をデフォルトのポートとして使用します。ポート番号は、設定可能なオプションです。
NETCONF は、機能の検出およびモデルのダウンロードもサポートしています。サポート対象のモデルは、ietf-netconf-monitoring モデルを使用して検出されます。各モデルに対する改定日付は、機能の応答に示されています。データ モデルは、get-schema RPC を使用して、デバイスからオプションのダウンロードとして入手できます。これらの YANG モデルを使用して、データ モデルを理解したりエクスポートしたりできます。NETCONF の詳細については、RFC 6241 を参照してください。
Cisco IOS XE Fuji 16.8.1 よりも前のリリースでは、運用データ マネージャ(ポーリングに基づく)が個別に有効になっていました。Cisco IOS XE Fuji 16.8.1 以降のリリースでは、運用データは、NETCONF を実行しているプラットフォームで動作し(設定データの仕組みと同様)、デフォルトで有効になっています。運用データのクエリまたはストリーミングに対応するコンポーネントの詳細については、GitHub リポジトリで命名規則の *-oper を参照してください。
NETCONF RESTCONF IPv6 のサポート
データ モデル インターフェイス(DMI)は IPv6 プロトコルの使用をサポートしています。DMI による IPv6 のサポートは、クライアント アプリケーションが、IPv6 アドレスを使用するサービスと通信する場合に役に立ちます。外部向けインターフェイスは、IPv4 と IPv6 の両方についてデュアルスタックをサポートします。
DMI は、ネットワーク要素の管理を容易にする一連のサービスです。NETCONF や RESTCONF などのアプリケーション層プロトコルは、ネットワークを介してこれらの DMI にアクセスします。
IPv6 アドレスが設定されていない場合でも、外部向けアプリケーションは IPv6 ソケットをリッスンし続けますが、これらのソケットは到達不能になります。
NETCONF グローバル セッションのロック
NETCONF プロトコルは、デバイス設定を管理し、デバイスの状態情報を取得するための一連の操作を提供します。NETCONF はグローバル ロックをサポートしており、NETCONF では応答しなくなったセッションを kill する機能が導入されています。
複数の同時セッションの全体にわたって一貫性を確保し、設定の競合を防ぐために、セッションのオーナーは NETCONF セッションをロックできます。NETCONF lock RPC は、コンフィギュレーション パーサーと実行コンフィギュレーション データベースをロックします。その他のすべての NETCONF セッション(ロックを所有していない)は、編集操作を実行できません。ただし、読み取り操作は実行できます。これらのロックは存続時間が短いことを意図しており、オーナーは、他の NETCONF クライアント、NETCONF 以外のクライアント(SNMP、CLI スクリプトなど)、および人間のユーザとやり取りをせずに変更を加えることができます。
アクティブ セッションによって保持されているグローバル ロックは、関連付けられたセッションが kill されたときに無効になります。ロックによって、ロックを保持しているセッションが、設定に対して排他的な書き込みアクセスを行えるようになります。グローバル ロックにより設定の変更が拒否された場合は、エラー メッセージによって、NETCONF グローバル ロックが原因で設定の変更が拒否されたことが示されます。
<lock> 操作は必須パラメータ <target> を受け取ります。これは、ロックしようとするコンフィギュレーション データストアの名前です。ロックがアクティブな場合、<edit-config> 操作と <copy-config> 操作は許可されません。
NETCONF のグローバル ロックの保持中に clear configuration lock コマンドが指定された場合は、設定の完全な同期がスケジュールされ、警告の syslog メッセージが生成されます。このコマンドは、パーサー コンフィギュレーション ロックのみをクリアします。
<rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
NETCONF Kill セッション
セッションの競合時、またはクライアントによるグローバル ロックの誤用が生じたときは、show netconf-yang sessions コマンドを使用して NETCONF セッションをモニタできます。また、clear netconf-yang session コマンドを使用して応答しなくなったセッションをクリアすることもできます。clear netconf-yang session コマンドは、NETCONF ロックとコンフィギュレーション ロックの両方をクリアします。
<kill-session> 要求は、NETCONF セッションを強制的に終了します。NETCONF エンティティは、オープン セッションの <kill-session> 要求を受信すると、プロセス内のすべての操作を停止し、セッションに関連付けられているすべてのロックとリソースを解放して、関連付けられた接続をすべて閉じます。
<kill-session> 要求には、終了する NETCONF セッションのセッション ID が必要です。セッション ID の値が現在のセッション ID と同じ場合は、無効な値を示すエラーが返されます。NETCONF セッションのトランザクションがまだ進行中に NETCONF セッションが終了した場合は、データ モデル インフラストラクチャによってロールバックが要求され、ネットワーク要素にロールバックが適用されて、すべての YANG モデルの同期がトリガーされます。
セッションの kill が失敗し、グローバル ロックが保持されている場合は、コンソールまたは vty を使用して clear configuration lock コマンドを入力します。この時点で、データ モデルを停止して再起動することができます。
候補コンフィギュレーション サポート
候補コンフィギュレーション サポート機能を使用すると、シンプルなコミット オプションを使用して RFC 6241 を実装することによって、候補機能をサポートできます。
候補データストアは、デバイスの実行コンフィギュレーションのコピーを保存する一時的な作業領域となります。実行コンフィギュレーションをデバイスにコミットする前に、実行コンフィギュレーションを作成して変更することができます。候補機能は、NETCONF 機能 urn:ietf:params:netconf:capability:candidate:1.0 により示されます。この NETCONF 機能は、デバイスが候補データストアをサポートしていることを示します。ユーザはこの共有データストアを使用して、デバイスの実行コンフィギュレーションに影響を与えることなく、デバイスのコンフィギュレーションを作成、追加、削除、変更できます。コミット操作では、デバイスのコンフィギュレーションが「候補」から「実行」のコンフィギュレーションにプッシュされます。「候補」データストアが有効になっていると、「実行」のデータ ストアには NETCONF セッションを介して書き込むことができず、すべてのコンフィギュレーションは候補を通じてのみコミットされます。つまり、稼働中の設定を直接変更できる NETCONF 機能は、候補では有効になりません。
(注) |
候補データストアは共有データ ストアであることに留意してください。複数の NETCONF セッションが内容を同時に変更する可能性があります。したがって、内容を変更する前にデータストアをロックして、コミットが競合しないようにし、最終的にコンフィギュレーションの変更が失われる可能性を防ぐことが重要になります。 |
候補の NETCONF 操作
候補データ ストアでは次の操作を実行できます。
(注) |
この項の情報は RFC6241 の 8.3.4 項を参考にしています。詳細と正確な RPC については、RFC を参照してください。 |
ロック
<lock> RPC は、ターゲットのデータ ストアを「ロック」するために使用します。これにより、他のユーザは「ロックされた」データ ストアのコンフィギュレーションを変更できなくなります。ロック操作では候補データと実行データの両方をロックできます。
(注) |
「ロック中」の候補データストアは、Cisco IOS のコンフィギュレーションのロックや実行コンフィギュレーションのロックに影響を与えません。逆も同様です。 |
コミット
<commit> RPC は、候補コンフィギュレーションをデバイスの実行コンフィギュレーションにコピーします。「コミット」操作は、候補コンフィギュレーションを更新してコンフィギュレーションをデバイスにプッシュした後に実行する必要があります。
「実行」または「候補」のデータストアのいずれかが別の NETCONF セッションによってロックされている場合、commit RPC は RPC エラー応答で失敗します。<error-tag> は <in-use> となり、<error-info> にはロックを保持している NETCONF セッションの「セッション ID」が示されます。「conf t lock」モードに移行して「グローバル」ロックを使用し、「実行」コンフィギュレーションをロックすることもできますが、コミット操作は RPC エラー応答で失敗し、error-tag の値は <in-use>、セッション ID は「0」になります。
コンフィギュレーション編集
候補コンフィギュレーションは、コンフィギュレーションを変更するための「edit-config(コンフィギュレーション編集)」操作のターゲットとして使用できます。これにより、デバイスの実行コンフィギュレーションに影響を与えることなく、候補内のコンフィギュレーションの変更を準備できるようになります。
廃棄
候補コンフィギュレーションに加えられた変更を削除するには、discard(廃棄)操作を実行して候補コンフィギュレーションを実行コンフィギュレーションに戻します。
たとえば、NETCONF セッション A によってすでに候補データストアの内容が変更されている場合、セッション B が候補をロックしようとするとロックは失敗します。NETCONF セッション B では候補をロックする前に、他の NETCONF セッションからの未解決のコンフィギュレーションを削除するために <discard> 操作を実行する必要があります。
ロック解除
ロック、edit-config(コンフィギュレーション編集)、コミットなどで候補コンフィギュレーションを操作した後、Unlock RPC でターゲットとして「candidate」を指定することによって、データ ストアを「ロック解除」できます。これで、他のセッションでのすべての操作に候補を使用できるようになります。
候補データストアに対する未解決の変更で不具合が発生した場合、コンフィギュレーションの回復が困難になり、他のセッションで問題が生じる可能性があります。問題を回避するため、未解決の変更は、「NETCONF セッションの障害」で暗黙的にロックが解除されたとき、または「Unlock」操作で明示的にロックが解除されたときに廃棄されます。
コンフィギュレーション取得、コンフィギュレーション コピー、コンフィギュレーション検証
候補は、get-config(コンフィギュレーション取得)、copy-config(コンフィギュレーション コピー)、または validate (コンフィギュレーション検証)のどの操作でも、ソースまたはターゲットとして使用できます。候補の変更をデバイスにコミットせずに、コンフィギュレーションの検証のみを行う場合は、<validate> RPC の後に「discard」を付けることで実行できます。
候補の使用方法
次の図は、候補データストアを介してデバイス コンフィギュレーションを変更する場合に推奨されるベスト プラクティスを示しています。
-
実行データストアをロックします。
-
候補データストアをロックします。
-
edit-config RPC とターゲットの候補を使用して、候補コンフィギュレーションを変更します。
-
候補コンフィギュレーションを「実行」にコミットします。
-
候補と実行をロック解除します。
候補サポートの設定
候補データストア機能は、 netconf-yang feature candidate-datastore コマンドを使用して有効にすることができます。データストアの状態が「実行」から「候補」、またはその逆に変わると、変更を有効にするために netconf-yang または restconf の再起動が行われることをユーザに通知する警告メッセージが表示されます。候補が有効になっていると、実行のデータ ストアには NETCONF セッションを介して書き込むことができず、すべてのコンフィギュレーションは候補を通じてのみコミットされます。つまり、稼働中の設定を直接変更できる Netconf 機能は、候補では有効になりません。
netconf-yang または restconf confd プロセスの開始時に候補または実行のデータストアの選択がコンフィギュレーションで指定されている場合は、次のような警告が表示されます。
Device(config)# netconf-yang feature candidate-datastore
netconf-yang initialization in progress - datastore transition not allowed, please try again after 30 seconds
netconf-yang または restconf confd プロセスの開始後に候補または実行の選択が行われた場合は、次のように適用されます。
-
netconf-yang feature candidate-datastore コマンドが設定されている場合は、コマンドによって「候補」データストアが有効になり、次の警告が出力されます。
“netconf-yang and/or restconf is transitioning from running to candidate netconf-yang and/or restconf will now be restarted, and any sessions in progress will be terminated”.
-
netconf-yang feature candidate-datastore コマンドが削除された場合は、コマンドによって「候補」データストアが無効になり、「実行」データストアが有効になり、次の警告が出力されます。
netconf-yang and/or restconf is transitioning from candidate to running netconf-yang and/or restconf will now be restarted, and any sessions in progress will be terminated”.
-
netconf-yang または restconf が再起動すると、進行中のセッションは失われます。
(注) |
候補データ ストアは共有データ ストアです。つまり、複数の NETCONF セッションで内容を同時に変更できます。したがって、内容を変更する前にユーザがデータ ストアをロックして、コミットが競合しないようにし、最終的にコンフィギュレーションの変更が失われる(つまり、他のユーザによってコンフィギュレーションが変更され、コミットが発行されて、コンフィギュレーションが上書きされる)可能性を防ぐことが重要になります。 |