Достучаться к esp32 (находящейся за роутером) - из внешнего интернета
- Войдите на сайт для отправки комментариев
Всем доброго!
Знаю, вопрос уже жеванный -пережеванный :-).
Но вопрос не в этом. Несколько иной будет вопрос. Я уже знаю, что для того, чтобы достучаться извне-к ардуине ethernet (или esp32-в моем конкретном случае), находящейся за роутером-нужен проброс портов, настройка DDNS, регистрация на noip.com.
У меня же сейчас, суть сервиса заключается в том, что (пошагово):
1) esp32 подключается к wifi сети роутера;
2) при каждом подключении - esp32 узнает и передает свой текущий ip адрес на удаленный веб сервер -во внешнем интернете.
САМ ВОПРОС (кому то покажется глупым- просто я так не делал, поэтому спрашиваю): может ли теперь (зная текущий ip адрес, внешний веб сервер - достучаться до esp32 ? Или всё равно нет?
Всё равно нет, потому что IP у ESP - во внутренней сети 192.168.* Без NAT не обойтись.
Ок, я тоже так думал-сейчас глянул свой внешний ip- он 37.... что то там. А внутренний как раз 192.168.*
Ок, тогда несколько перефразирую вопрос: у меня этот сервис будут юзать всякие люди, не сильно сведущие в таких делах. То есть: настроить DDNS, NAT и т.д. - это такие страшные слова для них -что дальше можно не продолжать :-)))))
САМ ВОПРОС: есть ли некий простой автоматический способ дать возможность достучаться к любой esp32, находящейся за роутером-из внешнего интернета- без настройки всяких сложных вещей? :-)
P.S. Будут пользовать условно "домохозяйки". Поэтому все эти страшные слова-темный лес для них. Я то-настрою. Они- гарантированно нет.
Единственное вменяемое решение для домохозяек - сделать сервер в облаке, через который будет проходить вся связь.
Ну либо на сервере постоянно обновляется некий файлик -минимального веса, а esp32 постоянно запрашивает этот файлик. Скажем раз в сколько миллисекунд.. Или базу данных некую. И если есть изменение-исполняет.
Тоже вполне по-моему. Временной лаг может и будет-но не сильный.
Тогда даже не надо достукиваться до esp32. Она сама всё что надо- с сервера забирает...
Какой файлик, господи. Стандартный сервер сообщений, поддерживает постоянное соедниение, никакой задержки. Тот же пресловутый mqtt.
Ну вот. И это будет самое простое. Зачем стучать с той стороны-если можно с этой :-)
Интерес энтомологический: а два доллара в месяц за VPS в Амстердаме или Франкфурте, который решит все подобные траблы, это большая брешь в бюджете?
Поясните свою мысль. И причем тут VPS? Сервис то "железный". То бишь вебсайт+железные устройства у пользователей.
Поясните свою мысль. И причем тут VPS? Сервис то "железный". То бишь вебсайт+железные устройства у пользователей.
????? Тугой?
VPN туннель от твоего роутера на VPS, например на OpenVPN. Проброс порта с реального IP на VPS-ке на внутренний IP твоего ESP32. Я где-то полгода назад тут это показывал. Но нормальному админу показывать не надо, это с закрытыми глазами и после поллитра текилы строится за полчаса.
Для начала: я вам не тыкал. Это раз.
Второе-не надо пытаться грубить и показать что дох..я умный. Есть что сказать по делу, спокойно-говорим. Нет-идем мимо.
Я нигде словом не обмолвился, что я "супер-пупер-админ-решаю-всё-за-2-секунды". Я-спросил совета.
Для начала: я вам не тыкал. Это раз.
Второе-не надо пытаться грубить и показать что дох..я умный. Есть что сказать по делу, спокойно-говорим. Нет-идем мимо.
Я нигде словом не обмолвился, что я "супер-пупер-админ-решаю-всё-за-2-секунды". Я-спросил совета.
Бате своему советы давай, если знаком, это раз.
Два - в инете принято обращение на "ты", а "вы" это заявка на срач. Это сосунки многие уже не помнят, но динозавры, как я, еще помнят.
Три - шолпты... Это тебе нужен ответ, а не мне. Хочешь слушай, не хочешь - пшел вон отсюда.
Я твоих советов, "динозавр" сраный вроде как не спрашивал :-) Это ты влез в чужую тему, устроил срач на пустом месте (на вежливое обращение "ВЫ" -смею заметить!) . Что говорит о тебе многое. Не всегда ум приходит с годами-иногда годы приходят одни :-))))))))
Вобщем, проходи мимо человек, не загораживай свет :-)
Я твоих советов, "динозавр" сраный вроде как не спрашивал :-)
Вот как раз брехня. Их и спрашивал. Так что мало что дурак, ещё и брехун!
Тема собственностью не является.
каждый волен писать что считает необходимым.
если написанное неприемлемо приходит модер и разбирается
достучаться инициативно не может, пакет от сервера придет только как ответ на пакет изнутри сети
то, что Вам надо называется белый IP и проброс порта. Гуголь в помощь
ТС загуглить VPN не судьба ?
VPN сложно для домохозяек, не годится.
VPN сложно для домохозяек, не годится.
А ты так понял, что у ТС и устройства у домохозяек и фронт-енд? Я то подумал, что устройства в известном месте. Может я не прав.
Имхо самое простое, как правильно предложит rkit - MQTT в облаке, и пздц головнякам. И пущай обмениваются топиками, как хотят, не нужен внешний IP, достаточно только продумать уникальное именование каждой ESP в системе, чтобы это было именем клиента для MQTT - и всё, остальное работает уже и так, искаропки.
Уникально именовать можно, например, перед отдачей девайса клиенту, прописывая в память какой-нибудь GUID, сгенерённый той же виндой, или любым онлайн-сервисом генерации, коих как говна за баней.
В esp32 есть глобально уникальный MAC-адрес.
Кстати да (насчет MAC адреса)!
А в целом, в любом случае-всем спасибо за то, что нашли время зайти и отписаться! ;-)
Уже копаю плотно MQTT....
P.S. да, сервис железный - то есть: а) ручное управление по bluetooth со смартфона или б) есть сайт -с которого происходит удаленное управление железным устройством, если человек находится не дома(почему не напрямую со смартфона-этому есть свои резоны;-) )
Места расположения железных устройств заранее неизвестны, владельцы-условные "домохозяйки". Которые если на сайт зайти сумеют-и то спасибо...Настроить что то сложное-вообще никак им:-))))
Но arp не везде пролезает, чтобы работать по мас ам
если железка за файрволом, то она на маскарадинге и внешний клиент может обратиться внутрь за фв только имея внешний ip и протоптанный внутрь форвардинг.
кстати часто интернет юзеры имеют внешний адрес роутера из диапазона 10.0.0.0 и это означает, что они уже во внутренней подсети и тут форвардинг должен протаптывать провайдер
тут уже девайс сидит за двумя маскарадингами
Но arp не везде пролезает, чтобы работать по мас ам
Я так понимаю, что он говорил не о протоколе arp, а о способе раздобыть постоянно уникальное имя для девайса, -в рамках системы MQTT (то есть или придумывать постоянно самому, или взять готовый MAC-ничего не выдумывая).
Могу и ошибаться....
А бридж (или как там правильнее говорить) не подойдёт? Пусть роутер отдаст все права по авторизации esp32 и она получит внешний ip, правда такое решение возможно если интернет только для неё.
Но лично бы я, имея ввиду, что все равно используется какой-то ресурс в интернете (общий), использовал в качестве этого ресурса дешевую vps и поднял бы VPN на том же openVPN. Это проще и доступнее. Куда железку не принеси - она «понюхала интернет» и автоматом подняла соединение и, к примеру, оповестила что доступна.
Структуру нарисуйте, о которой гоаорите, с адресами и протоколами
Но лично бы я, имея ввиду, что все равно используется какой-то ресурс в интернете (общий), использовал в качестве этого ресурса дешевую vps и поднял бы VPN на том же openVPN. Это проще и доступнее. Куда железку не принеси - она «понюхала интернет» и автоматом подняла соединение и, к примеру, оповестила что доступна.
То есть, юзеру не потребуется пробрасывать порты на роутере?
Просто повторюсь-это будет домохозяйка-которая не сможет:-)
То есть, юзеру не потребуется пробрасывать порты на роутере?
В реализации с VPN - ничего делать не придется, только "дать доступ в интернет".
Структуру нарисуйте, о которой гоаорите, с адресами и протоколами
Это вопрос мне?
То есть, юзеру не потребуется пробрасывать порты на роутере?
В реализации с VPN - ничего делать не придется, только "дать доступ в интернет".
ЭЭм, а VPN клиент сам по себе волшебно где-то поднимется?
Всем доброго!
В общем пытаюсь поднять MQTT подключение.
Накопал мануал-пытаюсь на его основе сотворить нечто свое :-)))
Итак мануал: все ок- но он для Esp 8266:https://habr.com/ru/post/393277/ . Пытаюсь переделать под ESp32.
С тех времен, когда был написан мануал - бесплатные тарифы www.cloudmqtt.com уже закончились. Поэтому накопал такой сервер:
https://mqtt.4api.ru/
В принципе не особо сложно. Но! Так как я изучаю java- а это C++ (насколько мне известно), возникла ошибка -видимо скетч был изначально с ошибкой. Но как исправить не знаю, т.к. мне такая структура незнакома. Любому совету буду благодарен.
Ругается на строку 030(эта конструкция мне незнакома) и на строку 046 (это знакомо-но пока не пойму, почему).
Сам скетч(если получится у вас запустить и протестить его на этом бесплатном MQTT, было бы вообще прекрасно. Но -не наглею-даже совету буду рад:-):
Ругаеца-то какими словами?
пропробуй так
void
callback(
const
MQTT::Publish &pub)
Ругаеца-то какими словами?
пропробуй так
void
callback(
const
MQTT::Publish &pub)
Выглядит это так(поправил):
А потом закомментил этот кусок кода, глянуть, где еще есть косяки(то что я закомментил, не должно вызвать ошибку вроде) и вылезло вот это еще:
Два сообщения запостилось-удалил одно...
скорее всего какой то заголовочный файл в котором обьявлен тип MQTT не подключен. Ищи, где обьявляется этот тип и подключай #include-ом
Ок, исправил.
вопщем, вот это
ESP32_MQTT_2:30:21: error:
'MQTT'
does not name a type
говорит о том, что в доступных программе файлах нигде не описан тип MQTT. Пока не найдешь заголовочник, где он описан, и не подключишь его, дальше тебя не пустют
Ок, буду дальше копать...
Всё, удалось поднять MQTT!
Долго копался с кодом, который я постил выше (где пытался переделать код от Esp 8266 - в ESP32).
В конце концов надоели мне все эти глюки-и пошел гуглить. В рунете ничего сносного не нашел-а в буржунете моментально!
Короче говоря, если кто в будущем будет копать эту же тему, вот тут лежит полностью рабочий код: https://iotdesignpro.com/projects/how-to-connect-esp32-mqtt-broker
Все сделал по мануалу как там и без проблем настроилось подключение и сообщение в esp32 с внешнего интернета проходят без проблем!
Повторюсь для тех, кому лень лопатить все, что выше: esp32 подключена по wifi -к сети роутера. И с помощью mqtt - удалось получить соединение с ней, без всяких пробросов портов, DDNS и.т.д.
Как сказал бы чукча "моя счастлива" :-))))
Всем спасибо!
Как сказал бы чукча "моя счастлива" :-))))
Ну а тебе что говорили? ;) Всё правильно сделал ;)
Всем доброго, еще раз!
Сейчас ломаю голову вот над чем-может кто подскажет чего...
Хочу установить на вебсервер -mqtt брокер. Под вебсервером имеется в виду купленный хостинг. По ряду причин, не хочу пользоваться существующими платными/бесплатными mqtt брокерами - нужно запустить свой, на своем хостинге.
Вот и думаю...Весь интернет полон историй :-) - как установить на ubuntu, debian; на raspberri и т.д. А как поставить это добро -на ПОКУПНОЙ ХОСТИНГ-вообще в упор не вижу.
Может конечно чего не знаю или не понимаю... В общем, как всегда- любому совету буду рад...
P.S. пытался с Mosquitto -вот отсюда: https://mosquitto.org/download/
Установить можно на VPS/VDS/etc.
При покупке http/email/dns хостинга ничего кроме оплаченного использовать не получится.
Спасибо! Подозревал нечто такое...
Заодно спрошу еще такую штуку-может есть какое простое решение-если кто в курсе:
есть ли готовая некая система, которая позволяет создать mqtt брокер на vps, на котором могут регистрироваться чужие люди? Если с нуля писать -это понятно, можно реализовать что угодно. А есть ли готовые системы, которые позволяют это ?
Вкратце, для чего нужно: мои железки на базе esp32 будут находится у абсолютно разных людей. Хочу, чтобы при коннекте к домашней wifi- esp32 коннектилась к серверу mqtt, регилась автоматом на нем и для нее заводился там аккаунт(при коннекте передается ее MAC-адрес, как уникальное имя+ сгенеренный уникальный пароль. Все это происходит автоматом, "под капотом"-невидимо для пользователя).
Зачем это надо: убрать с пользователя чисто технический геморрой по максимуму. Приконнектился к wifi-и управляй esp32 с сайта. А как там и что происходит "под капотом"- до барабана... Вот так хочу выстроить. Программистов, чтобы собрать систему уже нашел. Только вот думаю, может готовое есть?
Интересует именно серверная часть для vps. Насчет скетча для esp32- там все прозрачно и понятно.
Что мешает на сервере поднять простенький скрипт, который по переданным данным будет дёргать mosquitto_passwd и возвращать ESP данные для авторизации в брокере? Заодно - можно миррорить данные юзеров в любую БД, тот же мускуль.
Короче: https://mosquitto.org/man/mosquitto_passwd-1.html - ну и вообще весь man по mosquitto смотреть, всё решаемо.
Может было уже: https://github.com/plapointe6/EspMQTTClient
самый простой способ решения это
1. на роутере поднимаем DDNS (все равно какой, главное что бы он был)
2. на роутере делаем портмапинг, например такой 191.168.1.1:32280 (роутер) ---> 191.168.1.99:80 (твое устройство)
3. теперь когда ты из вне стучишся по своему IP (полученному с DDNS) по порту 32280 ты попадаешь не на роутер а на свое устройство
но есть 2 минуса
1. трафик не шифруется, может любой админ твоего провайдера его засниферить и получить доступ...
2. можно обрушить твое устройство посылкой 1000000 пакетов (ddos атака)
Спасибо! Проблема давно решена :-). Работает esp-шка через публичный MQTT брокер и не кашляет. Это не умный дом-а посему на приватность/вероятность взлома вообще наплевать.