安全なテレメトリ収集のためのgRPCダイヤルアウトの使用
gRPC ダイヤルアウトについて
Junos OSリリース22.4R1以降、JTIは、ACXシリーズルーター、MXシリーズルーター、PTXシリーズルーター、QFXシリーズスイッチでのリモートgRPCダイヤルアウトサポートをサポートしています。gRPC ダイヤルアウトでは、ターゲット デバイス(サーバー)がコレクター(クライアント)との gRPC セッションを開始します。セッションが確立されると、ターゲットはセンサー グループ サブスクリプションで指定されたテレメトリ データをコレクターにストリーミングします。これは、コレクターがターゲット デバイスへの接続を開始する gRPC ネットワーク管理インターフェイス (gNMI) ダイヤルイン方式とは対照的です。
gRPC ダイヤルアウトにより、テレメトリ統計のストリーミングが簡素化されます。統計情報をストリーミングしてコレクターIPアドレスにエクスポートするようにターゲットデバイスを構成すると、コレクター(クライアント)にかかるアクセスの負担がなくなります。( 図 1 を参照)。

gRPC ダイヤルアウトには、gRPC ダイヤルインと比較していくつかの利点があります。
トポロジー外の脅威に対するターゲットデバイスの露出を低減します。
ターゲット・デバイスへのアクセスを簡略化します。gRPC ダイヤルイン方式では、コレクターが一連の複雑なファイアウォール構成を克服して、ターゲット デバイスにアクセスする必要があります。gRPC ダイヤルアウトは対象外です。
コレクターはステートレスにすることができます。セッションを開始する必要はなく、収集したデータをリッスンし、サブスクライブし、保存するだけです。
相互暗号化をサポートし、セキュリティを強化します。
統計のエクスポートを有効にするには、[edit services analytics
] 階層レベルで export-profile
ステートメントと sensor
ステートメントを含めます。エクスポートプロファイルには、レポートレート、トランスポートサービス(gRPCなど)、および形式(gbp-gnmiなど)を含める必要があります。センサー構成には、コレクターの名前 (サーバーの名前)、エクスポート プロファイルの名前、およびリソース パスを含める必要があります。リソース パスの例は、/interfaces/interface[name='fxp0'] です。
従来の gRPC ダイヤルアウト接続の IP 送信元アドレスを構成する
Junos OS Evolvedリリース24.2R1以降、JTIは、ACXシリーズルーター、PTXシリーズルーター、QFXシリーズスイッチでのレガシーgRPCサービスダイヤルアウト接続の送信元IPアドレスの設定をサポートしています。レガシー gRPC ダイヤルアウトをサポートする以前のリリースでは、発信インターフェイスの IP アドレスが送信元アドレスとして使用されますが、送信元 IP アドレスを設定するオプションはありません。この機能は FLEX 展開をサポートし、ルーターの指定された IP アドレスまたはインターフェイス アドレス(loopback0 アドレスなど)からダイヤルアウトを送信する機能を提供します。
ローカル アドレスを設定しない場合は、デフォルトのローカル アドレスが使用されます。
ローカルアドレスを設定するには:
関連項目
従来の gRPC ダイヤルアウト接続用のルーティング インスタンスを構成する
Junos OS Evolved Release 24.2R1以降、JTIは、ACXシリーズルーター、PTXシリーズルーター、QFXシリーズスイッチ上で、レガシーgRPCサービスダイヤルアウト接続用のルーティングインスタンスの設定をサポートしています。
ルーティングインスタンスを設定しない場合は、デフォルトのルーティングインスタンスが使用されます。
ルーティングインスタンスを設定するには:
関連項目
gRPC トンネルの概要
gRPC トンネルは、デフォルトのルーティング インスタンスまたは構成済みのルーティング インスタンスを介して、ターゲットから TCP クライアントにセッションをダイヤルアウトするクライアント/サーバー プロトコルとして機能します。ルーティング インスタンスの設定を選択しない場合、gRPC トンネルはデフォルトのルーティング インスタンスを使用します。
各 gRPC トンネル セッションの送信元アドレスを構成して、トンネル サーバーへの接続をダイヤルアウトできます。送信元アドレスを設定しない場合、カーネルはトンネル サーバーに到達できる送信元アドレスを選択します。
gRPC トンネルの詳細については、「 https://github.com/openconfig/grpctunnel」を参照してください。
gRPC トンネルには、次の 3 つの主要なエンティティがあります。
-
ターゲット—ネットワーク デバイスを表します。ターゲットは gRPC クライアントです。
-
トンネル サーバー — サブスクリプションとターゲット登録を管理するオフボックス アプリケーションであるソフトウェア エンティティ。トンネル サーバーは gRPC サーバーです。
-
トンネルクライアント — クライアントタスクを実行するソフトウェアエンティティ。トンネル クライアントは、トンネル サーバー内で自己完結型にすることができます。トンネル クライアントは gRPC クライアントでもあります。
gRPC トンネル セッションを使用するメリット:
-
サーバー側から接続が確立されるため、一連の複雑なファイアウォール構成を克服します。
-
gNMI-gNOI、SSH、NETCONF-SSHなどのさまざまなTCPサーバーアプリケーションに、運用要件なしでアクセスできます。
gRPC トンネル アーキテクチャ
gRPC トンネルは、TCP ベースのアプリケーションが gRPC メッセージ内で通信するための汎用インフラストラクチャです。
通常、TCP クライアントは TCP サーバーまたはターゲットへの接続を開始します。Junos デバイスは、gNMI-gNOI、SSH、NETCONF-SSH などの TCP サーバー アプリケーションを実行するターゲットとして機能します。クライアントがサーバーに到達できない場合、一般的な理由は次のとおりです。
-
サーバーは、ファイアウォールがインバウンド接続を禁止する複雑なファイアウォール構成に陥ります。
-
サーバーは、ネットワーク アドレス変換(NAT)を実装するルーターで実行されます。
-
サーバーは他の運用要件に遭遇し、外部接続を防ぎます。
TCP クライアントがターゲットに到達できない場合は、gRPC トンネル セッションを構成して、TCP クライアントとターゲット間の接続を確立できます。gRPC トンネル セッションは、ターゲットが TCP クライアントにダイヤルアウトする逆方向の接続を確立します。
gRPC トンネル セッションを使用するには、トンネル クライアントがターゲット側に追加され、そこで grpc-tunnel プロセスが実行され、すべての gRPC トンネル関連の構成が実行されます。TCP クライアント側に、トンネル サーバーが追加されます。
gRPC トンネル セッションを構成するには、[edit system services
] 階層に grpc-tunnel
構成ステートメントを含める必要があります。
gRPC トンネル セキュリティ
gRPC トンネルは、デバイスが構成に基づいて接続を開始するダイヤルアウト モデルです。gRPC トンネルは、TLS 証明書を使用するセキュリティで保護された gRPC チャネル上にあります。
関連項目
例:gRPC トンネルの設定
概要
このセクションでは、この例のターゲットを構成するために必要な手順について説明します。ターゲットは、gRPCトンネルが設定されているJunosデバイスであるため、ターゲットに焦点が当てられます。
必要条件
この例では、以下のソフトウェアおよびハードウェアコンポーネントを使用しています:
-
ルーティングおよびスイッチングデバイス向けのJunos OSまたはJunos Evolvedリリース22.4以降
-
1台のホストデバイスをトンネルクライアントとして使用
-
1台のホストデバイスをトンネルサーバーとして使用
位相幾何学
図 1 に、この例で使用するトポロジを示します。

