ESP32 CAM - Acceso externo

Buenas.

Tengo un proyecto funcionando en mi domicilio. Ya cuento con varios microcontroladores que interactúan y los gestiono desde el navegador y desde una app móvil tanto desde mi red local como desde internet.
Le ha llegado el turno al ESP32 CAM porque me parece un sistema barato para poder ver como funciona todo.

Mi problema es que el ESP32 CAM en la red interna de mi casa funciona correctamente, pero no soy capaz de verla desde fuera. Utilizo un servicio de DNS para poder tener acceso a mi router desde el exterior de mi red, nateando los puertos que me interesa hacia los distintos microcontroladores. Sin embargo no consigo acceder al ESP32 CAM. Mi navegador se queda esperando y al cabo de mucho rato llega a mostrarme el panel de la cámara pero nunca la imagen.

Llevo varios días probando cosas con mi router sin conseguir que funcione y no he encontrado documentación de como hacerlo. ¿Sabéis qué puertos utiliza o qué parámetros del router debería buscar? El firewall del router está a mínimos.

Utilizo el sketch de ejemplo y tal vez esté allí la configuración, pero no he llegado a resolverlo.

Muchas Gracias.

¿Hiciste los cálculos, para ver si tienes suficiente ancho de banda de subida?

La verdad es que no.

Que debería mirar o buscar ?
Tengo fibra y me da ahora mismo:
image

Olvida que dije algo, con 575 MB/s no deberías tener problemas.

vel

Gracias por tu respuesta... supongo que mi router está bloqueando algo y no lo encuentro.

Estoy usando uno a través de un enrutador, no hay problema, así que me pregunto si el boceto que está usando está usando un puerto adicional que no conoce.
Tal vez pruebe este boceto para ver si funciona, puede configurar el puerto que usa con la línea


I am using one through a router no problem so I am wondering if the sketch you are using is using an extra port you do not know about?
Maybe try this sketch to see if it works, you can set the port it uses with the line "WebServer server(80); ".

Tienes hecho el portforward correspondiente al ip del ESP32 CAM? y ademas supongo que le has puesto IP fija en tu red local.

Moderador:
Todo tema que no es AVR o sea Arduino Board original o Clon debe postearse en Microcontroladores.
Movido a dicha sección.

En mi router tengo establecido en la opción NAT/PAT que las conexiones que lleguen al puerto 1968 en mi caso, lleguen al puerto 80 de mi dirección interna 192.168.1.111, que es la dirección local de mi ESP32-CAM. (La última fila en la imagen).

Tengo también un servicio de DNS que redirige a mi router el nombre que he establecido para que con este nombre me lleguen las llamadas con independencia de la dirección dinámica que me proporciona el proveedor.

Como veis, tengo varias redirecciones hacia mis microcontroladores (Todos ESP32) que funcionan correctamente pero con el ESP32-CAM queda esperando y muere por timeout.

He probado llamando directamente a la dirección IP que tengo asignada en ese momento y el resultado es el mismo, o sea:

Una llamada externa a HTTP://xxx.xxx.xxx.xxx:1968 (No pongo la dirección IP que tengo para evitar bromillas de algún gracioso que se entretenga encendiéndome el riego o algo similar, ya que no he puesta aún seguridad).
Se tendría que convertir en HTTP://192.168.1.111:80 que es como invoco internamente y me funciona.

Sin embargo, nada...

Te falta hacer el porforward del puerto 8888 para que la comunicacion UDP se establezca con el servidor NTP.
A ver si eso no sea responsable del problema.

Nunca lo he usado.

Te estoy entendiendo que envíe las conexiones UDP que vengan al puerto 8888 al ESP32 CAM a su puerto 8888?

Si, pero solo es algo para probar, no se si solucionará el problema.
El modo de tener lo mismo que haces desde tu red local y repetirlo en la red publica es que los puertos que estan en uso esten porforwados (espero se acepte el término).
Veo en en el código ejemplo el 88 y el 8888 en UDP para el NTP por eso te lo sugerí.

Gracias por los módulos, me funcionan correctamente en local, pero sigo sin poder acceder desde el exterior.

Nada, no me funciona.
He probado cosas variopintas como definirlo como DMZ en mi router, deshabilotar el "UPnP IGD" que verdaderamente no sé bien para qué se usa....

Seguiré probando.
A ver si consigo otro router para poder asegurarme que es la conf. del router que tengo. Generalmente las compañias proporcionan routers bastante regulares.

Muchas gracias

He visto algo probando el sketch que me mandó @alanesq

Sí llegan al ESP32-CAM las peticiones de streaming. En la imagen he ocultado con azul las direcciones de llamada. En este caso es la dirección real de mi router desde el exterior. Lo que no sé es por qué no le envía a mi navegador la respuesta, o sea el streaming.

La otra dirección es la 192.168.1.140 accediendo desde el mismo navegador haciendo pruebas dentro de mi LAN.

Y.... por cierto.... Hablando del NTP... Hay un desfase de una hora entre la de mi máquina, que es la buena y la que escribe el programa al arrancar.

Nada... estaba mal el timezone al pedir la hora, lo he corregido

// const char* TZ_INFO = "GMT+0BST-1,M3.5.0/01:00:00,M10.5.0/02:00:00"; // enter your time zone (Timezone Abbreviations)
const char* TZ_INFO = "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00";

¿Y desde la red donde esta conectado el esp, podes hacer ping a la dirección externa?

O sea, al router?

Pero claro al hacer ping a la dirección de internet no se si estoy verdaderamente saliendo de mi router y entrando al router por la IP externa.

Internamente el router es mi gateway y tiene una ip local, en mi caso 192.168.1.1 que también contesta al ping.

He probado hacer ping desde fuera conectando el ordenador al móvil y no me contesta al ping la dirección ip externa del router.

¿Creeis que puede afectar?
Hasta donde yo sé la opción de contestar al ping suele ser configuración y no debería afectar.

He buscado como habilitar el ping en el router y no lo he encontrado.

He encontrado el sitio del ping en el firewall!!!

He habilitado el ping y .... ¡¡¡¡¡¡ FUNCIONA!!!!!!!

Pero no era eso.....

He vuelto a dejarlo como estaba y ya sé lo que ocurre aunque no lo entiendo.

Para este servicio de streaming no me deja desde la red interna invocar a la dirección IP externa. Si hago la llamada a través de los datos del móvil funciona porque no está en mi LAN pero si voy a través del Router tengo que llamar a la dirección interna.

A lo mejor alguien lo entiende, yo no. De hecho para el resto de mis micros hago las pruebas desde mi red interna haciendo la invocación a la IP de internet y todos funcionan.

Por lo menos ya sé como actuar, pero esto me hace tener que controlar en la App del móvil si estoy en mi red o no para elegir la IP de ataque.

Seguuuuuro que hay algo en el router que no estoy viendo.

Muchas gracias por vuestra ayuda, sin ella no habría llegado y si alguien entiende el por qué y se pega una explicación, mejor que mejor.

En tu movil desconecta la WIFI y lo harás desde Afuera si se entiende.

@jguajardo ¿No consultaste al servicio técnico de tu ISP si ellos no tienen bloqueados esos puertos?

Porque recuerdo que acá en Argentina, allá lejos y hace tiempo, algunos proveedores tenían la mala costumbre de bloquear puertos, por ej. los que usaba Ares, para evitar las transferencias p2p (y que no les "robaramos" ancho de banda).
Eran otras épocas pero tal vez las costumbres persisten.

A ver si te estás volviendo loco y el problema es externo. :man_facepalming:t2: