Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

アウトバウンド HTTPS 上の NETCONF セッション

概要 クライアント アプリケーションは、Junos OS リリース 20.2 を実行しているサポート対象デバイスで、アウトバウンド HTTPS を使用してネットワーク構成プロトコル(NETCONF)セッションを確立できます。

このトピックでは、Junos OSリリース20.2を実行するデバイスで、アウトバウンドHTTPSを使用してNETCONFセッションを確立する方法について説明します。拡張アウトバウンド HTTPS を使用した NETCONF およびシェル セッションの確立については、 拡張アウトバウンド HTTPS 上での NETCONF およびシェル セッションを参照してください。

アウトバウンド HTTPS 上の NETCONF セッションについて

アウトバウンド HTTPS を介した NETCONF セッションのメリット

  • NETCONF クライアント アプリケーションが、他のプロトコルからアクセスできないデバイスを管理できるようにします。

  • アウトバウンド HTTPS クライアントの証明書ベースの認証を使用して、デバイスのリモート管理を有効にします。

アウトバウンド HTTPS を介した NETCONF セッションの概要

サポートされる Junos デバイスとネットワーク管理システム間のアウトバウンド HTTPS を介して NETCONF セッションを確立できます。アウトバウンドHTTPSを介したNETCONFセッションにより、SSHなどの他のプロトコルからアクセスできない可能性のあるデバイスをリモートで管理できます。たとえば、デバイスがファイアウォールの背後にあり、ファイアウォールやその他のセキュリティ ツールがそれらのプロトコルをブロックしている場合などに、このような問題が発生する可能性があります。一方、HTTPSは、通常、ほとんどの環境でアウトバウンドが許可されている標準ポートを使用します。

サポートされているデバイスでは、Junos OS には、アウトバウンド HTTPS を使用した NETCONF セッションの確立をサポートする Juniper Extension Toolkit(JET)アプリケーションが含まれています。JET アプリケーションは、gRPC フレームワークを使用して、ネットワーク管理システム上で実行されている gRPC サーバーで構成されるアウトバウンド HTTPS クライアントに接続します。gRPC は、言語に依存しないオープンソースのリモート プロシージャ コール(RPC)フレームワークです。 図 1 は、送信 HTTPS 設定を最も簡単な形式で示しています。

図 1:アウトバウンド HTTPS NETCONF Sessions over Outbound HTTPS 上の NETCONF セッション

このシナリオでは、gRPC サーバーは NETCONF クライアントとして機能し、JET アプリケーションは gRPC クライアントと NETCONF サーバーです。gRPC サーバーは、指定されたポート(デフォルトはポート 443)での接続要求をリッスンします。JET アプリケーションを拡張サービスとして構成するとします。関連する接続と認証情報がスクリプトに渡されます。スクリプトの実行中に、設定されたホストとポート上の gRPC サーバーへの接続を自動的に試みます。

JET アプリケーションと gRPC サーバーは、TLS で暗号化された gRPC セッションを介して持続的な HTTPS 接続を確立します。JET アプリケーションは X.509 デジタル証明書を使用して gRPC サーバーを認証し、認証に成功すると、要求された NETCONF セッションがこの接続を介して確立されます。NETCONF 操作は、拡張サービス アプリケーション用に構成されたユーザーのアカウント権限の下で実行されます。

アウトバウンド HTTPS 接続は、X.509 デジタル証明書を使用して gRPC サーバーを認証します。デジタル証明書とは、認証機関または認証機関(CA)と呼ばれる信頼できる第三者を通じて、お客様の身元を確認するための電子的手段です。認証機関はデジタル証明書を発行します。この証明書は、証明書の検証によって 2 つのエンドポイント間のセキュアな接続を確立するために使用できます。X.509 標準では、証明書の形式が定義されています。サポートされている Junos デバイスでアウトバウンド HTTPS を介して NETCONF セッションを確立するには、gRPC サーバーに有効な X.509 証明書が必要です。

基本的なアウトバウンド HTTPS 機能は、単一のアウトバウンド HTTPS クライアントに接続し、そのクライアントに対して 1 つの gRPC サーバーを構成するためのサポートを提供します。サーバー認証では、自己署名 X.509 証明書を使用する必要があります。接続を介して単一のNETCONFセッションを確立できます。

アウトバウンド HTTPS を介したセッションの接続ワークフロー

