

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

# ローカルプロキシ
<a name="local-proxy"></a>

ローカルプロキシは、WebSocketの安全な接続を介したセキュアトンネリングを使用して、送信元デバイスで実行中のアプリケーションによって送信されたデータを送信します。[GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) からローカルプロキシソースをダウンロードすることができます。

ローカルプロキシは、`source` または `destination` の 2 つのモードで実行できます。送信元モードでは、ローカルプロキシは TCP 接続を開始するクライアントアプリケーションと同じデバイスまたはネットワーク上で実行されます。宛先モードでは、ローカルプロキシは宛先アプリケーションとともにリモートデバイス上で実行されます。トンネル多重化を使用すると、1 つのトンネルで一度に最大 3 つのデータストリームをサポートできます。セキュアトンネリングでは、データストリームごとに複数の TCP 接続が使用されるため、タイムアウトの可能性が低くなります。詳細については、「[セキュアトンネル内でのデータストリームの多重化と同時 TCP 接続の使用](multiplexing.md)」を参照してください。

# ローカルプロキシの使用方法
<a name="how-use-local-proxy"></a>

送信元デバイスおよび宛先デバイスでローカルプロキシを実行して、セキュアトンネリングエンドポイントにデータを送信できます。デバイスが、ウェブプロキシを使用するネットワーク内にある場合、ウェブプロキシは接続をインターネットに転送する前にそれらをインターセプトできます。この場合、ウェブプロキシを使用するようにローカルプロキシを設定する必要があります。詳細については、「[ウェブプロキシを使用するデバイスのローカルプロキシを設定します](configure-local-proxy-web-proxy.md)」を参照してください。

## ローカルプロキシのワークフロー
<a name="local-proxy-workflow"></a>

次の手順は、送信元デバイスおよび宛先デバイスでローカルプロキシがどのように実行されるかを説明します。

1. 

**ローカルプロキシをセキュアトンネリングに接続する**  
まず、ローカルプロキシはセキュアトンネリングへの接続を確立する必要があります。ローカルプロキシを起動するとき、次の引数を使用します。
   + トンネルが開かれる AWS リージョン を指定する`-r`引数。
   + `OpenTunnel` から返された送信元または宛先のクライアントアクセストークンを渡す `-t` 引数。
**注記**  
同じクライアントアクセストークン値を使用する 2 つのローカルプロキシを同時に接続することはできません。

1. 

**送信元または宛先アクションの実行**  
WebSocket 接続が確立されると、ローカルプロキシは、その設定に応じて、送信元モードまたは宛先モードのいずれかのアクションを実行します。

   デフォルトでは、入力/出力 (I/O) エラーが発生した場合、または WebSocket 接続が予期せず閉じられた場合、ローカルプロキシは、セキュアトンネリングに再接続しようとします。これにより、TCP 接続が閉じられます。TCP ソケットエラーが発生した場合、ローカルプロキシはトンネルを経由してメッセージを送信し、相手側に TCP 接続を閉じるように通知します。デフォルトでは、ローカルプロキシは常に SSL 通信を使用します。

1. 

**ローカルプロキシの停止**  
トンネルを使用した後は、ローカルプロキシプロセスを停止しても安全です。`CloseTunnel` を呼び出して、トンネルを明示的に閉じることを推奨します。アクティブなトンネルクライアントは、`CloseTunnel` を呼び出した直後に閉じられないことがあります。

を使用してトンネル AWS マネジメントコンソール を開き、SSH セッションを開始する方法の詳細については、「」を参照してください[トンネルを開き、リモートデバイスへの SSH セッションを開始します](secure-tunneling-tutorial-open-tunnel.md)。

## ローカルプロキシのベストプラクティス
<a name="local-proxy-security"></a>

