このページの内容
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-トンネルプロセスが実行され、gRPCトンネル関連の設定がすべて実行されます。TCPクライアント側に、トンネルサーバーが追加されています。
gRPC トンネルセッションを設定するには、[edit system services]階層にgrpc-tunnel設定ステートメントを含める必要があります。
gRPCトンネルセキュリティ
gRPCトンネルは、デバイスが設定に基づいて接続を開始するダイヤルアウトモデルです。gRPCトンネルは、TLS証明書を使用するセキュアなgRPCチャネル上にあります。
例:gRPC トンネルの設定
概要
このセクションでは、この例のターゲットを設定するために必要な手順について説明します。ターゲットは、gRPCトンネル設定を含むJunos OSデバイスです。
要件
この例では、以下のソフトウェアおよびハードウェアコンポーネントを使用しています。
-
ルーティングおよびスイッチングデバイス用の 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-トンネルで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
-
パターンで複数のオプションが選択されている場合に、 区切り文字 ステートメントを使用します。デフォルトでは、 | (パイプ記号)が使用されます。
[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 |;
}
}