拡張アウトバウンド HTTPS 上の NETCONF およびシェル セッション
概要 クライアント アプリケーションは、サポートされる Junos デバイスで拡張アウトバウンド HTTPS を使用して、NETCONF(Network Configuration Protocol)セッションとシェル セッションを確立できます。
拡張アウトバウンド HTTPS 上の NETCONF とシェル セッションについて
- アウトバウンド HTTPS を介した NETCONF およびシェル セッションのメリット
- アウトバウンド HTTPS を介した NETCONF およびシェル セッションの概要
- 拡張アウトバウンド HTTPS 上のセッションの接続ワークフロー
アウトバウンド 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 設定を最も簡単な形式で示しています。
このシナリオでは、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またはシェルセッションを確立します。
-
gRPC サーバーは、指定されたポート、またはポートが指定されていない場合、デフォルト のポート 443 で受信接続をリッスンします。
-
gRPCクライアントは、設定されたgRPCサーバーとポートとのTCP/IP接続を開始します。1つ以上のバックアップgRPCサーバーでアウトバウンドHTTPSクライアントを設定すると、gRPCクライアントは接続を確立するまでリスト内の各サーバーに接続しようとします。
-
gRPC クライアントは TLS メッセージを送信して TLS
ClientHello
ハンドシェイクを開始します。 -
gRPC サーバーは、メッセージとその証明書を
ServerHello
送信します。 -
gRPCクライアントは、gRPCサーバーのIDを検証します。
-
gRPC クライアントは、そのアウトバウンド HTTPS クライアント用に構成されたデバイス ID と共有シークレットを gRPC サーバーに送信します。
-
アウトバウンド HTTPS クライアントは NETCONF またはシェル セッションを要求し、gRPC サーバーはデバイス ID と共有シークレットを使用して Junos デバイスを認証します。認証に成功すると、セッションが確立されます。
-
NETCONF セッションが要求された場合、サーバーとクライアントは NETCONF
<hello>
メッセージを交換します。 -
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によって異なります。
クライアントとサーバーがアウトバウンド HTTPS を介して NETCONF またはシェル セッションを確立する前に、以下のセクションで説明する要件を満たす必要があります。
- gRPC サーバーの X.509 証明書を取得する
- gRPC サーバーの設定
- NETCONF またはシェル ユーザーのユーザー アカウントを設定する
- アウトバウンド HTTPS クライアントを設定する
- Junosデバイス上のアウトバウンド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.crt と server.key という名前が必要です。
OpenSSL を使用して証明書を取得するには、
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サーバーを設定するには、次の手順にしたがっています。
gRPC サーバーは、指定されたポートで受信接続を無期限にリッスンします。gRPC サーバーに接続するように Junos デバイスを設定し、接続とセッションを確立した後、必要に応じて NETCONF 操作またはシェル コマンドを実行できます。
NETCONF またはシェル ユーザーのユーザー アカウントを設定する
アウトバウンド HTTPS を介して NETCONF またはシェル セッションを確立するには、Junos デバイス上でローカルにユーザー アカウントを作成する必要があります。このアカウントを使用して、そのセッションのデバイスで NETCONF またはシェル操作を実行します。JET アプリケーションは、このアカウントに設定された権限を使用して実行されます。
Junos デバイスでユーザー アカウントを作成するには、次の手順に従います。
アウトバウンド HTTPS クライアントを設定する
拡張アウトバウンド HTTPS では、階層レベルで複数のアウトバウンド HTTPS クライアントを [edit system services outbound-https]
設定し、各クライアントに対して複数のバックアップ gRPC サーバーを設定できます。JET アプリケーションは、クライアントのサーバー リスト内の 1 つの gRPC サーバーにのみ、いつでも接続します。
デバイスを設定する前に、以下の情報が必要です。
-
gRPC サーバーが接続をリッスンしているポート。
-
SubjectAltName IP アドレス フィールドの内容、またはそのようなフィールドがない場合は、gRPC サーバーの証明書の共通名(CN)フィールドの内容。
-
gRPC サーバー証明書の内容(自己署名の場合)、または CA 証明書の内容(サーバー証明書が証明書チェーンを使用して認証されている場合)
アウトバウンド HTTPS クライアントを設定するには::
アウトバウンド HTTPS 拡張サービスが既に実行中で、アウトバウンド HTTPS クライアントを追加、削除、または変更して設定をコミットする場合、変更を有効にするためにサービスを再起動する必要はありません。それらは自動的にピックアップされます。
Junosデバイス上のアウトバウンドHTTPS拡張サービスを設定する
アウトバウンド HTTPS で NETCONF およびシェル セッションをサポートする Junos リリースには、JET アプリケーションとサポート ファイルがソフトウェア イメージに含まれています。 表 1 は、デバイスの /var/db/scripts/jet ディレクトリにあるファイルの概要を示しています。
ファイル |
説明 |
---|---|
nc_grpc_app.pyc |
gRPC フレームワークを使用して、ネットワーク管理システム上で実行されている gRPC サーバーとの永続的 HTTPS 接続を確立する JET アプリケーション。 |
nc_grpc_app_lib.pyc |
必要なライブラリ |
アウトバウンド HTTPS を介したセッションに Junos デバイスを設定するには、次の手順に従います。
アプリケーションが正常に開始されると、 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 またはシェル セッションを確立するには、