ローカルプロキシを実行する場合は、以下のベストプラクティスに従ってください。
+ `-t` ローカルプロキシ引数を使用してアクセストークンを渡すことは避けてください。`AWSIOT_TUNNEL_ACCESS_TOKEN` 環境変数を使用して、ローカルプロキシのアクセストークンを設定することをお勧めします。
+ オペレーティングシステムまたは環境で、ローカルプロキシ実行可能ファイルを最小特権で実行します。
  + Windows では、ローカルプロキシを管理者として実行することは避けてください。
  + Linux および macOS の場合は、ローカルプロキシを root として実行することは避けてください。
+ 個別のホスト、コンテナ、サンドボックス、chroot jail、または仮想化環境でローカルプロキシを実行することを検討してください。
+ ツールチェーンに応じて、関連するセキュリティフラグを持つローカルプロキシを構築します。
+ 複数のネットワークインターフェイスを持つデバイスでは、`-b`引数を使用して、送信先アプリケーションとの通信に使用されるネットワークインターフェイスに、TCP ソケットをバインドします。

## コマンドと出力の例
<a name="example-cmd-output-localproxy"></a>

以下は、実行するコマンドと、対応する出力の例です。この例は、ローカルプロキシを `source` および `destination` モードの両方で設定する方法を示しています。ローカルプロキシは HTTPS プロトコルを WebSockets にアップグレードして存続期間が長い接続を確立し、接続を介して安全なトンネリングデバイスエンドポイントへのデータの送信を開始します。

**次のコマンドを実行する前に:**  
トンネルをオープンし、送信元と送信先のクライアントアクセストークンを取得しておく必要があります。また、前述の説明に従ってローカルプロキシを構築しておく必要もあります。ローカルプロキシを構築するには、GitHub レポジトリで[ローカルプロキシのソースコード](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)を開き、ローカルプロキシを構築、インストールするための手順に従います。

**注記**  
この例で使用される以下のコマンドは、ローカルプロキシを実行した後の異なるステップ (先ほど説明したもの) の概要を説明するために `verbosity` フラグを使用します。このフラグはテストのみに使用することが推奨されます。

**出典モードでのローカルプロキシの実行**  
以下のコマンドは、ローカルプロキシを送信元モードで実行する方法を示しています。

------
#### [ Linux/macOS ]

Linux または macOS では、ターミナルで次のコマンドを実行して、送信元でローカルプロキシを設定および起動します。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -s 5555 -v 5 -r us-west-2
```

コードの説明は以下のとおりです。
+ `-s` は送信元リッスンポートです。ローカルプロキシを送信元モードで起動します。
+ `-v` は出力の冗長性です。0～6 の値を指定できます。
+ `-r` は、トンネルが開かれるエンドポイントリージョンです。

これらのパラメータの詳細については、「[コマンドライン引数を使用して設定されるオプション](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments)」を参照してください。

------
#### [ Windows ]

Windows では、Linux や macOS の場合と同様にローカルプロキシを設定しますが、環境変数の定義方法は、他のプラットフォームとは異なります。`cmd` ウィンドウで以下のコマンドを実行し、送信元のローカルプロキシを設定して起動します。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -s 5555 -v 5 -r us-west-2
```

コードの説明は以下のとおりです。
+ `-s` は送信元リッスンポートです。ローカルプロキシを送信元モードで起動します。
+ `-v` は出力の冗長性です。0～6 の値を指定できます。
+ `-r` は、トンネルが開かれるエンドポイントリージョンです。

これらのパラメータの詳細については、「[コマンドライン引数を使用して設定されるオプション](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments)」を参照してください。

------

**注記**  
ソースモードで最新バージョンのローカルプロキシを使用する場合は、下位互換性のために`--destination-client-type V1`ソースデバイスに AWS CLI パラメータを含める必要があります。これは、次のいずれかの送信先モードに接続する場合に適用されます。  
AWS IoT デバイスクライアント
AWS IoT セキュアトンネリングコンポーネントまたは AWS IoT Greengrass Version 2 セキュアトンネリングコンポーネント
2022 年以前に作成された AWS IoT Secure Tunneling デモコード
ローカルプロキシの 1.X バージョン
このパラメータにより、更新された送信元のプロキシと古い送信先クライアント間の適切な通信が確保されます。ローカルプロキシのバージョンの詳細については、*GitHub* の「[AWS IoT Secure Tunneling](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following)」を参照してください。

