linux - 通过蜂窝网络 Webify 嵌入式基于 linux 的 Controller

标签 linux networking embedded cellular-network

在接下来的项目中需要一个基本的方向。

有一个基于 linux 的 Controller 在做一些工业控制的事情。 该盒子配备了蜂窝调制解调器,能够通过蜂窝运营商上网。使用蜂窝通信是因为 Controller 大多安装在没有电缆或短距离 radio 可用的地方。太阳通常不会照耀的地方:)

任务是允许互联网客户端直接连接到盒子以进行一些基本的控制/监控。问题在于连通性——客户将如何发现盒子? - 我想让盒子充当服务器(如果可能的话)。假设蜂窝运营商允许盒子上网并不一定意味着盒子将获得公共(public) IP,以便任何人都可以连接。据我了解,蜂窝网络充当内部工作人员的网关,并且不可能从外部联系该网络中的某个人。我错了吗?我们正在寻找通用解决方案,而不是围绕特定蜂窝提供商的解决方案。 Controller 安装在不同的国家,我们需要找到标准方式来“网络化”它。

盒子里的软件(和硬件)是我们的,我们基本上可以做任何事情,但我正在寻找正确的方式来做,以避免以后与不同的供应商发生意外。顺便说一句,解决方案不一定是技术性的,也许可以为每个盒子购买永久 IP,或设置 VPN。我应该采用哪种方式?要问什么问题?

欢迎您的想法!

最佳答案

你对问题的总结基本正确。我已经实现了几个执行此操作的系统,而且成功的几率很高。

您解决此问题的方式将取决于您希望单个用户与之交互的远程单元的数量。如果每个用户只处理一两个设备,那么在远程设备上实现 Web 服务器是合理的。如果每个用户处理许多设备,请考虑尽可能集中管理。我已经使用 Zenoss 实现了这个用于数据记录和自定义控制服务器。

如果网络服务器位于远程设备上,您可以购买具有静态 IP 的 SIM 卡,或使用代理服务器。除非设备数量很少,否则我建议设置代理服务器。

SIM 卡有以下三种选择:

  • 在公共(public)互联网上拥有地址的静态 IP 会很昂贵,而且与每个国家/地区的每个供应商协商交易也会令人厌烦。不需要代理服务器。
  • 私有(private) APN SIM 将为您提供静态地址选项,但在私有(private)地址范围内。仍然需要与移动网络进行协商,您将需要一个代理服务器位于公共(public)互联网和私有(private)地址范围之间,
  • 标准数据 SIM 卡将通过 NAT 连接到互联网。您可以通过打开到您的服务器的 VPN 连接(我们使用 openvpn)来使用这些来托管您的服务。您现在可以通过连接到同一 VPN 或通过代理服务器直接访问这些设备。

如果您使用 openvpn,这里还有一些提示:

  • 为每个单元提供一个公共(public)序列号和一个私钥。将这些存储在设备的固件和中央数据库中。将公共(public)序列号贴在设备外部。您可以使用 openvpn 登录脚本来确保特定单元始终出现在正确的 IP 地址上,从而使代理配置保持静态。
  • 您可以通过调整其保持事件行为以及重新协商的频率来控制 openvpn 的带宽使用。在大规模部署之前对此进行衡量和调整。
  • 移动网络中的 NAT 超时通常在 5 到 15 分钟之间。设备必须经常向服务器发送数据包以保持 NAT 事件。
  • 便宜的 SIM 交易可能仅限于端口有限的网络。

其他提示:

  • GPRS 调制解调器固件可能(很少)在内部崩溃。如果您的硬件支持,请提供能够重启调制解调器的软件。
  • 在发送国际货件之前,先在您所在国家/地区信号覆盖较差的地区测试您的邮箱。

关于linux - 通过蜂窝网络 Webify 嵌入式基于 linux 的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047847/

相关文章:

java - 在Linux服务器上启动netty应用程序

php - 无法安装 php 5.6 mssql - Centos 7

c++ - 如何在嵌入式平台中管理不同 Pin-Out 板的代码以实现更好的 HAL 管理?

c++ - mmap 没有按预期工作(返回随机 0xdeadbeef)

haskell - 嵌入式环境中的函数式编程有什么特殊的挑战吗?

ruby-on-rails - 在 ubuntu 上以 root 身份运行的延迟作业进程

linux - 查找没有扩展名的可执行文件?

c++ - QUdpSocket : No such file or directory

c++ - 在 ICMP 报头校验和计算中?

azure - 从本地访问 Azure 专用终结点