如何在我的 IoT 设备上设置静态 IP,并让其在任何网络上自动工作

如何在我的 IoT 设备上设置静态 IP,并让其在任何网络上自动工作

我正在构建一个家用 IoT 设备,我希望能够将此设备发送给任何之前设置过静态 IP 的人,他们所要做的就是连接到互联网,然后就可以开始使用了。我将在本地运行一个服务器来监控每个机器人,因此我认为我会在每个 RPi 上设置一个静态 IP,一旦交付给客户,他们只需将他们的 RPi 连接到他们的网络上并进行一些端口转发即可。然后他们会下载应用程序并向机器人发出命令(我正在使用他们的登录信息来了解要控制哪个 RPi)。问题是,如果 IP 确实发生变化,我将失去与该远程设备的通信。换句话说,有没有办法让我的本地服务器连接到所有远程设备?

我对网络的经验非常有限,我正在尝试破解它,但我可能以错误的方式看待它。任何帮助都非常感谢!

答案1

您需要实现一种模式,让您的 RPi 成为服务器的客户端。
您真正需要的是家庭/企业中的静态 IP 或任何廉价的 VPS 或 DDNS(动态 DNS 服务)。这样,当您将 RPi 发送给客户端时,将它们全部设置为通过 DHCP 自动设置 IP,并添加启动命令,通过 SSH(最好使用公钥身份验证)连接到您的服务器,并启用反向 SSH 设置。这样,您就可以在自己的服务器上通过反向端口连接到任何 RPi。无论您的 RPi 位于何处,您始终都可以访问它们(当然,如果它们没有位于专业防火墙后面,这些防火墙会限制未经身份验证的 LAN 传出连接。)

答案2

家庭网络的外部 IPv4 由其 ISP 控制,如果是动态的,则可以随时更改,大多数住宅互联网连接都是如此。

有多家“动态 DNS”提供商(例如 NoIP),它们允许您创建帐户,从列表中选择一个 DNS 域名,然后允许“动态更新客户端”连接到该域名并更新 DNS 记录。您的 IoT 设备必须运行此客户端。

这些提供商通常有一个免费套餐,免费提供一两个名称,如果您想要更多名称则需要付费。老实说,对于多台设备来说,这种套餐的可扩展性不是很好。

如果这是大规模的设备部署,那么如果您希望您的设备“即插即用”,那么正确的做法是设计您的设备,使它们启动与中央服务器的连接,而不是依赖于连接到它们的服务器,并将您的服务器移动到非居民托管服务或 VPS 云提供商,如亚马逊、Azure 等。

答案3

以下是更新,以防有人遇到同样的问题。根据建议,RPi 配置为客户端。我最终使用了节点包知识产权更新数据库中每个机器人的 IP。然后每个客户端从数据库中提取 IP 进行连接。

以下是我的代码片段。服务器启动于引导

var ip = require('ip');
var mongo = require('mongodb')
var MongoClient = mongo.MongoClient

var url = 'your_url'
var name = "example"
function updateIP() { // update ip if need be
  var my_ip = ip.address()
  console.log(my_ip)
  MongoClient.connect(url, function(err, db){
    console.log(err)
    var robots = db.collection('robots')
    robots.findAndModify(
       {name: name},
       [['name', 1]],
       {$set: {ip: my_ip}},
       {update: true})
  })
}

相关内容