以下は、ローカルプロキシを `source` モードで実行した出力の例です。

```
...
...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**送信先モードでのローカルプロキシの実行**  
以下のコマンドは、送信先モードでローカルプロキシを実行する方法を示しています。

------
#### [ Linux/macOS ]

Linux または macOS では、ターミナルで次のコマンドを実行して、宛先でローカルプロキシを設定および起動します。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -d 22 -v 5 -r us-west-2
```

コードの説明は以下のとおりです。
+ `-d` は宛先アプリケーションです。ローカルプロキシを宛先モードで起動します。
+ `-v` は出力の冗長性です。0～6 の値を指定できます。
+ `-r` は、トンネルが開かれるエンドポイントリージョンです。

これらのパラメータの詳細については、「[コマンドライン引数を使用して設定されるオプション](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments)」を参照してください。

------
#### [ Windows ]

Windows では、Linux や macOS の場合と同様にローカルプロキシを設定しますが、環境変数の定義方法は、他のプラットフォームとは異なります。`cmd` ウィンドウで以下のコマンドを実行して、宛先のローカルプロキシを設定して起動します。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -d 22 -v 5 -r us-west-2
```

コードの説明は以下のとおりです。
+ `-d` は宛先アプリケーションです。ローカルプロキシを宛先モードで起動します。
+ `-v` は出力の冗長性です。0～6 の値を指定できます。
+ `-r` は、トンネルが開かれるエンドポイントリージョンです。

これらのパラメータの詳細については、「[コマンドライン引数を使用して設定されるオプション](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via-command-line-arguments)」を参照してください。

------

**注記**  
宛先モードで最新バージョンのローカルプロキシを使用する場合は、下位互換性のために`--destination-client-type V1`宛先デバイスに AWS CLI パラメータを含める必要があります。これは、次のいずれかの送信元モードに接続する場合に適用されます。  
 AWS コンソールからのブラウザベースのセキュアトンネリング。
ローカルプロキシの 1.X バージョン
このパラメータにより、更新された送信先プロキシと古い送信元クライアント間の適切な通信が保証されます。ローカルプロキシのバージョンの詳細については、*GitHub* の「[AWS IoT Secure Tunneling](https://github.com/aws-samples/aws-iot-securetunneling-localproxy/blob/main/README.md#as-of-312-may-2024-update---destination-client-type-v1-will-be-a-required-parameter-when-connecting-with-the-following)」を参照してください。

以下は、ローカルプロキシを `destination` モードで実行した出力の例です。

```
...
...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved proxy  server IP: 10.10.0.11
Connected successfully with proxy server
Performing SSL handshake with proxy server	
Successfully completed SSL handshake with proxy server
HTTP/1.1 101 Switching Protocols

...

Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket

