Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

拡張アウトバウンド HTTPS 上の NETCONF およびシェル セッション

概要 クライアント アプリケーションは、サポートされる Junos デバイスで拡張アウトバウンド HTTPS を使用して、NETCONF(Network Configuration Protocol)セッションとシェル セッションを確立できます。

拡張アウトバウンド HTTPS 上の NETCONF とシェル セッションについて

アウトバウンド HTTPS を介した NETCONF およびシェル セッションのメリット

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

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

アウトバウンド HTTPS を介した NETCONF およびシェル セッションの概要

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

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

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

このシナリオでは、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 クライアントへの接続

  • アウトバウンド HTTPS クライアントごとに複数のバックアップ gRPC サーバーを構成する

  • 特定のクライアントとの同時に複数の NETCONF およびシェル セッションを確立する

  • 自己署名またはCA署名されたX.509デジタル証明書を使用したアウトバウンドHTTPSクライアントの認証

  • 共有シークレットを使用した Junos デバイスの認証

拡張アウトバウンド HTTPS 上のセッションの接続ワークフロー

アウトバウンド HTTPS を介した NETCONF またはシェル セッションでは、ネットワーク管理システム上で実行されている gRPC サーバーが NETCONF/シェル クライアントとして機能し、Junos デバイス上の JET アプリケーションは gRPC クライアントと NETCONF/シェル サーバーです。複数のアウトバウンド HTTPS クライアントを設定し、各クライアントに 1 つ以上のバックアップ gRPC サーバーを設定できます。JET アプリケーションは、クライアントのサーバー リスト内の 1 つの gRPC サーバーにのみ、いつでも接続します。

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

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

  2. gRPCクライアントは、設定されたgRPCサーバーとポートとのTCP/IP接続を開始します。1つ以上のバックアップgRPCサーバーでアウトバウンドHTTPSクライアントを設定すると、gRPCクライアントは接続を確立するまでリスト内の各サーバーに接続しようとします。

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

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

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

  6. gRPC クライアントは、そのアウトバウンド HTTPS クライアント用に構成されたデバイス ID と共有シークレットを gRPC サーバーに送信します。

  7. アウトバウンド HTTPS クライアントは NETCONF またはシェル セッションを要求し、gRPC サーバーはデバイス ID と共有シークレットを使用して Junos デバイスを認証します。認証に成功すると、セッションが確立されます。

  8. NETCONF セッションが要求された場合、サーバーとクライアントは NETCONF <hello> メッセージを交換します。

  9. NETCONF またはシェル クライアント アプリケーションは、必要に応じて操作を実行します。

gRPC クライアントは同じ gRPC サーバーで別の TCP/IP 接続を開始し、gRPC クライアントとサーバーはプロセスを繰り返します。これにより、アウトバウンド HTTPS クライアントはネットワーク デバイスとの複数の NETCONF およびシェル セッションを確立できます。

拡張アウトバウンド HTTPS 上で NETCONF およびシェル セッションを確立する方法

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

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

  • Python 3.5 以降を実行するネットワーク管理システム

  • アップグレードされた FreeBSD リリース 20.3 以降で Junos OS を実行しているJunos OS Evolved、または JET アプリケーションの実行もサポートするデバイス

    メモ:

    サポートされているデバイスについては、 機能エクスプローラーを参照してください。

図 2 は、その後のタスクで参照される設定を示しています。Junosデバイスの管理インターフェイス名は、プラットフォームとOSによって異なります。

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

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

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

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

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

  • この証明書は、自己署名するか、認証機関(CA)によって署名できます。

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

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

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

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

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

    秘密鍵のサイズには3072ビット以上を使用することをお勧めします。キー長は 4096 ビットを超えてはなりません。

  2. gRPC サーバーの IP アドレスに接続する場合は、openssl.cnf または同等の設定ファイルを更新して、gRPC サーバーのアドレスで拡張子を定義subjectAltName=IPします。
  3. エンティティの公開鍵とアイデンティティに関する情報を含む証明書署名要求(CSR)を生成します。
  4. 以下のいずれかを実行して証明書を生成します
    • CSR を認証機関に送信して X.509 証明書を要求し、追加の拡張を含む構成ファイルを提供します。

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

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

  5. 共通名(CN)フィールドと拡張(提供されている場合)が正しいことを確認します。

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
    メモ:

    または grpcio パッケージのインストールエラーが発生したgrpcio場合は、最新バージョンをインストールしてみてください。

  4. https://github.com/Juniper/netconf-https-outbound の Juniper GitHub リポジトリにアクセスし、Junos デバイスで実行されているリリースに対応するディレクトリを選択します。

    リリース

    ディレクトリ

    Junos OS リリース 20.3R1 以降

    20.3

    Junos OS Evolved リリース 22.4R1 以降

    junos-evolved/22.4

  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 クライアントを設定する