アウトバウンド HTTPS を介した NETCONF セッションでは、ネットワーク管理システム上で実行されている gRPC サーバーが NETCONF クライアントとして機能し、Junos デバイス上の JET アプリケーションが gRPC クライアントと NETCONF サーバーになります。

gRPCクライアントとサーバーは、以下のアクションを実行して、アウトバウンドHTTPSを介してNETCONFセッションを確立します。

  1. gRPC サーバーは、指定されたポート、またはポートが指定されていない場合、デフォルト のポート 443 で受信接続をリッスンします。

  2. gRPCクライアントは、設定されたgRPCサーバーとポートとのTCP/IP接続を開始します。

  3. gRPC クライアントは TLS メッセージを送信して TLS ClientHello ハンドシェイクを開始します。

  4. gRPC サーバーは、メッセージとその証明書を ServerHello 送信します。

  5. gRPCクライアントは、gRPCサーバーのIDを検証します。

  6. NETCONF セッションが確立されます。

  7. サーバーとクライアントはNETCONF <hello> メッセージを交換します。

  8. NETCONF クライアント アプリケーションは、必要に応じて運用を実行します。

アウトバウンド HTTPS を介して NETCONF セッションを確立する方法

Junos ソフトウェア イメージの一部として含まれる JET アプリケーションを使用して、NMS(ネットワーク管理システム)とサポートされている Junos デバイス間のアウトバウンド HTTPS を介して NETCONF セッションを確立できます。拡張サービスとして設定された JET アプリケーションは、NMS 上で実行されている gRPC サーバーへの接続を開始し、TLS で暗号化された gRPC セッションを介して持続的な HTTPS 接続を確立します。NETCONF セッションはこの HTTPS 接続を介して実行されます。このシナリオでは、gRPC サーバーが NETCONF クライアントであり、JET アプリケーションが gRPC クライアントと NETCONF サーバーです。

アウトバウンド HTTPS を介した NETCONF セッションを確立するには、以下のハードウェアとソフトウェアが必要です。

図 2 は、その後のタスクで参照される設定を示しています。

図 2:アウトバウンド HTTPS トポロジー NETCONF over Outbound HTTPS Topology上の NETCONF

クライアントとサーバーがアウトバウンド HTTPS を介して NETCONF セッションを確立する前に、以下のセクションで説明する要件を満たす必要があります。

gRPC サーバーの X.509 証明書を取得する

アウトバウンド HTTPS 接続は、X.509 公開キー証明書を使用して、ネットワーク管理システムで実行されている gRPC サーバーの ID を認証します。gRPC スタックは、X.509 v3 証明書形式をサポートしています。

gRPC サーバーの証明書の要件は次のとおりです。

  • 証明書は自己署名である必要があります。

  • 証明書は、共通名(CN)フィールドにgRPCサーバーのホスト名を定義するか、[SubjectAltName(SAN)IP Address]フィールドにgRPCサーバーのIPアドレスを定義する必要があります。Junos デバイスは、サーバーへの接続を確立するために同じ値を使用する必要があります。証明書が SubjectAltName IP アドレス フィールドを定義している場合、デバイスは認証時に共通名フィールドを無視します。

  • 証明書は PEM でエンコードされ、 .crt 拡張子を使用する必要があります。

  • 証明書とそのキーには、それぞれ server.crtserver.key という名前が必要です。

OpenSSL を使用して証明書を取得するには、

  1. 秘密鍵を生成し、鍵長をビット単位で指定します。
    メモ:

    秘密鍵のサイズには3072ビット以上を使用することをお勧めします。

  2. gRPC サーバーの IP アドレスに接続する場合は、openssl.cnf または同等の設定ファイルを更新して、gRPC サーバーのアドレスで拡張子を定義subjectAltName=IPします。
  3. クライアントの公開キーとそのアイデンティティに関する情報を含む証明書署名要求(CSR)を生成します。
  4. 証明書を生成します。

    サーバーキーを使用してCSRに署名して自己署名クライアント証明書を生成し、構成ファイルと拡張子を -extfile 参照する必要がある場合は オプションを含めます。

  5. 共通名(CN)フィールドと拡張(提供されている場合)が正しいことを確認します。
  6. (オプション)junos OS を実行しているデバイスの /var/db/scripts/jet ディレクトリに server.crt ファイルをコピーして、認証に証明書ファイルを使用します。
    メモ:

    鍵サイズが 4096 ビット以下で、代わりに Junos デバイスの JET アプリケーションの引数に証明書の内容を構成する場合は、 trusted_certs この手順を省略できます。