...

Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Setting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```

# ウェブプロキシを使用するデバイスのローカルプロキシを設定します
<a name="configure-local-proxy-web-proxy"></a>

 AWS IoT デバイスでローカルプロキシを使用して、 AWS IoT セキュアトンネリング APIsと通信できます。ローカルプロキシは、WebSocketの安全な接続を介したセキュアトンネリングを通して、デバイスアプリケーションによって送信されたデータを送信します。ローカルプロキシは `source` または `destination` モードで実行できます。`source` モードでは、TCP 接続を開始するものと同じデバイスまたはネットワークで実行されます。`destination` モードでは、ローカルプロキシが送信先アプリケーションと共にリモートデバイス上で実行されます。詳細については、「[ローカルプロキシ](local-proxy.md)」を参照してください。

 AWS IoT セキュアトンネリングを使用するには、ローカルプロキシがインターネットに直接接続する必要があります。セキュアトンネリングを使用した存続期間が長い TCP 接続については、ローカルプロキシが HTTPS リクエストをアップグレードして、[セキュアトンネリングデバイス接続エンドポイント](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html)のいずれかへの WebSockets 接続を確立します。

デバイスが、ウェブプロキシを使用するネットワーク内にある場合、ウェブプロキシは接続をインターネットに転送する前にそれらをインターセプトできます。セキュアトンネリングデバイス接続エンドポイントに対して存続期間が長い接続を確立するには、[WebSocket の仕様](https://tools.ietf.org/html/rfc6455#section-4.1)で説明されているとおり、ウェブプロキシを使用するようにローカルプロキシを設定します。

**注記**  
[AWS IoT Device Client](iot-sdks.md#iot-sdk-device-client)は、ウェブプロキシを使用するデバイスをサポートしていません。ウェブプロキシに対応させるには、以下で説明されているように、ローカルプロキシを使用してウェブプロキシに対応するように設定する必要があります。

以下の手順は、ローカルプロキシとウェブプロキシがどのように連動するかを説明するものです。

1. ローカルプロキシは、HTTP `CONNECT` リクエストをウェブプロキシに送信します。このリクエストには、セキュアトンネリングサービスのリモートアドレスと共に、ウェブプロキシ認証情報が含まれています。

1. 次に、ウェブプロキシがリモートセキュアトンネリングエンドポイントに対する存続期間が長い接続を作成します。

1. TCP 接続が確立され、ローカルプロキシは、データ伝送の送信元モードと送信先モードの両方で稼働します。

**Topics**
+ [ローカルプロキシを構築します](#build-local-proxy)
+ [ウェブプロキシを設定します](#configure-web-proxy)
+ [ローカルプロキシを設定、起動します](#configure-start-local-proxy)

## ローカルプロキシを構築します
<a name="build-local-proxy"></a>

GitHub リポジトリで、[ローカルプロキシのソースコード](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)を開き、ローカルプロキシを構築、インストールするための手順に従います。

## ウェブプロキシを設定します
<a name="configure-web-proxy"></a>

ローカルプロキシは、[HTTP/1.1 の仕様](https://tools.ietf.org/html/rfc7231#section-4.3.6)で説明されている HTTP トンネリングメカニズムに依存しています。この仕様に準拠するには、ウェブプロキシが `CONNECT` メソッドの使用をデバイスに許可する必要があります。

ウェブプロキシの設定方法は、使用しているウェブプロキシと Wウェブプロキシのバージョンによって異なります。ウェブプロキシを正しく設定されるように、ウェブプロキシのドキュメントを確認してください。

Web プロキシを設定するには、まず ウェブプロキシ URLを特定し、ウェブプロキシが、HTTP トンネリングをサポートしているかどうかを確認します。ウェブプロキシURL は、後でローカルプロキシを設定して起動する時に使用されます。

1. 

**ウェブプロキシの URL を特定します**  
ウェブプロキシ URL は以下の形式になるでしょう。

   ```
   protocol://web_proxy_host_domain:web_proxy_port
   ```

   AWS IoT セキュアトンネリングは、ウェブプロキシの基本認証のみをサポートします。ベーシック認証を使用するには、**username**および**password**をウェブプロキシ URLの一部として指定する必要があります。ウェブプロキシ URL は、次の形式になります。

   ```
   protocol://username:password@web_proxy_host_domain:web_proxy_port
   ```
   + *protocol* は、`http` または `https` にすることが可能です。`https` を使用することをお勧めします。
   + [*proxy\$1host\$1domain*]は、ウェブプロキシの IP アドレス、またはウェブプロキシの IP アドレスを解決する DNS 名です。
   + [*web\$1proxy\$1port*]は、ウェブプロキシがリッスンするポートです。
   + ウェブプロキシはこの**username**および**password**を使用してリクエストを認証します。

1. 

**ウェブプロキシの URL をテストします**  
Web プロキシが TCP トンネリングをサポートしているかどうかを確認するには、`curl`コマンドを使用し、必ず`2xx`または`3xx`レスポンスを受け取る事を確認してください。

   例えば、ウェブプロキシ URL が `https://server.com:1235` の場合は、`curl` コマンドで `proxy-insecure` フラグを使用します。これは、ウェブプロキシが自己署名証明書に依存する可能性があるためです。

   ```
   export HTTPS_PROXY=https://server.com:1235
   curl -I https://aws.amazon.com --proxy-insecure
   ```

   ウェブプロキシ URL に`http`ポート (例、`http://server.com:1234`)がある場合は、`proxy-insecure`フラグを使う必要はありません。

   ```
   export HTTPS_PROXY=http://server.com:1234
   curl -I https://aws.amazon.com
   ```

