本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如何使用本地代理
您可以在源设备和目标设备上运行本地代理,将数据传输到安全隧道终端节点。如果您的设备位于使用 Web 代理的网络中,Web 代理可以在将连接转发到互联网之前拦截它们。在这种情况下,您需要配置本地代理,才能使用 Web 代理。有关更多信息,请参阅 为使用 Web 代理的设备配置本地代理。
本地代理工作流
以下步骤展示如何在源设备和目标设备上运行本地代理。
-
将本地代理连接到安全隧道
首先,本地代理必须与安全隧道建立连接。启动本地代理时,请使用以下参数:
-
用于指定 Amazon Web Services 区域 在其中打开隧道的
-r
参数。 -
-t
参数,用于传递从OpenTunnel
返回的源或目标客户端访问令牌。注意
不能同时连接两个使用相同客户端访问令牌值的本地代理。
-
-
执行源操作或目标操作
建立 WebSocket 连接后,本地代理将根据其配置执行源模式或目标模式操作。
默认情况下,如果出现任何输入/输出 (I/O) 错误或连接意外关闭,本地代理会尝试重新连接到安全隧道。 WebSocket 这会导致 TCP 连接关闭。如果出现任何 TCP 套接字错误,本地代理将通过隧道发送一条消息,通知对方关闭其 TCP 连接。预设情况下,本地代理始终使用 SSL 通信。
-
终止本地代理
当您使用隧道后,可以安全地终止本地代理进程。我们建议您通过调用
CloseTunnel
显式关闭隧道。活动隧道客户端可能无法在呼叫后立即关闭CloseTunnel
。
有关如何使用打开隧道和启动 SSH 会话的更多信息,请参阅打开隧道并启动与远程设备的 SSH 会话。 Amazon Web Services Management Console
本地代理最佳实践
运行本地代理时,请遵循以下最佳实践:
-
避免使用本地代理参数
-t
传入访问令牌。我们建议您使用AWSIOT_TUNNEL_ACCESS_TOKEN
环境变量设置本地代理的访问令牌。 -
在操作系统或环境中以最少权限运行本地代理可执行文件。
-
避免以管理员身份在 Windows 上运行本地代理。
-
避免以 root 身份在 Linux 和 macOS 上运行本地代理。
-
-
考虑在单独的主机、容器、沙盒、chroot jail 或虚拟化环境上运行本地代理。
-
使用相关安全标志构建本地代理,具体取决于您的工具链。
-
在具有多个网络接口的设备上,使用
-b
参数将 TCP 套接字绑定到用于与目标应用程序通信的网络接口。
命令和输出示例
下面显示了您运行的命令示例以及相应的输出。该示例说明如何在 source
和 destination
模式下配置本地代理。本地代理将 HTTPS 协议升级 WebSockets 为以建立长寿命连接,然后开始通过连接将数据传输到安全隧道设备端点。
在运行这些命令之前:
您必须已打开隧道并获得源和目标的客户端访问令牌。您还必须已按照前面所述构建本地代理。要构建本地代理,请在 GitHub 存储库中打开本地代理源代码
注意
示例中使用的以下命令使用 verbosity
标志来说明运行本地代理后先前描述的不同步骤概览。建议您仅将此标记用于测试。
在源模式下运行本地代理
以下命令显示如何在源模式下运行本地代理。
以下显示了在 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
在目标模式下运行本地代理
以下命令显示如何在目标模式下运行本地代理。
以下显示了在 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...