如何使用本地代理 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

如何使用本地代理

您可以在源设备和目标设备上运行本地代理,将数据传输到安全隧道终端节点。如果您的设备位于使用 Web 代理的网络中,Web 代理可以在将连接转发到互联网之前拦截它们。在这种情况下,您需要配置本地代理,才能使用 Web 代理。有关更多信息,请参阅为使用 Web 代理的设备配置本地代理

本地代理工作流

以下步骤展示如何在源设备和目标设备上运行本地代理。

  1. 将本地代理连接到安全隧道

    首先,本地代理必须与安全隧道建立连接。启动本地代理时,请使用以下参数:

    • -r 参数,用于指定打开隧道的 Amazon Web Services 区域。

    • -t 参数,用于传递从 OpenTunnel 返回的源或目标客户端访问令牌。

      注意

      不能同时连接两个使用相同客户端访问令牌值的本地代理。

  2. 执行源操作或目标操作

    建立 WebSocket 连接后,本地代理会根据其配置执行源模式操作或目标模式操作。

    默认情况下,如果出现任何输入/输出 (I/O) 错误或 WebSocket 连接意外关闭,本地代理会尝试重新连接到安全隧道。这会导致 TCP 连接关闭。如果出现任何 TCP 套接字错误,本地代理将通过隧道发送一条消息,通知对方关闭其 TCP 连接。预设情况下,本地代理始终使用 SSL 通信。

  3. 终止本地代理

    当您使用隧道后,可以安全地终止本地代理进程。我们建议您通过调用 CloseTunnel 显式关闭隧道。调用 CloseTunnel 后可能不会立即关闭活动隧道客户端。

有关如何使用 Amazon Web Services Management Console 打开隧道及开启 SSH 会话,请参阅 打开隧道并启动与远程设备的 SSH 会话

本地代理最佳实践

运行本地代理时,请遵循以下最佳实践:

  • 避免使用本地代理参数 -t 传入访问令牌。我们建议您使用 AWSIOT_TUNNEL_ACCESS_TOKEN 环境变量设置本地代理的访问令牌。

  • 在操作系统或环境中以最少权限运行本地代理可执行文件。

    • 避免以管理员身份在 Windows 上运行本地代理。

    • 避免以 root 身份在 Linux 和 macOS 上运行本地代理。

  • 考虑在单独的主机、容器、沙盒、chroot jail 或虚拟化环境上运行本地代理。

  • 使用相关安全标志构建本地代理,具体取决于您的工具链。

  • 在具有多个网络接口的设备上,使用 -b 参数将 TCP 套接字绑定到用于与目标应用程序通信的网络接口。

命令和输出示例

下面显示了在 Linux 操作系统上运行的命令示例以及相应的输出。该示例显示了正在侦听 HTTP 端口的 Web 代理,以及如何在 sourcedestination 模式下配置本地代理。在运行这些命令之前,您必须已打开隧道并获得源和目标的客户端访问令牌。您还必须已按照前面所述构建本地代理。

本地代理将 HTTPS 协议升级为 WebSockets 以建立长期连接,然后开始通过连接将数据传输到安全隧道设备终端节点。

注意

示例中使用的以下命令使用 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 是打开隧道的终端节点区域。

有关这些参数的更多信息,请参阅使用命令行参数设置的选项

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 是打开隧道的终端节点区域。

有关这些参数的更多信息,请参阅使用命令行参数设置的选项

以下显示了在 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 是打开隧道的终端节点区域。

有关这些参数的更多信息,请参阅使用命令行参数设置的选项

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 是打开隧道的终端节点区域。

有关这些参数的更多信息,请参阅使用命令行参数设置的选项

以下显示了在 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...