Почему Smart Plugs не требуют настройки переадресации портов на маршрутизаторе и как это сделать с помощью NodeMCU (ESP8266)

У меня есть плата NodeMCU (ESP8266), которую я использую для управления некоторыми устройствами через Интернет. Чтобы получить к нему доступ, мне нужно включить переадресацию портов на моем маршрутизаторе и установить порт вручную, как показано на рисунке ниже:

Но с помощью Smart Plugs (которые используют облачное приложение) мне не нужно ничего настраивать на своем маршрутизаторе. Мне нужно только ввести пароль Wi-Fi. Поэтому мой вопрос заключается в том, как получить доступ к Smart Plugs через маршрутизатор (почему им не нужна ручная настройка переадресации портов) и как применить это к моему NodeMCU, чтобы мне не приходилось настраивать переадресацию портов вручную.

, 👍3


1 ответ


Лучший ответ:

7

Переадресация портов необходима, чтобы позволить устройству за пределами вашего маршрутизатора получить доступ к устройству внутри маршрутизатора, выполняющему NAT (преобразование сетевых адресов).

Когда NodeMCU действует как простой сервер для ответа на запросы, он находится внутри вашей сети, поэтому требуется переадресация портов, чтобы ваш телефон или компьютер извне мог получить к нему доступ.

Однако для облачных «умных» устройств все по-другому. Интеллектуальное устройство открывает соединение с сервером (облаком) за пределами вашей сети. В этом случае маршрутизатор понимает, что между облачным сервером и вашим смарт-устройством создается новое двустороннее соединение.

Единственный канал связи с вашим смарт-устройством — это обмен данными между облачным сервером и смарт-устройством. Если у вас есть приложение на вашем мобильном устройстве или компьютере, это приложение или веб-сайт обращается только к облачному серверу, а затем передает инструкции на ваше интеллектуальное устройство. Обратное направление передачи информации о статусе со смарт-устройства в ваше приложение и т. д.

Для продолжения работы этих умных устройств используется инфраструктура их создателей. Между клиентом и устройством нет соединений LAN-to-LAN. Все идет через Интернет на удаленный облачный сервер и обратно.

Многие домашние маршрутизаторы поддерживают протокол uPNP, который позволяет устройству внутри сети запрашивать переадресацию портов самому себе. Некоторые маршрутизаторы требуют, чтобы это было явно включено, поскольку разрешение любому устройству открывать дыры в брандмауэре/маршрутизаторе представляет собой угрозу безопасности.

Чтобы ваше устройство NodeMCU могло это сделать, найдите библиотеки для ESP8266, реализующие uPNP. Я провел быстрый поиск и нашел https://github.com/ofekp/TinyUPnP, хотя не могу ручаться за его эффективность и безопасность.

,

Отличный ответ, спасибо за быстрый ответ., @Slaven Tojic

MQTT — еще один протокол, на который стоит обратить внимание. Он обычно используется в устройствах Интернета вещей (и поддерживаемых облачных платформах, таких как предложения Amazon/Azure IoT) для решения той же проблемы., @oznu

Еще один вопрос. Чтобы избежать переадресации портов, я создал веб-сайт, на котором пользователь устанавливает состояние устройства «ВКЛ» и «ВЫКЛ». Статус устройства затем сохраняется в базе данных MySQL. Затем устройства отправляют запрос GET к базе данных, получают статус устройства и включают или выключают устройство. База данных запрашивается каждые 10 секунд для одного устройства. На ваш взгляд, практичен ли такой подход и сколько устройств может работать на одной базе данных. Извините, что беспокою вас., @Slaven Tojic

Практично ли это, зависит от доступных ресурсов: вашей базы данных и сервера, необходимой пропускной способности и т. д., @jose can u c