NETCONF

NETCONF（）は、ネットワーク機器の設定を取得、更新するための遠隔手続き呼出し (RPC) ベースの通信プロトコルである。クライアントとしてネットワーク管理アプリケーション、サーバとしてネットワーク機器を想定したクライアントサーバモデルのプロトコルとして定義されている。

経緯
IETFでの議論https://tools.ietf.org/wg/netconf/draft-ietf-netconf-protを経て、2006年に初版1.0が  として公開された。その後、2011年に改訂版 1.1 が  として発行されている。

特徴
プロトコル構成
NETCONFプロトコルは、大きく四つの層に分けられる。

セキュアトランスポート層
メッセージを転送するためのプロトコルを規定した層である。 ではこの層については要件のみが規定され、特定のプロトコルには依存しない形になっている。SSH、TLS、SOAP、などの利用が想定されている。

メッセージ層
NETCONFのRPCメッセージはXMLにコード化されてやり取りされる。そのコード化方法を規定した層である。クライアントからのRPCリクエストは<rpc>要素を、サーバからのレスポンスは <rpc-reply>(エラーのときは<rpc-error>)要素をそれぞれルートとしたXMLメッセージを用いる。
<rpc message-id="1" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <get-config>
    <source>
      <running/>
    </source>
    <filter xmlns:t="http://example.com/schema/1.2/config" type="xpath"
            select="/t:top/t:users/t:user[t:name='fred']"/>
  </get-config>
</rpc>

<rpc-reply message-id="1" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
   <data>
     <!-- レスポンス -->
   </data>
</rpc-reply>

オペレーション層
NETCONFプロトコルでは、設定データストアやNETCONFセッションに対する操作を定義している。

 オペレーション 説明 get-config 指定した設定データストアから設定を取得する。 edit-config 指定した設定データストアの内容を更新する。 copy-config 指定した設定データストアの内容を別の設定データストアの内容で置き換える。 delete-config 指定したデーストアを削除する。 lock 指定した設定データストアを排他的にロックする。 unlock 指定した設定データストアのロックを解除する。 get running 設定データストアから設定やネットワーク機器の状態情報を取得する。 close-session NETCONFセッションを安全に閉じるよう要求する。 kill-session NETCONFセッションを強制終了する。
設定データストアとは、ネットワーク機器が動作中、あるいは起動時などそれぞれの状態にあるときに、読み込まれたり設定されたりする対象となる設定データ全体のことである。NETCONFプロトコルでは、動作中の設定データストアはと表され、NETCONFをサポートする機器は必ずこの設定データストアを持たなければならない。加えて、機器によっては起動時の設定データストアなどを持つことができる。

コンテント層
NETCONFプロトコルではこの層については特に規定しない。NETCONFでやり取りされるデータの定義は、YANGモデルによって行う。

Capability
あるネットワーク機器が、標準的な機能に加え、その機器固有の機能をNETCONF経由でアクセスできるようにしたい場合がある。この機能または機能群のことを capability といい、URIを用いて表す。例えば、get-config操作のフィルタをXPathで記述できる機能の capability はurn:ietf:params:netconf:capability:xpath:1.0と表現される。

ネットワーク機器とNETCONFクライアントの間でセッションが開かれた時、ネットワーク機器とクライアントは相手に対し利用可能な機能の capability のリストを、<hello>メッセージとして相手に広告する。これにより、そのセッションで利用する capability のバージョン調整などを行うことが可能となる。

以下は、その<hello>メッセージの例である。
   <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <capabilities>
       <capability>urn:ietf:params:netconf:base:1.1</capability>
       <capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
       <capability>http://example.net/router/2.3/myfeature</capability>
     </capabilities>
     <session-id>4</session-id>
   </hello>

実装
ネットワーク機器
 Cisco IOSCisco IOS ネットワーク管理コンフィギュレーション ガイド Network Configuration Protocol （NETCONF）
 Juniper JUNOSNETCONF XML Management Protocol and Junos XML API Overview
 Alaxala AXシリーズOAN(Open Autonomic Networking)

ネットワーク管理アプリケーション
 Cisco NSONSO FAQ'S

ライブラリ/ツール
 libnetconf2libnetconf2
 ncclientncclient
 JNCJNC

 脚注 

 公式サイト 

 出典 

外部リンク
 NETCONF Central

Category:インターネットのプロトコル
Category:アプリケーション層プロトコル
Category:インターネット標準
Category:ネットワーク管理
Category:システム管理
4741