ターゲット デバイスの Junos 設定に基づいて、トンネル サーバーへの grpc トンネルをダイヤルアウトします。ターゲット デバイスは、レジスタ ストリーム RPC を介してトンネル サーバーに自身を登録します。
クライアントが特定のターゲットへのTCPセッションを要求すると、トンネルサーバーは仲介者として機能し、トンネルサーバー上の上記の登録済みターゲットセッションに接続します。
ターゲットが要求されたターゲットの種類をサポートしている場合、デバイスはトンネル ストリーム RPC と呼ばれる新しいトンネルをダイヤルアウトします。これにより、トンネル サーバーを介してクライアントとターゲットの間に gRPC トンネルが確立されます。これで、トンネル クライアントは、ターゲット上の目的の TCP アプリケーションにアクセスできるようになります。
トンネル サーバーとネットワーク デバイスの間に存在できるレジスタ ストリームは 1 つだけですが、同じペアに対して複数のトンネル ストリームが存在することができます。
gRPC トンネルを構成する
CLIクイック構成
この例を素早く設定するには、以下のコマンドをコピーしてテキスト・ファイルに貼り付け、改行を削除し、ネットワーク構成に合わせて必要な内容を変更した後、[edit]階層レベルのCLIにコマンドをコピー&ペーストしてください。
set system services grpc-tunnel servers server server1 address 10.205.0.1 set system services grpc-tunnel servers server server1 port 50301 set system services grpc-tunnel servers server server1 credentials tls certificate-id client-cert1 set system services grpc-tunnel servers server server1 targets ssh
手順
ターゲット デバイスで gRPC トンネルを構成するには、次の手順に従います。
-
gRPCトンネル下のサーバーを設定します。
-
トンネル サーバーの IPv4 または IPv6 アドレスまたはホスト名を設定します。
[edit system services] user@host# set grpc-tunnel servers server server1 address 10.205.0.1
-
トンネル サーバーがリッスンするポート番号を構成します。
[edit system services] user@host# set grpc-tunnel servers server server1 port 50301
-
tls ステートメントを使用して資格情報を構成します。
[edit system services] user@host# set grpc-tunnel servers server server1 credentials tls certificate-id client-cert1
-
アクセスするターゲット アプリケーションを指定します。使用可能なオプションは、 ssh、 netconf-ssh 、および gnmi-gnoiです。
[edit system services] user@host# set grpc-tunnel servers server server1 targets ssh
-
-
(オプション) 再試行間隔 (秒単位) を設定します。トンネルサーバーに到達できない場合、ターゲットデバイスは再試行間隔の後に接続を再試行します。
[edit system services] user@host# set grpc-tunnel servers retry-interval 30
-
(オプション)
ルーティングインスタンスを設定します。ルーティング インスタンスを設定しない場合、gRPC トンネルは既定のルーティング インスタンスを使用します。[edit system services] user@host# set grpc-tunnel servers server ts1 routing-instance routing-instance
-
(オプション)
送信元アドレスを設定します。送信元アドレスを設定しない場合、カーネルはトンネル サーバーに到達できる送信元アドレスを選択します。[edit system services] user@host# set grpc-tunnel servers server ts1 source-address 69.70.31.677
-
(オプション)grpc-tunnelの下のtarget-string-optionを設定します。
-
pattern ステートメントを使用して、サポートされているオプションの順序付きリストを作成します。
[edit system services] user@host# set grpc-tunnel target-string-option pattern hostname custom
-
custom-string ステートメントを使用して、ステートメント・パターンにオプションの 1 つとして custom が含まれている場合に送信されるカスタム・ストリングを定義します。
[edit system services] user@host# set grpc-tunnel target-string-option custom-string device1
-
delimiter ステートメントは、パターン内で複数のオプションが選択されている場合に使用します。デフォルトでは、| (パイプ記号) が使用されます。
[edit system services] user@host# set grpc-tunnel target-string-option delimiter |
-
最大 10 台のトンネル サーバーを設定できます。
業績
ターゲット・デバイス上の構成の結果を表示します。出力には、この例で追加された機能設定のみが反映されます。
user@host> show configuration system services
grpc-tunnel { servers { retry-interval 30; server server1 { address 10.205.0.01; port 50301; credentials { tls { certificate-id client-cert1; } } targets [ ssh ]; routing-instance routing-instance; source-address 69.70.31.677; } server server2 { address 10.205.0.02; port 50302; credentials { tls { ca-profiles [ serverRootCA1 serverRootCA2 ]; } } targets [ gnmi-gnoi netconf-ssh ]; routing-instance routing-instance; source-address 69.70.31.677; } } target-string-option { pattern [ hostname vendor model version custom ]; custom-string device1; delimiter |; } }
変更履歴テーブル
機能のサポートは、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がプラットフォームでサポートされているかどうかを判断します。