

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# セキュアトンネル内でのデータストリームの多重化と同時 TCP 接続の使用
<a name="multiplexing"></a>

セキュアトンネリング多重化機能を使用すると、トンネルごとに複数のデータストリーミングを使用できます。多重化により、複数のデータストリームを使用してデバイスをトラブルシューティングできます。また、複数のローカルプロキシを構築、デプロイ、開始したり、同じデバイスに対して複数のトンネルを開いたりする必要がなくなるため、運用負荷を緩和できます。例えば、複数の HTTP および SSH ストリーミングを送信する必要があるウェブブラウザの場合、多重化を使用できます。

データストリームごとに、 AWS IoT セキュアトンネリングは同時 TCP 接続をサポートします。同時接続を使用すると、クライアントから複数のリクエストがあった場合にタイムアウトする可能性が低くなります。例えば、送信先デバイスに対してローカルなウェブサーバーにリモートアクセスするときのロード時間を短縮できます。

次のセクションでは、多重化と同時 TCP 接続の使用、およびそれらのさまざまな使用例について詳しく説明します。

**Topics**
+ [セキュアトンネル内の複数のデータストリームを多重化する](multiplexing-multiple-streams.md)
+ [セキュアトンネルでの同時 TCP 接続の使用](multiplexing-simultaneous-tcp.md)

# セキュアトンネル内の複数のデータストリームを多重化する
<a name="multiplexing-multiple-streams"></a>

多重化機能は、複数の接続またはポートを使用するデバイスに使用できます。多重化は、問題のトラブルシューティングのためにリモートデバイスへの複数の接続が必要な場合にも使用できます。例えば、複数の HTTP および SSH データストリーミングを送信する必要があるウェブブラウザの場合、多重化を使用できます。両方のストリームからのアプリケーションデータが、多重化されたトンネルを介して同時にデバイスに送信されます。

## ユースケースの例
<a name="multiplexing-use-case"></a>

例えば、デバイス上のウェブアプリケーションに接続して、一部のネットワーキングパラメータを変更すると同時に、ターミナルからシェルコマンドを発行して、デバイスが新しいネットワーキングパラメータで正常に動作していることを確認する必要がある場合があります。このシナリオでは、ウェブアプリケーションとターミナルに同時にアクセスするために、HTTP と SSH の両方を介してデバイスに接続し、2 つの並列データストリームを転送する必要がある場合があります。多重化機能を使用すると、これらの 2 つの独立したストリーミングを同時に同じトンネルを介して転送できます。

