Я создаю домашнее устройство IoT и хочу, чтобы его можно было доставить любому, кто ранее установил статический IP-адрес, и все, что ему нужно было бы сделать, это подключиться к Интернету и быть готовым к работе. Я буду запускать сервер для локального мониторинга каждого робота, поэтому я решил установить статический IP-адрес для каждого RPi, и после доставки клиенту им просто нужно будет установить свой RPi в своей сети и выполнить переадресацию портов. Затем они загружали приложение и давали команды роботу (я использую их регистрационную информацию, чтобы узнать, какой RPi нужно контролировать). Проблема в том, что если IP-адрес изменится, я потеряю связь с этим удаленным устройством. Другими словами, есть ли способ подключить мой локальный сервер ко всем удаленным устройствам?

У меня очень ограниченный опыт работы с сетями, я взломал свой путь и, возможно, я смотрю на это неправильно. Любая помощь очень ценится!

3 ответа3

1

Вам необходимо реализовать схему, в которой ваши RPi являются клиентами вашего сервера.
Что вам действительно нужно - это либо статический IP в вашем доме / офисе, либо любой дешевый VPS или DDNS(сервис динамического DNS). Таким образом, когда вы отправляете RPi своим клиентам, настройте их все на автоматическую настройку IP через DHCP и добавьте для запуска команду, которая подключается к вашему серверу через SSH (предпочтительно с использованием аутентификации с открытым ключом) с настройкой обратного SSH. Таким образом, вы можете подключиться к любому вашему RPis через обратный порт на вашем собственном сервере. Независимо от того, где находятся ваши RPi, вы всегда сможете получить к ним доступ (конечно, если они не находятся за профессиональными брандмауэрами, которые ограничивают исходящие соединения из локальной сети без аутентификации.)

0

Вот обновление на случай, если у кого-то возникнет такая же проблема. В соответствии с рекомендациями RPis настраиваются как клиенты. В итоге я использовал пакет узла ip для обновления 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})
  })
}
0

Внешний IPv4 домашней сети находится под контролем их интернет-провайдера и может измениться в любое время, если он динамический, каковым является большинство жилых интернет-соединений.

Существует несколько поставщиков "Динамического DNS" (например, NoIP), которые позволят вам создать учетную запись, выбрать имя домена DNS из списка, а затем разрешить "Динамическому клиенту обновления" подключаться к нему и обновлять запись DNS. , Ваше устройство IoT должно было бы запустить этот клиент.

У этих провайдеров обычно есть бесплатный уровень, предлагающий одно или два имени бесплатно, требуя от вас платить, если вы хотите больше имен. Честно говоря, это не очень масштабируемо для более чем нескольких устройств.

Если это большое развертывание устройств, то, если вы хотите, чтобы ваши устройства действительно работали по принципу "включай и работай", правильнее всего было бы спроектировать свои устройства таким образом, чтобы они инициировали подключение к центральному серверу, а не полагались на сервер, подключающийся к ним, и перенесите свой сервер на нерезидентный хостинг или облачный провайдер VPS, например Amazon, Azure и т. д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .