Как я могу установить статический IP-адрес на моем устройстве IoT и иметь его, если он работает в любой сети автоматически

1022
Melomaniac

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

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

0
когда вы смотрите на то есть смартфоны - серверы не подключаются к ним, серверы служат. это смартфоны как клиенты, подключающиеся к серверам. я знаю, это не очевидно в начале :) то же самое относится и к вирусам и любому другому сервису. это работает, и клиентам не нужно настраивать переадресацию портов (и в случае, если интернет-провайдер предоставляет только локальный IP-адрес, ваши клиенты должны будут запросить у интернет-провайдера переадресацию портов, что проблематично). rsm 7 лет назад 0
To add the the comment from @rsm: In addition its more secure, because the device does not have any port opened up to the Internet, and therefore no one can open a connection to the device and exploit vulnerabilities. Stefan Vaillant 7 лет назад 0

3 ответа на вопрос

1
Alex

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

Гораздо меньше работы (для ваших клиентов), если устройство настраивается с помощью DHCP и подключается к Интернет-серверу, чем если клиент должен вручную настроить переадресацию портов! CBHacking 7 лет назад 0
@CBHacking То, что я на самом деле имел в виду - DHCP на RPi (устройства, которые должны быть отправлены на территорию клиента). Если OP установит статический IP-адрес на своем сервере или будет использовать DDNS, тогда любые удаленные устройства смогут найти его дом, когда они родились, вместо того, чтобы просить клиентов сделать сложную сеть Alex 7 лет назад 0
Да, извините, я имел в виду, что в качестве комментария по согласованию с вами, отметив, что это не только лучший технический дизайн, но и легче для пользователей ОП. CBHacking 7 лет назад 0
@CBHacking Ооо, тогда я тоже извиняюсь, что не понял Alex 7 лет назад 0
Спасибо, ребята, за отзывы, мне нужно будет провести некоторое исследование и обязательно обновлю этот пост. Мне сказали, чтобы посмотреть на Toredo, что я и делаю сейчас, но DHCP на RPis является следующим в списке. Melomaniac 7 лет назад 0
Реле @Melomaniac Teredo на сторонних шлюзах (что означает, что он подвержен атаке «человек-посредник»), DNS не будет его использовать, производительность загрузки ужасна и накладывает накладные расходы, кроме того, что она инкапсулирована в IPv4, поэтому вам все еще нужен юридический адрес IPv4 для быть в состоянии использовать IPv6 поверх IPv4. Для сравнения, предлагаемое мной решение не требует статического IP-адреса на клиентах, они подключаются к вашему серверу, и вы можете получить доступ ко всем из них по обратному порту вашего сервера. Alex 7 лет назад 0
0
LawrenceC

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

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

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

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

Спасибо @LawrenceC за совет, я получаю несколько разных мнений. Я дам вам знать, если я в конечном итоге воспользуюсь вашим решением (которое включает стороннее программное обеспечение / услуги), но я бы предпочел этого избежать, если это возможно Melomaniac 7 лет назад 0
0
Melomaniac

Вот обновление на случай, если у кого-то возникнет такая же проблема. В соответствии с рекомендациями 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', 1]], {$set: }, ) }) } 

Похожие вопросы