![\[さまざまなプロトコルでデータをストリーミングするための送信元デバイス、プロキシサーバー、送信先デバイスを備えた IoT クラウドアーキテクチャを示す図。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/tunnel-multiplexing.png)


## 多重化トンネルの設定方法
<a name="multiplexing-tutorial"></a>

次の手順では、複数のポートへの接続を必要とするアプリケーションを使用してデバイスをトラブルシューティングするための多重化トンネルを設定する方法について説明します。HTTP ストリーミングと SSH ストリーミングの 2 つの多重化されたストリーミングを持つ 1 つのトンネルを設定します。

1. 

**オプションの設定ファイル**

   設定ファイルを使用して送信元および送信先デバイスを設定できます。ポートマッピングが頻繁に変更される可能性がある場合は、設定ファイルを使用します。CLI を使用して明示的にポートマッピングを指定する場合、または指定されたリスニングポートでローカルプロキシを開始する必要がない場合は、このステップを省略できます。設定ファイルの使用方法の詳細については、GitHub の「[ Options set via --config](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via---config)」(–-config を介して設定されるオプション) を参照してください。

   1. 送信元デバイスでローカルプロキシを実行するフォルダに、`Config` という設定フォルダを作成します。このフォルダ内で、次の内容を含む `SSHSource.ini` というファイルを作成します。

      ```
      HTTP1 = 5555
      SSH1 = 3333
      ```

   1. 送信先デバイスのローカルプロキシを実行するフォルダに、`Config` という設定フォルダを作成します。このフォルダ内で、次の内容を含む `SSHDestination.ini` というファイルを作成します。

      ```
      HTTP1 = 80
      SSH1 = 22
      ```

1. 

**トンネルを開く**

   `OpenTunnel` API オペレーションまたは `open-tunnel` CLI コマンドを使用してトンネルを開きます。`SSH1` および をサービス`HTTP1`として指定し、リモートデバイスに対応する AWS IoT モノの名前を指定して、送信先を設定します。SSH アプリケーションと HTTP アプリケーションはこのリモートデバイスで実行されています。 AWS IoT レジストリに IoT モノがすでに作成されている必要があります。詳細については、「[レジストリを使用したモノの管理](thing-registry.md)」を参照してください。

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP1,SSH1
   ```

   このコマンドを実行すると、ローカルプロキシの実行に使用する送信元と送信先のアクセストークンが生成されます。

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**ローカルプロキシを設定、起動します**

   ローカルプロキシを実行する前に、 AWS IoT Device Client を設定するか、[GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) からローカルプロキシソースコードをダウンロードして、任意のプラットフォーム用に構築します。その後、送信先と送信元のローカルプロキシを起動して、セキュアトンネルに接続できます。ローカルプロキシの設定と使用の詳細については、「[ローカルプロキシの使用方法](how-use-local-proxy.md)」を参照してください。
**注記**  
送信元デバイスでは、設定ファイルを使用しないか、CLI を使用してポートマッピングを指定しない場合でも、同じコマンドを使用してローカルプロキシを実行できます。ソースモードのローカルプロキシは、自動的に使用可能なポートを選択して、マッピングを使用します。

------
#### [ Start local proxy using configuration files ]

   次のコマンドを実行し、設定ファイルを使用して送信元モードと送信先モードでローカルプロキシを実行します。

   ```
   // ----------------- Start the destination local proxy -----------------------
   ./localproxy -r us-east-1 -m dst -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------
   // You also run the same command below if you want the local proxy to
   // choose the mappings for you instead of using configuration files.
   ./localproxy -r us-east-1 -m src -t source_client_access_token
   ```

------
#### [ Start local proxy using CLI port mapping ]

   次のコマンドを実行し、CLI を使用してポートマッピングを明示的に指定することにより、送信元モードと送信先モードでローカルプロキシを実行します。

   ```
   // ----------------- Start the destination local proxy -----------------------------------
   ./localproxy -r us-east-1 -d HTTP1=80,SSH1=22 -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------------------
   ./localproxy -r us-east-1 -s HTTP1=5555,SSH1=33 -t source_client_access_token
   ```

------

SSH および HTTP 接続からのアプリケーションデータを、多重化されたトンネルを介して同時に転送できるようになりました。以下のマップからわかるように、サービス識別子は、送信元デバイスと送信先デバイス間のポートマッピングを変換する読み取り可能な形式として機能します。この設定では、安全なトンネリングは、送信元デバイスのポート *5555* からのすべての着信 HTTP トラフィックを送信先デバイスのポート *80* に転送し、ポート *3333* からのすべての着信 SSH トラフィックを送信先デバイスのポート *22* に転送します。

![\[処理後に、送信元および送信先のローカルプロキシから翻訳されたポートマッピングにサービス識別子をマッピングするための翻訳プロセス。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/multiplexing-post-mapping-translation.png)


# セキュアトンネルでの同時 TCP 接続の使用
<a name="multiplexing-simultaneous-tcp"></a>

AWS IoT セキュアトンネリングは、データストリームごとに複数の TCP 接続を同時にサポートします。この機能は、リモートデバイスへの同時接続が必要な場合に使用できます。同時 TCP 接続を使用すると、クライアントから複数のリクエストがあった場合にタイムアウトする可能性が低くなります。例えば、複数のコンポーネントが実行されているウェブサーバーにアクセスする場合、同時 TCP 接続を行うと、サイトのロードにかかる時間を短縮できます。

**注記**  
同時 TCP 接続の帯域幅制限は、それぞれ 1 秒あたり 800 KB です AWS アカウント。 AWS IoT セキュアトンネリングでは、受信リクエストの数に応じてこの制限を設定できます。

## ユースケースの例
<a name="tcp-use-case"></a>

送信先デバイスに対してローカルで、複数のコンポーネントが実行されているウェブサーバーにリモートにアクセスする必要があるとします。単一の TCP 接続でウェブサーバーにアクセスを試みているときに、シーケンシャルロードを行うと、サイト上のリソースのロードにかかる時間が長くなる可能性があります。同時 TCP 接続により、サイトのリソース要件を満たすことでロード時間を短縮でき、アクセス時間を短縮できます。次の図は、リモートデバイスで実行されているウェブサーバーアプリケーションへのデータストリームに対して、同時 TCP 接続がどのようにサポートされるかを示しています。

**注記**  
トンネルを使用してリモートデバイスで実行されている複数のアプリケーションにアクセスする場合は、トンネル多重化を使用できます。詳細については、「[セキュアトンネル内の複数のデータストリームを多重化する](multiplexing-multiple-streams.md)」を参照してください。

![\[TCP および WSS プロトコルを介して接続された、送信元デバイス、ローカルプロキシ、プロキシサーバー、およびウェブサーバーアプリケーションを使用する送信先デバイスを使用した IoT クラウドセットアップを示す図。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/tcp-tunneling.png)


## 同時 TCP 接続を使用する方法
<a name="multiple-tcp-tutorial"></a>

次の手順では、同時 TCP 接続を使用してリモートデバイスのウェブブラウザにアクセスする方法について説明します。クライアントからのリクエストが複数ある場合、 AWS IoT セキュアトンネリングはリクエストを処理するための同時 TCP 接続を自動的にセットアップするため、ロード時間が短縮されます。

1. 

**トンネルを開く**

   `OpenTunnel` API オペレーションまたは `open-tunnel` CLI コマンドを使用してトンネルを開きます。`HTTP` をサービスとして指定し、リモートデバイスに対応する AWS IoT のモノの名前を指定して、送信先を設定します。ウェブサーバーアプリケーションはこのリモートデバイスで実行されています。 AWS IoT レジストリに IoT モノを作成しておく必要があります。詳細については、「[レジストリを使用したモノの管理](thing-registry.md)」を参照してください。

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP
   ```

   このコマンドを実行すると、ローカルプロキシの実行に使用する送信元と送信先のアクセストークンが生成されます。

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**ローカルプロキシを設定、起動します**

   ローカルプロキシを実行する前に、[GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) からローカルプロキシソースコードをダウンロードし、選択したプラットフォーム用にビルドします。その後、送信先と送信元のローカルプロキシを起動して、セキュアトンネルに接続し、リモートウェブサーバーアプリケーションの使用を開始できます。
**注記**  
 AWS IoT 安全なトンネリングで同時 TCP 接続を使用するには、ローカルプロキシの最新バージョンにアップグレードする必要があります。 AWS IoT Device Client を使用してローカルプロキシを設定する場合、この機能は使用できません。

   ```
   // Start the destination local proxy
   ./localproxy -r us-east-1 -d HTTP=80 -t destination_client_access_token
   
   // Start the source local proxy
   ./localproxy -r us-east-1 -s HTTP=5555 -t source_client_access_token
   ```

   ローカルプロキシの設定と使用の詳細については、「[ローカルプロキシの使用方法](how-use-local-proxy.md)」を参照してください。

トンネルを使用してウェブサーバーアプリケーションにアクセスできるようになりました。 AWS IoT セキュアトンネリングは、クライアントから複数のリクエストがある場合、同時 TCP 接続を自動的にセットアップして処理します。