## ローカルプロキシを設定、起動します
<a name="configure-start-local-proxy"></a>

ウェブプロキシを使用するためにローカルプロキシを設定するには、DNS ドメイン名、またはウェブプロキシが使用する IP アドレスとポート番号で`HTTPS_PROXY` 環境変数を設定する必要があります。

ローカルプロキシを設定したら、この [README](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#readme) ドキュメントに説明されているようにローカルプロキシを使用できます。

**注記**  
環境変数の宣言では、大文字と小文字が区別されます。一度、すべて大文字またはすべて小文字のいずれかを使用して、それぞれの変数を定義する事をお勧めいたします。以下の例は、大文字で宣言された環境変数を示しています。同じ変数が大文字と小文字の両方を使用して指定されている場合は、小文字を使用して指定された変数が優先されます。

以下のコマンドは、ウェブプロキシを使用するように送信先で実行されているローカルプロキシを設定して、ローカルプロキシを開始する方法を示しています。
+ `AWSIOT_TUNNEL_ACCESS_TOKEN`: この変数は、送信先のクライアントアクセストークン (CAT) を保持します。
+ `HTTPS_PROXY`: この変数は、ローカルプロキシを設定するための Web プロキシ URL または IP アドレスを保持します。

以下の例にあるコマンドは、使用するオペレーティングシステムと、ウェブプロキシが HTTP ポートまたは HTTPS ポートのどちらでリッスンしているかに応じて異なります。

### HTTP ポートでリッスンする ウェブプロキシ
<a name="configure-start-local-proxy-http"></a>

ウェブプロキシが HTTP ポートでリッスンしている場合は、`HTTPS_PROXY` 変数にウェブプロキシ URL または IP アドレスを指定できます。

------
#### [ Linux/macOS ]

Linux または macOS では、ターミナルで次のコマンドを実行して、HTTP ポートをリッスンする Web プロキシを使用するように宛先でローカルプロキシを設定および起動します。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

プロキシで認証する必要がある場合は、**username**および**password**を`HTTPS_PROXY`変数の一部として実行します。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22
```

------
#### [ Windows ]

Windows では、Linux や macOS の場合と同様にローカルプロキシを設定しますが、環境変数の定義方法は、他のプラットフォームとは異なります。`cmd` ウィンドウで以下のコマンドを実行して、HTTP ポートをリッスンするウェブプロキシを使用するように送信先のローカルプロキシを設定して、ローカルプロキシを開始します。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22
```

プロキシで認証する必要がある場合は、**username**および**password**を`HTTPS_PROXY`変数の一部として実行する必要があります。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22
```

------

### HTTPS ポートでリッスンする ウェブプロキシ
<a name="configure-start-local-proxy-https"></a>

ウェブプロキシが HTTPS ポートでリッスンしている場合は、以下のコマンドを実行します。

**注記**  
Web プロキシに自己署名証明書を使用している場合、またはネイティブの OpenSSL サポートおよびデフォルト設定がない OS でローカルプロキシを実行している場合は、[[Certificate setup](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#certificate-setup)](証明書セットアップ)セクションを GitHub リポジトリに追加します。

以下のコマンドは、HTTP プロキシ用にウェブプロキシを設定した方法と似ていますが、上記の説明どおりにインストールされた証明書ファイルへのパスも指定するという点が異なります。

------
#### [ Linux/macOS ]

Linux または macOS では、ターミナルで以下のコマンドを実行して、HTTPS ポートをリッスンするウェブプロキシを使用するように送信先で実行されているローカルプロキシを設定します。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

プロキシで認証する必要がある場合は、`HTTPS_PROXY` 変数の一部として **username** および **password** を指定する必要があります。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
```

------
#### [ Windows ]

Windows では、`cmd` ウィンドウで以下のコマンドを実行して、HTTP ポートをリッスンするウェブプロキシを使用するように送信先で実行されているローカルプロキシを設定し、ローカルプロキシを開始します。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

プロキシで認証する必要がある場合は、`HTTPS_PROXY` 変数の一部として **username** および **password** を指定する必要があります。

```
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
```

------

### コマンドと出力の例
<a name="example-cmd-output-localproxy-webproxy"></a>

以下は、Linux OS で実行するコマンドと、対応する出力の例です。この例では、HTTP ポートでリッスンしているウェブプロキシと、ウェブプロキシを `source` および `destination` モードの両方で使用するようにローカルプロキシを設定する方法を説明します。これらのコマンドを実行する前に、トンネルをオープンし、送信元と宛先のクライアントアクセストークンを取得しておく必要があります。また、前述の説明に従ってローカルプロキシを構築し、ウェブプロキシを設定しておく必要もあります。

ここでは、ローカルプロキシを起動した後の手順の概要を示します。ローカルプロキシ:
+ ウェブプロキシURLを識別し、そのURLを使用してプロキシサーバーに接続できるようにします。
+ ウェブプロキシとの TCP 接続を確立します。
+ HTTP `CONNECT` リクエストをウェブプロキシに送信し、接続が確立されたことを示す `HTTP/1.1 200` レスポンスを待ちます。
+ HTTPS プロトコルを WebSockets にアップグレードして、存続時間が長い接続を確立します。
+ セキュアトンネリングデバイスエンドポイントへの接続を介してデータの送信を開始します。

**注記**  
この例で使用される以下のコマンドは、ローカルプロキシを実行した後の異なるステップ (先ほど説明したもの) の概要を説明するために `verbosity` フラグを使用します。このフラグはテストのみに使用することが推奨されます。

**出典モードでのローカルプロキシの実行**  
以下のコマンドは、ローカルプロキシを出典モードで実行する方法を示しています。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -s 5555 -v 5 -r us-west-2
```

以下は、ローカルプロキシを `source` モードで実行したサンプル出力です。

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in source mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.11
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 0a109afffee745f5-00001341-000b8138-cc6c878d80e8adb0-f186064b
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
Resolved bind IP: 127.0.0.1
Listening for new connection on port 5555
```

**送信先モードでのローカルプロキシの実行**  
以下のコマンドは、送信先モードでローカルプロキシを実行する方法を示しています。

```
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -d 22 -v 5 -r us-west-2
```

以下は、ローカルプロキシを `destination` モードで実行したサンプル出力です。

```
...

Parsed basic auth credentials for the URL
Found Web proxy information in the environment variables, will use it to connect via the proxy.

...

Starting proxy in destination mode
Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Resolved Web proxy IP: 10.10.0.1
Connected successfully with Web Proxy
Successfully sent HTTP CONNECT to the Web proxy
Full response from the Web proxy:
HTTP/1.1 200 Connection established
TCP tunnel established successfully
Connected successfully with proxy server
Successfully completed SSL handshake with proxy server
Web socket session ID: 06717bfffed3fd05-00001355-000b8315-da3109a85da804dd-24c3d10d
Web socket subprotocol selected: aws.iot.securetunneling-2.0
Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443
Seting up web socket pings for every 5000 milliseconds
Scheduled next read:

...

Starting web socket read loop continue reading...
```