

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 로컬 프록시
<a name="local-proxy"></a>

로컬 프록시는 WebSocket 보안 연결을 통한 보안 터널링을 사용하여 소스 디바이스에서 실행되는 애플리케이션에서 보낸 데이터를 전송합니다. [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)에서 로컬 프록시 소스를 다운로드할 수 있습니다.

로컬 프록시는 두 가지 모드인 `source` 또는 `destination` 모드로 실행할 수 있습니다. 소스 모드에서 로컬 프록시는 TCP 연결을 시작하는 클라이언트 애플리케이션과 동일한 디바이스 또는 네트워크에서 실행됩니다. 대상 모드에서 로컬 프록시는 대상 애플리케이션과 함께 원격 디바이스에서 실행됩니다. 터널 멀티플렉싱을 사용하여 단일 터널에서 한 번에 최대 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` 인수입니다.
   + `-t` 인수는 `OpenTunnel`에서 반환된 소스 또는 대상 클라이언트 액세스 토큰을 전달합니다.
**참고**  
동일한 클라이언트 액세스 토큰 값을 사용하는 두 개의 로컬 프록시는 동시에 연결할 수 없습니다.

1. 

**소스 또는 대상 작업 수행**  
WebSocket 연결이 설정되면 로컬 프록시는 구성에 따라 소스 모드 또는 대상 모드 작업을 수행합니다.

   기본적으로 로컬 프록시는 입력/출력(I/O) 오류가 발생하거나 WebSocket 연결이 예기치 않게 닫히는 경우 보안 터널링에 다시 연결하려고 시도합니다. 이로 인해 TCP 연결이 닫힙니다. TCP 소켓 오류가 발생하면 로컬 프록시는 터널을 통해 메시지를 전송해 상대방에게 해당 TCP 연결을 닫도록 알립니다. 기본적으로 로컬 프록시는 항상 SSL 통신을 사용합니다.

1. 

**로컬 프록시 중지**  
터널을 사용한 후에는 로컬 프록시 프로세스를 중지하는 것이 안전합니다. `CloseTunnel`을 호출하여 터널을 명시적으로 닫는 것이 좋습니다. 활성 터널 클라이언트는 `CloseTunnel` 직접 호출 후 즉시 닫히지 않을 수 있습니다.

를 사용하여 터널 AWS Management Console 을 열고 SSH 세션을 시작하는 방법에 대한 자세한 내용은 섹션을 참조하세요[터널을 열고 원격 디바이스에 대한 SSH 세션 시작](secure-tunneling-tutorial-open-tunnel.md).

## 로컬 프록시 모범 사례
<a name="local-proxy-security"></a>

로컬 프록시를 실행할 때 다음 모범 사례를 따르십시오.
+ 액세스 토큰을 전달하기 위해 `-t` 로컬 프록시 인수를 사용하지 마세요. `AWSIOT_TUNNEL_ACCESS_TOKEN` 환경 변수를 사용하여 로컬 프록시에 대한 액세스 토큰을 설정하는 것이 좋습니다.
+ 운영 체제 또는 환경에서 최소 권한으로 로컬 프록시 실행 파일을 실행합니다.
  + Windows에서 관리자로 로컬 프록시를 실행하지 마세요.
  + Linux 및 macOS에서 로컬 프록시를 루트로 실행하지 마세요.
+ 별도의 호스트, 컨테이너, 샌드박스, chroot jail 또는 가상화 환경에서 로컬 프록시를 실행하는 것이 좋습니다.
+ 도구 체인에 따라 관련 보안 플래그를 사용하여 로컬 프록시를 빌드합니다.
+ 네트워크 인터페이스가 여러 개인 디바이스에서 `-b` 인수를 사용하여 TCP 소켓을 대상 애플리케이션과 통신하는 데 사용되는 네트워크 인터페이스에 바인딩합니다.

## 예제 명령 및 출력
<a name="example-cmd-output-localproxy"></a>

다음은 실행하는 명령 및 해당 출력의 예입니다. 이 예제에서는 `source` 및 `destination` 모드 모두에서 로컬 프록시를 구성하는 방법을 보여 줍니다. 로컬 프록시는 HTTPS 프로토콜을 WebSocket으로 업그레이드하여 장기 연결을 설정한 다음 보안 터널링 디바이스 엔드포인트에 대한 연결을 통해 데이터 전송을 시작합니다.

**다음 명령을 실행하기 전에:**  
터널을 열고 소스 및 대상에 대한 클라이언트 액세스 토큰을 가져와야 합니다. 또한 앞에서 설명한 대로 로컬 프록시를 구축해야 합니다. 로컬 프록시를 구축하려면 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) 중 하나에 대한 WebSocket 연결을 설정합니다.

디바이스가 웹 프록시를 사용하는 네트워크에 있는 경우 연결을 인터넷에 전달하기 전에 웹 프록시가 연결을 가로챌 수 있습니다. 보안 터널링 디바이스 연결 엔드포인트에 대한 장기 연결을 설정하려면 [websocket 사양](https://tools.ietf.org/html/rfc6455#section-4.1)에 설명된 대로 웹 프록시를 사용하도록 로컬 프록시를 구성하세요.

**참고**  
[AWS IoT 디바이스 클라이언트](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` 메서드를 사용하도록 허용해야 합니다.