gRPC サーバーの設定

ネットワーク管理システムには、以下のソフトウェアが必要です。

  • Python 3.5 以降

Junosデバイス上のネットワーク管理システムとJETアプリケーションは、gRPCフレームワークを使用して、TLSで暗号化されたgRPCセッションを介して持続的なHTTPS接続を確立します。ネットワーク管理システムは、gRPCスタックをインストールし、指定されたポートで接続要求をリッスンするgRPCサーバーを実行する必要があります。ジュニパーネットワークスは、GitHub のジュニパーネットワークス netconf-https-outbound リポジトリに必要な proto 定義ファイルとサンプル gRPC サーバー アプリケーション ファイルを提供しています。

このセクションでは、Ubuntu 18.04 を実行しているネットワーク管理システム上で gRPC サーバーを設定します。別のオペレーティング システムを実行している場合は、お使いの OS に適したコマンドを使用します。

Ubuntu 18.04を実行しているネットワーク管理システム上にgRPCサーバーを設定するには、次の手順にしたがっています。

  1. Python 3 用にインストールpipします。
  2. パッケージをインストールしますgrpcio
  3. パッケージをインストールしますgrpcio-tools
  4. https://github.com/Juniper/netconf-https-outbound のJuniper GitHubリポジトリにアクセスし、Junosデバイスで実行されているリリースに対応するディレクトリを選択します。
  5. GitHub ディレクトリのアプリケーションと proto ファイルを、gRPC サーバーの証明書が格納されているネットワーク管理システムのディレクトリにダウンロードします。
    1. 各ファイルを選択し、[ Raw ] ボタンをクリックし、ファイルの URL をコピーします。

    2. ファイルをダウンロードするには、選択したダウンロード ツールの URL を使用します(例: wget または curl)。

  6. プロトコル バッファ コンパイラ 、 を使用して、protoc各 proto 定義ファイルをコンパイルし、Python コードを生成します。Python コードは、proto ファイルごとに 2 つの出力ファイルを生成します。

    例えば:

  7. gRPCサーバーを起動し、デフォルトのポート443と異なる場合、接続のポートを指定します。
    メモ:

    ポート443でリッスンするために、root権限を持つスクリプトを実行する必要がある場合があります。

gRPC サーバーは、指定されたポートで受信接続を無期限にリッスンします。gRPC サーバーに接続するように Junos デバイスを設定し、接続とセッションを確立した後、必要に応じて NETCONF 操作を実行できます。

NETCONFユーザーのユーザーアカウントを設定する

アウトバウンド HTTPS を介して NETCONF セッションを確立するには、Junos デバイス上でローカルにユーザー アカウントを作成する必要があります。このアカウントを使用して、そのセッションのデバイスで NETCONF 操作を実行します。JET アプリケーションは、このアカウントに設定された権限を使用して実行されます。

Junos デバイスでユーザー アカウントを作成するには、次の手順に従います。

  1. ステートメントを一意のuserユーザー名で設定し、 ステートメントをclass含めて、ユーザーが実行するすべてのアクションに必要な権限を持つログインクラスを指定します。例えば:
  2. (オプション)および full-name ステートメントをuid設定して、一意のユーザーIDとユーザーの名前を指定します。
  3. 設定をコミットして、デバイス上のユーザーアカウントをアクティブにします。
  4. クライアントがアウトバウンド HTTPS 上で NETCONF セッションを確立する必要がある各 Junos デバイスで、前述の手順を繰り返します。

アウトバウンド HTTPS クライアントを設定する

JET アプリケーションは、1 つのアウトバウンド HTTPS クライアントにのみ接続できます。クライアントの接続および認証情報を JET スクリプトのコマンドライン引数として設定します。 表 1 は、引数の概要を示しています。

表 1:nc_grpc_app.py 引数

引数

--device または -d

JET アプリケーションが接続する gRPC サーバーのホスト名または IPv4 アドレス。引数値は、共通名(CN)フィールドのホスト名、または gRPC サーバーの証明書の SubjectAltName IP アドレス フィールドの IP アドレスと一致する必要があります。

--port または -p

(オプション)JET アプリケーションが gRPC サーバーへの接続を試みるポート。デフォルト ポート 443 を使用するには、この引数を省略します。

--trusted_certs または -ts

