Официальный сайт компании Arduino по адресу arduino.cc
Проброс портов не работает-но причина в библиотеке кода (видимо)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Всем доброго, друзья!
В общем такая история: запилил таки машинку на esp32- с управлением через вебсокеты. Все ок-когда в локальной сети. Стоит только обратиться извне сети-сразу беда. Но не та, что все подумали ("да пробрось ты порты на роутере и всё ок будет").
Рассказываю: чтобы машинка была доступна из внешнего интернета- пробросил порты. Все ок. Вопросов нет.
Машинка снаружи видится, все отлично. НО! Ничего не работает! А в локальной сети-работает.
Ломал голову и так и сяк.... Беда видимо в том, что:
а) роутер(TP-Link TL-WR741N) категорически не разрешает пробросить порт 80. Вот просто категорически. Менял порт управления веб интерфейса роутера (как сказано в куче мануалов, скажем по умолчанию 80, я ставил 8080, 85 и т.д.-разные). Все равно не дает. Ок, попробовал зайти с другой стороны -пункт "б".
б) так как я использую вебсокеты (чтобы был динамичным пульт управления машинки-на базе андроид смартфона: нажал кнопку-едет, отпустил-не едет),- то воспользовался библиотеками ESPAsyncWebServer.h и AsyncTCP.h.
Создание объекта вебсервера происходит так:
// Create AsyncWebServer object on port 80 AsyncWebServer server(80); AsyncWebSocket ws("/ws");
Подумалось, может в этом проблема-и попытался поменять порт. Сразу все уходит в ошибку и даже не грузится страница.
Бился, бился короче говоря-по разному.
Единственная надежда сейчас осталась: запустить точку доступа WiFi на смартфоне, приконнектить к нему esp32 и уже на смартфоне пробрасывать порты.Хотя это похоже еще более дохлая затея...
Вот такие дела. Если кто -что скажет умного :-), - буду рад!
Забыл дописать-как я и говорил, пульт управления машинкой (то бишь вебсервер на основе esp32) -отлично видится снаружи локальной сети, по адресу: внешний IP адрес: 85 (назначил 85 порт на наружние подключения. Если приходит обращение на этот порт, роутер пробрасывает его на внутренний 80).
Может я конечно некую глупость творю-не исключаю этого :-)))
Еще что скажу: чуток попозжа я прикручу mqtt -и все эти дурные проблемы уйдут. Но это позже....
Пока хотелось бы понять-почему оно не работает, но видится снаружи и как поправить?
а что мешает использовать на сервере 8080 и его наружу и пробросить?
Ваша беда в том, что вы выбрали асинхронные библиотеки. В результате ваши обработки, которые вы навешиваете на события (колбеки) работают в прерываниях. А это сами понимаете должно быть быстро и не загружать сильно стек. Скорее всего при работе через маршрутизатор или размер пакетов другой или они поступают с меньшей/большей скоростью. Признаком такой ситуации является - "Сразу все уходит в ошибку и даже не грузится страница."
На зарезервированный. То бишь: я выяснил MAC адрес своей esp32 и связал ее MAC с ip адресом (в моем случае, внутренний адрес от роутера выдан такой: 192.168.0.106) в настройках роутера.
То есть: теперь при любом коннекте esp32 к роутеру- он ей выдает этот ip.
Ну и опять же: все видится снаружи, то бишь всё вроде работает. Но через задницу :-))))
сразу в ошибку уходит.
сразу в ошибку уходит.
тем более
сразу в ошибку уходит.
тем более
Ага...Я просто почему спрашиваю: можно ли сие поправить "малой кровью" или основательно всё переделывать придется...Если основательно-то даже напрягаться не буду-сразу буду пилить на mqtt (делаю машинку с управлением со страницы вебсайта). Команды с сайта-уходят брокеру, а машинка уже забирает их оттуда.
P.S. робохоккей типа :-)
А зачем ты вообще полез менять порт на esp32? Проброс можно делать между разными портами.
Вполне возможно, что указанный Вами роутер не умеет пробрасывать тот протокол, по которому Вы общаетесь с машинкой. К тому же это не безопасно - пробрасывать во внутреннюю сеть что-то, что не имеет (как минимум) своей безопасности.
Более правильно (с моей точки зрения) - организовать на роутере vpn, подключаться к нему со смартфона и (фактически) работать как в локальной сети. И безопасно и геморроя меньше. MQTT вроде бы по такой же «схеме» работает.
Вполне возможно, что указанный Вами роутер не умеет пробрасывать тот протокол, по которому Вы общаетесь с машинкой.
Не умеет пробрасывать TCP? Бредовее-то ничего не мог придумать?
rkit, кроме tcp ничего не знаете? Сколько всего в tcp «завернуть» можно? Gre тот же (к впн относится), а что используется для управления в данном случае знаете?
Руко#опость тоже не исключена.
А прочитать вопрос внимательно мозгов не хватило? Даже в этом надо что-то выдумывать от себя?
А Вам лишь бы обосрать кого-то? Читал первый пост и вскользь последующие, потому и ответил как понял и посчитал нужным. Изложил своё видение, так сказать. Вам что-то в моем ответе не понравилось? Оппонируйте! Нет? Ну и зачем тогда этот трёп? Вы же даже не рядом с ТС, тоже только предполагать можете.... Или знаете все везде и всегда?! Тогда Вам тут не место - слишком просто.
Если прочитал и все равно сказал такое - значит никакого понятия не имеешь о теме разговора, и следовало промолчать. Свой совет я дал. Больше ничего сказать не могу. А когда я не знаю - я молчу. Надо же, как бывает.
А когда я не знаю - я молчу.
Вечеринка прохладных былин считается открытой!
А когда я не знаю - я молчу. Надо же, как бывает.
а если вы думаете что знаете а на самом деле не знаете , это считаеться что знаете или что не знаете ?
парадокс однако.
б) так как я использую вебсокеты (чтобы был динамичным пульт управления машинки-на базе андроид смартфона: нажал кнопку-едет, отпустил-не едет),- то воспользовался библиотеками ESPAsyncWebServer.h и AsyncTCP.h.
Создание объекта вебсервера происходит так:
Я не пользую ESPAsyncWebServer.h и AsyncTCP.h. Я имею свое, но порт вебсервера и порт вебсокета всегда разные. Вебсервера понятное дело 80, а вебсокет на любом свободном, реально 5000 прописан. Ну и проброс его на роутере настроить нужно. На esp8266 все работает и через локалку, и через инет, только через инет немного медленей. У клиента в JS так дето,
, ну ip свой, локальный или глобальный.
У меня на TL-WR741 два сервера httpd крутятся и еще некоторое количество р.л задач и всё пучком, правда под Open-WRT
У меня на TL-WR741 два сервера httpd крутятся и еще некоторое количество р.л задач и всё пучком, правда под Open-WRT
А вебсокет где здесь?
У меня на TL-WR741 два сервера httpd крутятся и еще некоторое количество р.л задач и всё пучком, правда под Open-WRT
А вебсокет где здесь?
некоторое количество радиолюбительских задач, то-есть аппаратных косяков в этом роутере нет
косяк то понятен, у него на 80 порту висит вэбморда роутера, и как это должно работать?
//аппаратных косяков в этом роутере нет
недотестирован значить .... та и причем тут "аппаратных" может программный косяк! А может и нет.
Ты ж его на вебсокет не проверял. А проблема у ТС именно с этим протоколом. Но я бы начал сразу с разнесения портов.
Ага...Я просто почему спрашиваю: можно ли сие поправить "малой кровью" или основательно всё переделывать придется...Если основательно-то даже напрягаться не буду-сразу буду пилить на mqtt (делаю машинку с управлением со страницы вебсайта). Команды с сайта-уходят брокеру, а машинка уже забирает их оттуда.
P.S. робохоккей типа :-)
Ну не знаю насколько быстро у вас получится работать с MQTT. А можно ли исправить, это вопрос отвечаемый только при наличии "кода в студию". Могу сказать, что у огромной массы людей асинхронный веб вызывает стойкую аллергию из-за невозможности принять файлы размера больше чем блок TCP. Еще раз повторю, все что вы пишете в обратных вызовах происходит в прерываниях. Это означает, что вы должны уметь писать для таких раскладов, понимать атомарность переменных, грамотно и выстраивать код, минимизируя время нахождения в прерывании. Я не знаю как это библиотека построена для одно ядерной 8266, но для есп32 это не самое удачное "изделие". Его нужно уметь готовить.
//аппаратных косяков в этом роутере нет
недотестирован значить .... та и причем тут "аппаратных" может программный косяк! А может и нет.
Ты ж его на вебсокет не проверял. А проблема у ТС именно с этим протоколом. Но я бы начал сразу с разнесения портов.
у меня там полноценный Linux - OpenWRT, использую и в хвост и в гриву, в частности прокидывается AX25 через TCP-IP, снаружи естественно, еще крутится небольшой сервер на lighttpd, уже лет 5 а то и более, ну и естественно конфигуртор на вэбморде, а на немного более мощном, еще и камера подцеплена, так что с сокетами на чипах атерос проблем нет
//аппаратных косяков в этом роутере нет
недотестирован значить .... та и причем тут "аппаратных" может программный косяк! А может и нет.
Ты ж его на вебсокет не проверял. А проблема у ТС именно с этим протоколом. Но я бы начал сразу с разнесения портов.
у меня там полноценный Linux - OpenWRT, использую и в хвост и в гриву, в частности прокидывается AX25 через TCP-IP, снаружи естественно, еще крутится небольшой сервер на lighttpd, уже лет 5 а то и более, ну и естественно конфигуртор на вэбморде, а на немного более мощном, еще и камера подцеплена, так что с сокетами на чипах атерос проблем нет
А у меня на кухне кран! Не тупи! Здесь не радиолюбители.
Просто ответь на вопрос, где здесь протокол вебсокет? Если нет - зачем ты мусоришь тут...
Да не мусорю я, у него дорога занята, 80 порт, транспорт, до разбора сокетов еще далеко, сначала IP через ТCP должны пройти
Да не мусорю я, у него дорога занята, 80 порт, транспорт, до разбора сокетов еще далеко, сначала IP через ТCP должны пройти
del
Ну , как правило , на внешнем интерфейсе доступ к веб морде закрыт, так что с высокой долей вероятности 80 порт там никто не слушает и он свободен.
Двоится.
Ну , как правило , на внешнем интерфейсе доступ к веб морде закрыт, так что с высокой долей вероятности 80 порт там никто не слушает и он свободен.
у тплинка точно открыт был, хотя могу и путать, давно перешивал, у ТС спросить, что открывается при заходе с внешней стороны
// Вот смотри, входящий пакет IP он не транзитный,.....
Рад что ты начинаешь понимать некоторые причины почему вебсокет не стоит вешать на 80-й. Почитай про протокол этот, там еще есть интересное. Непонятно, к чему был тот флуд про р.л. задачи, аппаратные проблемы, AX25 и пр. Ну да ладно, отдыхай..
Ну , как правило , на внешнем интерфейсе доступ к веб морде закрыт, так что с высокой долей вероятности 80 порт там никто не слушает и он свободен.
С большой долей вероятности 80 как раз на ту самую ESP перенаправлен. Ну если роутер удастся убедить ;) Для загрузки по http странички управления. Ну как бы это самое очевидное. Хотя бывает всякое, можно страничку брать и со стороннего сервера, а входящие на 80 попробовать для вебсокета оставить. Но стремно, так не делаю, не уверен что роутер вебсокет так пропустит, только пробовать.
у тплинка точно открыт был
Неверно. У тплинка по-умолчанию доступ к веб-морде извне точно закрыт. Открывать надо всегда вручную. И порт для веб-морды можно переназначить, необязательно 80 использовать.
Ну не знаю насколько быстро у вас получится работать с MQTT.
MQTT очень плохо себя показал на реалтайм-задачах. Отправил сообщение - от брокера есть подтверждение, а дошло ли до получателя - хз. Само по себе плохо, так еще и из-за этого имеет привычку захлебываться. Плюс порядок доставки не гарантирован.
Могу сказать, что у огромной массы людей асинхронный веб вызывает стойкую аллергию из-за невозможности принять файлы размера больше чем блок TCP.
Тоже какая-то дикая бредятина.
у тплинка точно открыт был
Неверно. У тплинка по-умолчанию доступ к веб-морде извне точно закрыт. Открывать надо всегда вручную. И порт для веб-морды можно переназначить, необязательно 80 использовать.
значит ошибаюсь )))
исходящие они будут уже транзитные, должны пролазить за NAT, видимо проблема во входящих...
WIFI в роутере пробрасывается через бридж к первому интерфейсу...что-то мне вообще не нравится идея использования 80 порта, надо с него уходить
[Тоже какая-то дикая бредятина.
Читай описание к библиотеке для ESP32. Смотри трабл тикеты. И не будешь оценивать скандачка. Бредятина, это твое ЧСВ. Будь любезен в мою сторону, в дальнейшем, не использовать оценочных суждений в унизительной форме. А то и я присоединюсь к группе не переваривающих тебя лиц.
Открыл тикеты - не увидел ничего такого. И без этого понятно, что этого быть не может принципиально. Если бы это было так, библиотека была бы просто бесполезна. А в моей практике она очень даже полезная, и прекрасно работает на многих мегабайтах. Опять то же самое - совершенно не понимаешь о чем говоришь.
Открыл тикеты - не увидел ничего такого. И без этого понятно, что этого быть не может принципиально. Если бы это было так, библиотека была бы просто бесполезна. А в моей практике она очень даже полезная, и прекрасно работает на многих мегабайтах. Опять то же самое - совершенно не понимаешь о чем говоришь.
Открою для тебя. https://github.com/me-no-dev/ESPAsyncWebServer/issues ЧИТАЙ ! А потом будешь свою бредятину нести.
Открыл тикеты - не увидел ничего такого. И без этого понятно, что этого быть не может принципиально. Если бы это было так, библиотека была бы просто бесполезна. А в моей практике она очень даже полезная, и прекрасно работает на многих мегабайтах. Опять то же самое - совершенно не понимаешь о чем говоришь.
Открою для тебя. https://github.com/me-no-dev/ESPAsyncWebServer/issues ЧИТАЙ ! А потом будешь свою бредятину нести.
А причем тут кривая либа тупого автора. Асинхронный веб вообще и вебсокет, в часности ,не на ней держится. Я себе реализовал, никаких проблем с большими файлами и близко нет.
Если уж ты действительно щупал ESPAsyncWebServer и убедился что он дерьмо - ну так и запишем. А rkit, вон совладал и доволен... Может умеет, может задача на которой работает, может еще чего... И у ТС в локалке все пучком.
СофтСериал тоже не либка - кусок дерьма, но это не означает что UART отстой. Так ведь.
Проблема с качеством ардуиновых либок давно всем известна.
А что касается управления реалтаймовыми поделками из броузера - так близко с WebSocket никакой mqtt просто никогда стоять не будет. Тут практически безальтеративно.
А причем тут кривая либа тупого автора. Асинхронный веб вообще и вебсокет, в часности ,не на ней держится. Я себе реализовал, никаких проблем с большими файлами и близко нет.
Если уж ты действительно щупал ESPAsyncWebServer и убедился что он дерьмо - ну так и запишем. А rkit, вон совладал и доволен... Может умеет, может задача на которой работает, может еще чего... И у ТС в локалке все пучком.
СофтСериал тоже не либка - кусок дерьма, но это не означает что UART отстой. Так ведь.
Проблема с качеством ардуиновых либок давно всем известна.
А что касается управления реалтаймовыми поделками из броузера - так близко с WebSocket никакой mqtt просто никогда стоять не будет. Тут практически безальтеративно.
Ты читать не умеешь ? Где я написал, что не доволен !? Не нужно читать между строк. У меня все отлично работает, я просто рассказал ТСу, что это не простая библиотека, а на двухядерной есп ее нужно уметь использовать.
Так и запишем Logik читать не умеет !
Кстати ты смысл своего первого предложения на русский не переведешь ? Что ты хотел сказать ? Что ТС не использует , как ты выразился "кривую либу тупого автора" ? Или что ? Так , на всякий случай, я говорил именно о библиотеке, а не о том , что тебе взбрело в голову :)
И еще раз повторю, проблема этой библиотеки на ESP32 в том, что в колбэках нельзо долго оставаться. С ними нужно работать практически как с прерываниями, потому как они из другого потока.
Открою для тебя. https://github.com/me-no-dev/ESPAsyncWebServer/issues ЧИТАЙ ! А потом будешь свою бредятину нести.
А на конкретный тикет с твой бредовой проблемой про ограничение на файл размером с tcp-пакет ты уже не смог дать ссылку? Типичный маневр обосравшегося - посыл в невнятном направлении. Нет там ничего.
И еще раз повторю, проблема этой библиотеки на ESP32 в том, что в колбэках нельзо долго оставаться. С ними нужно работать практически как с прерываниями, потому как они из другого потока.
Могу сказать, что у огромной массы людей асинхронный веб вызывает стойкую аллергию из-за невозможности принять файлы размера больше чем блок TCP. Еще раз повторю, все что вы пишете в обратных вызовах происходит в прерываниях.
Чет ты другое "повторяешь". Как-то пропал бред файлы размера TCP-пакета, и "работа в прерываниях" превратилась "в работу как в прерываниях". Последнее тоже неправда, кстати. Но не важно. Я все еще жду и надеюсь на тикет про файлы размером с TCP-пакет.
С ними нужно работать практически как с прерываниями, потому как они из другого потока.
Вот это тоже неправда
Слышь, ты бредятиной не это назвал. Так что "через зад" твой анализ не делает тебя умным, ни разу.
Сидишь тут и буковки сравниваешь. Вместо дельного совета ТС, оценки всем выставляешь :) Учи кого ни будь другого.
С ними нужно работать практически как с прерываниями, потому как они из другого потока.
Вот это тоже неправда
Мотивируй. А не трынди. Я уверен, что ты с этими библиотеками на 32 есп не работал, так что и сказать тебе нечего, только пустые рассуждения. Еще раз повторю, я общался с ТС, посоветовал одно из направлений поиска косяков. Ничего супер ошибочного я не сказал. Разъяснять, чем с точки программирования отличается работа процессора в прерывании или на разных ядрах, я не собирался. Выбрал вариант, который быстрее будет понятен ТС. Более отчитываться перед тобой не собираюсь.
Брукли, не "мотивируй", а "обоснуй" ;)
Кстати, этот ркит мне ещё на "стандарт интернета с ICMP 3 4" в теме по W5500 ни одного пруфа не подогнал. Наверное в борьбе за правоту в интернетах позабыл об обязательстве.
У меня на TL-WR741 два сервера httpd крутятся и еще некоторое количество р.л задач и всё пучком, правда под Open-WRT
А вебсокет где здесь?
некоторое количество радиолюбительских задач, то-есть аппаратных косяков в этом роутере нет
косяк то понятен, у него на 80 порту висит вэбморда роутера, и как это должно работать?
ТС ещё в первом посте (и во втором, кажется) написал, что он пробовал 85й ВНЕШНИЙ порт пробрасывать на ВНУТРЕННИЙ ESP 80й. Дело не в пробросить порта, а как он происходит (на уровне ядра, я так понимаю - хотя Линукс и с ним связанное я не очень сильно знаю).
дубль
Странное поведение. Приходит для того что бы менторски оценить участников обсуждения. И ладно бы был авторитетом каким то. Ни для кого ничего хорошего не сделал. Для меня просто набор букв. А дергает фразы из контекста, цитирует кусками, пытается оценить. Вот для меня, любая его оценка - оскорбление. Какой то обиженный чем то .... Пытается поднять свой авторитет обсирая других. Ну вообще да, так чел утверждается, видимо. Ладно. Хрен с ним... если он с ним :)
У меня на TL-WR741 два сервера httpd крутятся и еще некоторое количество р.л задач и всё пучком, правда под Open-WRT
А вебсокет где здесь?
некоторое количество радиолюбительских задач, то-есть аппаратных косяков в этом роутере нет
косяк то понятен, у него на 80 порту висит вэбморда роутера, и как это должно работать?
ТС ещё в первом посте (и во втором, кажется) написал, что он пробовал 85й ВНЕШНИЙ порт пробрасывать на ВНУТРЕННИЙ ESP 80й. Дело не в пробросить порта, а как он происходит (на уровне ядра, я так понимаю - хотя Линукс и с ним связанное я не очень сильно знаю).
если бы у меня был esp32 проверил бы на реальном, а так, чем мог, пробросил с 85 на 80 nmap сказал, что с UDP всё зашибись