我正在寻找一种可以让我从中央服务器远程访问多个设备的解决方案。
这些设备预装了定制软件,但其网络状况未知,并且可能处于 3G 或 NAT 限制的 WiFi 环境中。
我首先想到的是使用反向 SSH 连接(通过 systemd 服务使用 ssh -R,或使用 autoSSH),尽管这意味着每个设备都有一个重定向端口。这实际上不是问题,而且我怀疑同时运行的设备不会超过 50K 个。
但是,为了以防万一,我正在寻找一种更易于管理且更具可扩展性的基础设施。我尝试研究其他问题,但找不到这个问题的答案。我看到有些人建议使用 VPN 隧道,将每个设备连接到中央设备。如果有人能解释一下它的工作原理就太好了,我真的不明白它是如何工作的,我在哪里设置每个设备的 ID/名称,以及一旦一切运行,我如何启动远程连接。
也欢迎任何其他方法或解决方案。
注 1:我认为一个接一个的远程访问就足够了,但如果所有可用的(以便向一组设备发送命令)也会有所帮助(但如果您心中只有一个解决方案,请不要停止回答)。
注 2:系统基于 Debian。(Raspbian。如果需要,也可以是 Ubuntu)
答案1
随着“物联网”这个时髦的流行词的出现,我们经常会遇到这类问题。我将添加一个较长的答案并提出一些考虑,并邀请其他人进行编辑和改进。
放弃交互式访问的想法到任何特定设备。您需要在设备上安装一个代理,该代理从管理服务器获取指令/命令,并发回其健康状况和任何结果/收集的数据。现场操作员确认设备确实在与您的管理服务器通信或出现错误会很有用。
您的设备需要打电话回家。
您需要让设备连接到管理服务器,而不是反过来。由于许多消费者和企业仍在使用 IPv4,因此仍存在大量 NAT,从设备到服务器建立连接比反过来(需要设置端口转发等)要顺利得多。大多数消费者/小型企业
防火墙的默认行为是允许所有传出流量,而由于这些流量通常不受真正管理,这意味着无需进一步设置即可直接拨打电话。
甚至许多托管网络也更愿意允许传出连接而不是打开传入连接。该协议需要HTTP更确切地说HTTPS。它通过正常的 TCP/IP 运行,即使不允许直接访问互联网,您的设备仍然可以轻松配置为使用网络代理。
您的管理服务器需要监听默认 Web 端口即 80 (HTTP) 和/或 443 (HTTPS)。跟随大军有很多话要说...
你的设备需要能够自行配置DHCP但您还需要向现场操作员提供一种设置静态 IP 配置和/或代理服务器的方法。
你的设备需要支持IPv6 和 IPv4。
自动注册- 如果设备数量较多,您可能不想在部署之前(手动)在管理服务器上注册每个设备,而是应该让设备在开机和连接时自行注册。
代理不应该按照固定的时间表运行,您不希望数千个代理同时打电话回家。
你可能想看看现有的配置管理工具它已经提供了很多这样的功能。
如果你决定自己动手,可以考虑利用以下框架:Azure IoT 网关 SDK,Google 计算物联网或者AWS IoT