

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configure el proxy local para los dispositivos que utilizan el proxy web
<a name="configure-local-proxy-web-proxy"></a>

Puede usar el proxy local en AWS IoT los dispositivos para comunicarse mediante túneles AWS IoT seguros. APIs El proxy local transmite los datos enviados por la aplicación del dispositivo mediante una tunelización segura a través de una conexión segura. WebSocket El proxy local puede funcionar en modo `source` o `destination`. En el modo `source`, se ejecuta en el mismo dispositivo o red que inicia la conexión TCP. En el modo `destination`, el proxy local se ejecuta en el dispositivo remoto, junto con la aplicación de destino. Para obtener más información, consulte [Proxy local](local-proxy.md).

El proxy local debe conectarse directamente a Internet para utilizar una tunelización AWS IoT segura. Para una conexión TCP duradera con tunelización segura, el proxy local actualiza la solicitud HTTPS para establecer una WebSockets conexión con uno de los puntos finales de conexión del dispositivo de tunelización [segura](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html).

Si sus dispositivos están en una red que utiliza un proxy web, este puede interceptar las conexiones antes de reenviarlas a Internet. Para establecer una conexión duradera con los puntos de conexión de conexión seguros del dispositivo de tunelización, configura tu proxy local para que utilice el proxy web tal y como se describe en la [especificación de websocket.](https://tools.ietf.org/html/rfc6455#section-4.1)

**nota**  
El [Cliente de dispositivo de AWS IoT](iot-sdks.md#iot-sdk-device-client) no es compatible con los dispositivos que utilizan un proxy web. Para trabajar con el proxy web, tendrás que usar un proxy local y configurarlo para que funcione con un proxy web tal y como se describe a continuación.

Los siguientes pasos muestran cómo funciona el proxy local con un proxy web.

1. El proxy local envía una solicitud `CONNECT` HTTP al proxy web que contiene la dirección remota del servicio de tunelización segura, junto con la información de autenticación del proxy web.

1. A continuación, el proxy web creará una conexión duradera con los puntos de conexión remotos de tunelización segura.

1. La conexión TCP está establecida y el proxy local ahora funcionará tanto en el modo de origen como en el de destino para la transmisión de datos.

**Topics**
+ [Cree el proxy local](#build-local-proxy)
+ [Configure su proxy web](#configure-web-proxy)
+ [Configure e inicie el proxy local](#configure-start-local-proxy)

## Cree el proxy local
<a name="build-local-proxy"></a>

Abre el [código fuente del proxy local](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) en el GitHub repositorio y sigue las instrucciones para crear e instalar el proxy local.

## Configure su proxy web
<a name="configure-web-proxy"></a>

El proxy local se basa en el mecanismo de tunelización HTTP descrito en la especificación [HTTP/1.1](https://tools.ietf.org/html/rfc7231#section-4.3.6). Para cumplir con las especificaciones, el proxy web debe permitir que los dispositivos utilicen el método. `CONNECT`

La forma de configurar el proxy web depende del proxy web que utilice y de la versión del proxy web. Para asegurarse de que configura el proxy web correctamente, consulte la documentación de su proxy web.

Para configurar el proxy web, primero identifique la URL del proxy web y confirme si el proxy web admite la tunelización HTTP. La URL del proxy web se utilizará más adelante cuando configure e inicie el proxy local.

1. 

**Identifique la URL de su proxy web**  
La URL del proxy web tendrá el siguiente formato.

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

   AWS IoT La tunelización segura solo admite la autenticación básica para el proxy web. Para utilizar la autenticación básica, debe especificar **username** y **password** como parte de la URL del proxy web. La URL del proxy web tendrá el siguiente formato.

   ```
   protocol://username:password@web_proxy_host_domain:web_proxy_port
   ```
   + *protocol*puede ser `http` o. `https` Le recomendamos que utilice `https`.
   + *web\$1proxy\$1host\$1domain*es la dirección IP de su proxy web o un nombre DNS que se convierte en la dirección IP de su proxy web.
   + *web\$1proxy\$1port*es el puerto en el que escucha el proxy web.
   + El proxy web utiliza este **username** y **password** para autenticar la solicitud.

1. 

**Pruebe la URL de su proxy web**  
Para confirmar si su proxy web soporta el túnel TCP, utilice un comando `curl` y asegúrese de que obtiene una respuesta `2xx` o `3xx`.

   Por ejemplo, si la URL de su proxy web es `https://server.com:1235`, utilice una marca `proxy-insecure` con el comando `curl`, ya que el proxy web podría basarse en un certificado autofirmado.

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

   Si la URL de su proxy web tiene un puerto `http` (por ejemplo, `http://server.com:1234`), no tienes que usar la marca `proxy-insecure`.

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

## Configure e inicie el proxy local
<a name="configure-start-local-proxy"></a>

Para configurar el proxy local para utilizar un proxy web, debe configurar la variable de entorno `HTTPS_PROXY` con los nombres de dominio DNS o las direcciones IP y los números de puerto que utiliza su proxy web.

Después de configurar el proxy local, puede usarlo tal y como se explica en este documento [README](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#readme).

**nota**  
La declaración de variables de entorno distingue entre mayúsculas y minúsculas. Recomendamos que defina cada variable solo con mayúsculas o minúsculas. Los siguientes ejemplos muestran la variable de entorno declarada en mayúsculas. Si la misma variable se especifica con letras mayúsculas y minúsculas, prevalecerá la variable especificada con letras minúsculas. 

Los siguientes comandos muestran cómo configurar el proxy local que se ejecuta en el destino para que utilice el proxy web e inicie el proxy local.
+ `AWSIOT_TUNNEL_ACCESS_TOKEN`: Esta variable contiene el token de acceso de cliente (CAT) del destino.
+ `HTTPS_PROXY`: Esta variable contiene la URL del proxy web o la dirección IP para configurar el proxy local.

Los comandos que se muestran en los siguientes ejemplos dependen del sistema operativo que utilice y de si el proxy web escucha en un puerto HTTP o HTTPS.

### El proxy web escucha en un puerto HTTP
<a name="configure-start-local-proxy-http"></a>

Si su proxy web escucha en un puerto HTTP, puede proporcionar la URL o la dirección IP del proxy web para la variable `HTTPS_PROXY`.

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

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar e iniciar el proxy local en su destino para utilizar un proxy web a la escucha de un puerto HTTP.

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

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `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 ]

En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local en su destino para utilizar un proxy web a la escucha de un puerto HTTP.

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

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `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
```

------

### El proxy web escucha en un puerto HTTPS
<a name="configure-start-local-proxy-https"></a>

Ejecute los siguientes comandos si su proxy web escucha en un puerto HTTPS. 

**nota**  
Si utilizas un certificado autofirmado para el proxy web o si ejecutas el proxy local en un sistema operativo que no admite OpenSSL nativo ni tiene configuraciones predeterminadas, tendrás que configurar tus certificados de proxy web tal y como se describe en [la sección Configuración de certificados del repositorio](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#certificate-setup). GitHub 

Los siguientes comandos tendrán un aspecto similar al que configuró su proxy web para un proxy HTTP, con la excepción de que también especificará la ruta a los archivos de certificado que instaló, tal como se describió anteriormente.

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

En Linux o macOS, ejecute los siguientes comandos en el terminal para configurar el proxy local que se ejecuta en su destino para utilizar un proxy web que escuche en un puerto 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
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `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 ]

En Windows, ejecute los siguientes comandos en la ventana `cmd` para configurar e iniciar el proxy local que se ejecuta en su destino para utilizar un proxy web a la escucha de un puerto 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
```

Si tiene que autenticarse con el proxy, debe especificar un **username** y **password** como parte de la variable `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
```

------

### Comando y salida de ejemplo
<a name="example-cmd-output-localproxy-webproxy"></a>

A continuación se muestra un ejemplo de un comando que se ejecuta en un sistema operativo Linux y la salida correspondiente. En el ejemplo, se muestra un proxy web que escucha en un puerto HTTP y cómo se puede configurar el proxy local para que utilice el proxy web en ambos modos `source` y `destination`. Antes de poder ejecutar estos comandos, debe haber abierto ya un túnel y obtenido los tokens de acceso de cliente para el origen y el destino. También debe haber construido el proxy local y configurado su proxy web como se ha descrito anteriormente.

A continuación, se muestra información general de los pasos después de iniciar el proxy local. El proxy local:
+ Identifica la URL del proxy web para que pueda utilizarla para conectarse al servidor proxy.
+ Establece una conexión TCP con el proxy web.
+ Envía una solicitud `CONNECT` HTTP al proxy web y espera la respuesta `HTTP/1.1 200`, que indica que se ha establecido la conexión.
+ Actualiza el protocolo HTTPS para WebSockets establecer una conexión duradera.
+ Comienza a transmitir datos a través de la conexión a los puntos de conexión del dispositivo de tunelización seguro. 

**nota**  
Los siguientes comandos utilizados en los ejemplos usan la marca `verbosity` para ilustrar una descripción general de los diferentes pasos descritos anteriormente después de ejecutar el proxy local. Le recomendamos que utilice esta marca sólo con fines de prueba.

**Ejecutar el proxy local en modo fuente**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en modo fuente.

```
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
```

A continuación se muestra un ejemplo de resultado de la ejecución del proxy local en modo `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
```

**Ejecutar el proxy local en el modo de destino**  
En los siguientes comandos se muestra cómo ejecutar el proxy local en modo destino.

```
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
```

A continuación se muestra un ejemplo de resultado de la ejecución del proxy local en modo `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...
```