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.
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); ".
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.
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.
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í.
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.
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";
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.
@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.