Как я могу установить статический IP на моем устройстве IoT и иметь, если работа в любой сети автоматически
Я создаю домашнее IoT-устройство и хочу, чтобы его можно было отправить любому, кто ранее установил статический IP-адрес, и все, что ему нужно было бы сделать, это подключиться к Интернету и быть готовым к работе. Я буду запускать сервер для локального мониторинга каждого робота, поэтому я решил установить статический IP-адрес для каждого RPi, и после доставки клиенту им просто нужно будет установить свой RPi в своей сети и выполнить переадресацию портов. Затем они загружали приложение и давали команды роботу (я использую их регистрационную информацию, чтобы узнать, какой RPi нужно контролировать). Проблема в том, что если IP-адрес изменится, я потеряю связь с этим удаленным устройством. Другими словами, есть ли способ подключить мой локальный сервер ко всем удаленным устройствам?
У меня очень ограниченный опыт работы с сетями, я взломал свой путь и, возможно, я смотрю на это неправильно. Любая помощь с благодарностью!
3 ответа
Вам необходимо реализовать схему, в которой ваши RPi являются клиентами вашего сервера.
Что вам действительно нужно - это либо статический IP в вашем доме / офисе, либо любой дешевый VPS или DDNS (сервис динамического DNS). Таким образом, когда вы отправляете RPi своим клиентам, настройте их все на автоматическую настройку IP через DHCP и добавьте для запуска команду, которая подключается к вашему серверу через SSH (предпочтительно с использованием аутентификации с открытым ключом) с настройкой обратного SSH. Таким образом, вы можете подключиться к любому вашему RPis через обратный порт на вашем собственном сервере. Независимо от того, где находятся ваши RPi, вы всегда сможете получить к ним доступ (конечно, если они не находятся за профессиональными брандмауэрами, которые ограничивают исходящие соединения из локальной сети без аутентификации.)
Вот обновление на случай, если у кого-то возникнет такая же проблема. В соответствии с рекомендациями 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})
})
}
Внешний IPv4 домашней сети находится под контролем их интернет-провайдера и может измениться в любое время, если он динамический, каковым является большинство жилых интернет-соединений.
Существует несколько поставщиков "Динамического DNS" (например, NoIP), которые позволят вам создать учетную запись, выбрать имя домена DNS из списка, а затем разрешить "Динамическому клиенту обновления" подключаться к нему и обновлять запись DNS., Ваше устройство IoT должно было бы запустить этот клиент.
Эти провайдеры обычно имеют бесплатный уровень, предлагающий одно или два имени бесплатно, требуя от вас платить, если вы хотите больше имен. Честно говоря, это не очень масштабируемо для более чем нескольких устройств.
Если это большое развертывание устройств, то, если вы хотите, чтобы ваши устройства действительно работали по принципу "включай и работай", правильнее всего было бы спроектировать свои устройства таким образом, чтобы они инициировали подключение к центральному серверу, а не полагались на сервер, подключающийся к ним, и переместите свой сервер на нерезидентную службу хостинга или облачный провайдер VPS, например Amazon, Azure и т. д.