(オプション)および 行間-----BEGIN CERTIFICATE----------END CERTIFICATE-----の gRPC サーバーの証明書コンテンツで、改行は省略します。

証明書をデバイス上の /var/db/scripts/jet ディレクトリにコピーする場合は、この引数を省略できます。鍵サイズが 4096 ビットを超える場合は、証明書をデバイスにコピーする必要があります。

開始する前に、以下を含むスクリプト引数の値が必要になります。

  • gRPC サーバーが接続をリッスンしているポート。

  • SubjectAltName IP アドレス フィールドの内容、またはそのようなフィールドがない場合は、gRPC サーバーの証明書の共通名(CN)フィールドの内容。

  • および の間-----BEGIN CERTIFICATE----------END CERTIFICATE-----のgRPCサーバー証明書の内容は、改行は省略します。この情報は、証明書の内容を Junos OS を実行するデバイスにコピーする代わりに、証明書の内容をスクリプトの引数として設定する場合にのみ必要です。

アウトバウンド HTTPS クライアントを設定するには:

  1. nc_grpc_app.py 拡張サービス アプリケーションの階層に移動します。
  2. 起動時にアプリケーションに渡される引数を設定します。
  3. 設定をコミットします。

Junosデバイス上のアウトバウンドHTTPS拡張サービスを設定する

アウトバウンド HTTPS で NETCONF セッションをサポートする Junos リリースには、JET アプリケーションとサポート ファイルがソフトウェア イメージに含まれています。 表 2 は、デバイスの /var/db/scripts/jet ディレクトリにあるファイルの概要を示しています。

表 2:アウトバウンド HTTPS を介したセッション用 JET ファイル

ファイル

説明

nc_grpc_app.py

gRPC フレームワークを使用して、ネットワーク管理システム上で実行されている gRPC サーバーとの永続的 HTTPS 接続を確立する JET アプリケーション。

nc_grpc_pb2.py

nc_grpc_pb2_grpc.py

必要なライブラリ

アウトバウンド HTTPS を介したセッションに Junos デバイスを設定するには、次の手順に従います。

  1. JET アプリケーションと関連ファイルがデバイスに存在することを確認します。
  2. 設定モードに入ります。
  3. デバイスが符号なしPython 3アプリケーションを実行できるようにします。
  4. 拡張機能サービス アプリケーションの階層に移動します。
  5. デーモン化プロセスとしてバックグラウンドで実行するようにアプリケーションを構成します。
  6. 通常の出口でアプリケーションが復活するように設定します。
  7. アプリケーションが実行し、NETCONF 操作が実行される権限の下で使用名を設定します。
  8. 設定をコミットします。

    設定をコミットすると、 オプションにより daemonize 、アプリケーションが自動的に起動します。

  9. アプリケーションが実行されていることを確認します。

アプリケーションが正常に開始されると、 outbound_https.log ファイルにメッセージが記録されます。

メモ:

構成のコミット後にアプリケーションが自動的に起動しない場合は、このアプリケーションに関連するログ メッセージを確認して問題のトラブルシューティングを行います。Junos OS で、 コマンドを show log jet.log 発行します。

NETCONF セッションを開始する

ネットワーク管理システム上で実行されている gRPC サーバーは NETCONF クライアントとして機能し、Junos デバイス上の JET アプリケーションは gRPC クライアントおよび NETCONF サーバーとして機能します。gRPC サーバーと JET アプリケーションを起動すると、JET アプリケーションは指定されたポート上の gRPC サーバーへの接続を試みます。接続が成功すると、gRPCクライアントはgRPCサーバーを認証します。サーバー認証に成功すると、NETCONF セッションが自動的に開始されます。

アウトバウンド HTTPS を介して NETCONF セッションを確立するには、

  1. ネットワーク管理システムで、gPRC サーバーをまだ起動していない場合は、サーバーを起動し、接続のポートを指定します。

    NETCONF セッションは自動的に開始します。

  2. 出力を確認して、セッションが正常に確立されていることを確認します。

    NETCONF セッションは、ここに示すように NETCONF 機能を表示する必要があります。

  3. 必要に応じてNETCONF操作を実行します。
  4. セッションが終了したら、 を入力しますCtrl+C
  5. アウトバウンド HTTPS 接続の使用が完了したら、Junos デバイスで関連する階層を削除または非アクティブ化し、変更をコミットすることで、Junos デバイス上の拡張機能サービス アプリケーションを停止できます。