我们开发了一种基于中央大脑(Raspberry Pi 计算机)的机器。它使用4G/5G路由器来访问外部世界。我预计会有数百台这样的机器。现在,我创建了一个基于 REST 的 API,这样我就可以访问 Raspberry 内存/磁盘中的数据库,我的问题是:考虑到静态 IP 不是免费的,而且并不便宜,该怎么办?每台机器都有一个新域,以便该域将成为 API 的端点?我在这里看到的问题是,我必须注册和维护数百个域(例如 www.machine1.com、www.machine2.com 等)。我认为这不是正确的制作方法,对吗?当我想到基于云或现场服务器的解决方案时,我仍然遇到这样的问题:云应用程序或服务器需要知道在哪里可以找到每台机器进行 API 通信(静态 IP 或域)。
如果有人可以帮助我决定如何选择正确的解决方案,我将不胜感激。谢谢!
到目前为止,我正在考虑为每台计算机购买静态 IP 或为每台计算机购买特定/临时域。对我来说,这些解决方案似乎都不是有效或明智的方法。
首先,您确定远程计算机上有公共IP吗?
端口可以远程访问吗?
在某些情况下,ISP 使用 4G/5G 专用网络,因此他们不必拥有与设备一样多的公共 IPv4...例如法国就是这种情况。
我们暂时先把 REST API 放在一边。
那么你就会有以下2种情况:
如果您有一个具有可访问端口的公共 IP,您可以使用中央服务器,每台计算机都会定期连接该服务器以提供/更新其 IP。
然后中央服务器记录这些“资产”及其IP。
如果您不想编写和管理此服务器,您可以使用您选择的 DynamicDns 服务。
如果您的计算机位于 NAT 网络上,则必须使用中央服务器,每台计算机都将连接到该服务器,然后等待来自该连接的命令。
抛开安全问题,最简单的方法是使用 ssh,因为您可以将本地端口绑定到远程连接(请参阅
man ssh
,选项:-L 或 -D)。在这两种情况下,请务必确保客户端连接中央服务器并与之通信的方式的安全。
案例 A 很简单:正常使用 API,因为您拥有远程 IP/dns。
情况 B 因为您无法打开端口,所以您必须通过机器和中央服务器之间的隧道进行通信。