웹 프록시를 구성하는 방법은 사용 중인 웹 프록시와 웹 프록시 버전에 따라 다릅니다. 웹 프록시를 올바르게 구성하려면 웹 프록시의 설명서를 확인하세요.

웹 프록시를 구성하려면 먼저 웹 프록시 URL을 식별하고 웹 프록시가 HTTP 터널링을 지원하는지 확인합니다. 나중에 로컬 프록시를 구성하고 시작할 때 웹 프록시 URL이 사용됩니다.

1. 

**웹 프록시 URL 식별**  
웹 프록시 URL의 형식은 다음과 같습니다.

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

   AWS IoT 보안 터널링은 웹 프록시에 대한 기본 인증만 지원합니다. 기본 인증을 사용하려면 웹 프록시 URL의 일부로 **username** 및 **password**를 지정해야 합니다. 웹 프록시 URL은 다음 형식입니다.

   ```
   protocol://username:password@web_proxy_host_domain:web_proxy_port
   ```
   + *프로토콜*은 `http` 또는 `https`가 될 수 있습니다. `https`을 사용할 것을 권장합니다.
   + *web\$1proxy\$1host\$1domain*은 웹 프록시의 IP 주소 또는 웹 프록시의 IP 주소로 확인되는 DNS 이름입니다.
   + *web\$1proxy\$1port*는 웹 프록시가 수신 대기하는 포트입니다.
   + 웹 프록시는 이 **username** 및 **password**를 사용하여 요청을 인증합니다.

1. 

**웹 프록시 URL 테스트**  
웹 프록시가 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`: 이 변수는 로컬 프록시를 구성하기 위한 웹 프록시 URL 또는 IP 주소를 보유합니다.

다음 예제에 표시된 명령은 사용하는 운영 체제 및 웹 프록시가 HTTP 또는 HTTPS 포트에서 수신 대기하는지 여부에 따라 다릅니다.

### HTTP 포트에서 수신 대기 중인 웹 프록시
<a name="configure-start-local-proxy-http"></a>

웹 프록시가 HTTP 포트에서 수신 대기 중인 경우 `HTTPS_PROXY` 변수에 웹 프록시 URL 또는 IP 주소를 제공할 수 있습니다.

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

Linux 또는 macOS의 경우 터미널에서 다음 명령을 실행하여 HTTP 포트를 수신 대기하는 웹 프록시를 사용하도록 대상에서 로컬 프록시를 구성하고 시작합니다.

```
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 포트에서 수신 대기하는 경우 다음 명령을 실행합니다.

**참고**  
웹 프록시에 자체 서명된 인증서를 사용하거나 기본 OpenSSL 지원 및 기본 구성이 없는 OS에서 로컬 프록시를 실행하는 경우 GitHub 리포지토리의 [인증서 설정](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#certificate-setup) 섹션에 설명된 대로 웹 프록시 인증서를 설정해야 합니다.

다음 명령은 앞에서 설명한 대로 설치한 인증서 파일의 경로도 지정하는 경우를 제외하고 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
```

프록시로 인증해야 하는 경우 **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 -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
```

프록시로 인증해야 하는 경우 **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 -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...
```