拡張アウトバウンド HTTPS では、階層レベルで複数のアウトバウンド HTTPS クライアントを [edit system services outbound-https] 設定し、各クライアントに対して複数のバックアップ gRPC サーバーを設定できます。JET アプリケーションは、クライアントのサーバー リスト内の 1 つの gRPC サーバーにのみ、いつでも接続します。

デバイスを設定する前に、以下の情報が必要です。

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

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

  • gRPC サーバー証明書の内容(自己署名の場合)、または CA 証明書の内容(サーバー証明書が証明書チェーンを使用して認証されている場合)

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

  1. アウトバウンド HTTPS クライアント階層に移動し、アウトバウンド HTTPS クライアントを一意に識別する識別子を定義します。
  2. gRPCサーバーがセッション確立中にJunosデバイスを識別して認証するために使用するユーザー定義の文字列であるデバイス識別子を定義します。
  3. gRPCサーバーがセッション確立中にJunosデバイスの認証に使用するユーザー定義文字列である共有シークレット文字列を定義します。

    デバイスは、共有秘密文字列を暗号化された値として構成データベースに格納します。

  4. (オプション)切断されたアウトバウンド HTTPS 接続を または として再確立するために使用する方法をsticky定義しますin-order
  5. (オプション)gRPC クライアントがアウトバウンド HTTPS クライアントのサーバーリストへの接続を試みる間に待機する時間を秒単位で定義します。
  6. 1つ以上のgRPCサーバーのホスト名またはIPv4アドレスと、サーバーがアウトバウンドHTTPS接続要求をリッスンするポートを設定します。

    ホスト名または IP アドレスは、gRPC サーバーの証明書の共通名(CN)フィールドまたは SubjectAltName IP Address フィールドの値と一致する必要があります。

  7. 各 gRPC サーバーについて、サーバーの認証にtrusted_cert必要な証明書情報を使用して ステートメントを設定します。
    • サーバーの証明書が自己署名である場合は、gRPC サーバーの証明書 server.crt の内容を構成し、改行は省略します。

    • サーバーの証明書が証明書チェーンを使用して認証されている場合は、中間 CA 証明書とルート CA 証明書をその順序で連結し、すべての改行を削除して、結果の 1 つの文字列を構成します。

    メモ:

    ステートメントの値 trusted_cert を簡単に生成するには、次のようなコマンドを使用することで、必要な順序で適切な証明書を連結し、改行を削除できます。

  8. Junos デバイスを管理するアウトバウンド HTTPS クライアントごとに、前述の手順を繰り返します。
  9. 設定をコミットします。
メモ:

アウトバウンド HTTPS 拡張サービスが既に実行中で、アウトバウンド HTTPS クライアントを追加、削除、または変更して設定をコミットする場合、変更を有効にするためにサービスを再起動する必要はありません。それらは自動的にピックアップされます。

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

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

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

ファイル

説明

nc_grpc_app.pyc

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

nc_grpc_app_lib.pyc

必要なライブラリ

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

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

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

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

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

メモ:

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

NETCONF またはシェル セッションを開始する

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

開始する前に、以下の情報が必要です。

  • アウトバウンド HTTPS クライアント用に構成されたデバイス識別子と共有秘密文字列

拡張アウトバウンド HTTPS を介して NETCONF またはシェル セッションを確立するには、

  1. ネットワーク管理システムで、gPRC サーバーをまだ起動していない場合は、サーバーを起動し、接続のポートを指定します。
  2. Junos デバイスとの 1 つ以上のセッションを確立するには、request_session.py スクリプトを実行します。セッションタイプに加え、Junosデバイス上のそのアウトバウンドHTTPSクライアントに対して設定したデバイスIDと共有シークレットを指定します。例えば:
    • デフォルトであるcshセッションを要求するには、セッションタイプを指定する必要はありません。

    • NETCONF セッションを要求するには、 オプションを -s netconf 含めます。

    サーバーが Junos デバイスを正常に認証すると、要求されたセッションが開始されます。

  3. 出力を確認して、セッションが確立されていることを確認します。
    • シェル セッションは、例えば、出力を csh session is started 表示する必要があります。

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

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