Godot 4: funciona en LAN, pero no por Internet. Qué revisar con ENet

GamerCreador

Admin
SUPER VIP
Leyenda
Referente
Mentor
Especialista
Creador
Colaborador
Participante
Explorador
Desde
1 Oct 2019
Mensajes
2,382
Reacciones
2,158
Honor
829
Has conseguido conectar dos ventanas de Godot y mover los personajes. Le pasas el juego a un amigo y no entra. Antes de rehacer las RPC, conviene separar tres pruebas: mismo equipo, red local e Internet. Cada una comprueba algo distinto.

Esta guía está pensada para Godot 4 con ENet en una exportación nativa. Si publicas para navegador, revisa WebSocket o WebRTC: la web no ofrece acceso directo a UDP como una aplicación de escritorio.

godot_01_pruebas.webp

Diagrama de diagnóstico: comprueba mismo equipo, LAN y otra red por separado.

1. Comprueba si realmente ha conectado

Que create_client() devuelva OK indica que la inicialización ha ido bien; todavía falta establecer la conexión. Registra connected_to_server, connection_failed y server_disconnected. En el servidor, registra peer_connected y peer_disconnected. La referencia de MultiplayerAPI describe estas señales.

Apunta también la versión del juego y el puerto elegido. Dos builds distintas pueden convertir un problema de compatibilidad en uno que parece de red.

2. Haz las pruebas en este orden

  • Mismo equipo: inicia el servidor y conecta otra instancia a 127.0.0.1. Si falla aquí, revisa primero la creación del peer, los errores y si el puerto está ocupado.
  • Dos equipos de la misma LAN: utiliza la IP privada del equipo anfitrión. En otro ordenador, 127.0.0.1 apunta a ese ordenador, no al host.
  • Otra red: prueba desde una conexión externa con la dirección pública adecuada. No uses la IP privada del host como dirección de Internet. Una prueba a la IP pública desde dentro de casa puede depender del comportamiento del router y no sustituye esta comprobación.

3. Si LAN funciona y fuera no, revisa el camino hasta el host

ENet utiliza UDP. Comprueba que cualquier regla de redirección utiliza ese protocolo y apunta al equipo que ejecuta el servidor. Una regla TCP con el mismo número de puerto no equivale a una regla UDP. Revisa también el firewall del sistema con una excepción limitada al juego y al puerto necesario; no hace falta desactivar toda la protección. Referencia oficial de ENetMultiplayerPeer.

Si has cambiado set_bind_ip(), verifica que no restringe el servidor a una interfaz equivocada o únicamente a loopback. Si no administras la red, consulta con quien la gestione antes de cambiar reglas.

Si todo parece correcto, pregunta al proveedor si tu conexión admite conexiones entrantes y si hay NAT adicional. No publiques tu IP ni capturas completas del router en el foro. Para un juego distribuido a muchos jugadores, valora un servidor accesible o una solución de relay compatible: pedir que cada persona configure su router añade fricción.

4. Conecta, pero no aparece el personaje

Aquí ya tienes otra pista. Comprueba que ambos lados cargan la escena prevista, que las RPC usan rutas de nodos compatibles y que la aparición del jugador ocurre después de la conexión. Mantén separados los mensajes «conectado» y «personaje creado». Guía oficial de multijugador.

godot_02_senales.webp

Distingue la inicialización del cliente de la conexión confirmada y registra las señales.

Para pedir ayuda sin dar veinte vueltas

Comparte versión de Godot, plataforma, transporte, resultado de las tres pruebas y el error exacto, ocultando datos privados. Si seguías un tutorial con NetworkedMultiplayerENet, revisa su versión: ese nombre corresponde a la API de Godot 3.

¿En cuál de las tres pruebas se rompe tu conexión? ¿Llega a emitirse connected_to_server?