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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如何使用本地代理

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

本地代理工作流

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

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

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

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

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

      注意

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

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

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

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

  3. 终止本地代理

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

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

本地代理最佳实践

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

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

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

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

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

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

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

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

命令和输出示例

下面显示了您运行的命令示例以及相应的输出。该示例说明如何在 sourcedestination 模式下配置本地代理。本地代理将 HTTPS 协议升级 WebSockets 为以建立长寿命连接,然后开始通过连接将数据传输到安全隧道设备端点。

在运行这些命令之前:

您必须已打开隧道并获得源和目标的客户端访问令牌。您还必须已按照前面所述构建本地代理。要构建本地代理,请在 GitHub 存储库中打开本地代理源代码,然后按照说明构建和安装本地代理。

注意

示例中使用的以下命令使用 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...