Configuración del servidor de juego y login de L2: puertos, IPs y HexID

Una configuración correcta del servidor de juego y login se reduce a tres puertos, dos direcciones y un archivo de registro. Todo lo demás —rates, drops, horarios de asedio— es ajuste fino. Si esto falla, el servidor parece sano en la consola mientras todos los jugadores se quedan en la pantalla de login.
Esta guía cubre los ajustes que deciden la accesibilidad y la seguridad de las cuentas, con los nombres de archivo de L2J, L2JMobius y aCis. Da por hecho que el servidor ya instala, arranca y te deja entrar en local; si no, empieza por el orden de instalación.
Los tres puertos y para qué sirve cada uno
Se confunden constantemente, y eso produce reglas de firewall que abren lo que no toca:
| Puerto | Por defecto | Quién conecta | Ajuste |
|---|---|---|---|
| Cliente → login | 2106 | Todos los jugadores, antes de elegir personaje | LoginserverPort |
| Juego → login | 9014 | Solo tu servidor de juego | LoginPort |
| Cliente → juego | 7777 | Todos los jugadores, ya en el mundo | GameserverPort |
Solo 2106 y 7777 deben estar en una regla pública de firewall. El puerto 9014 es el handshake interno entre tus dos procesos Java: exponerlo a internet invita a registros falsos de servidores de juego, que es justo lo que controla AcceptNewGameServer.

Dónde vive la configuración en cada paquete
Login y juego son procesos separados con archivos separados, y ningún paquete los pone en el mismo sitio:
- L2J Server: la carpeta
configdentro de cada servidor desplegado; login y juego tienen la suya, y cada una lleva su propiodatabase.properties. - L2JMobius:
login/config/LoginServer.propertiesygame/config/Server.properties. - aCis:
config/loginserver.propertiesyconfig/server.properties, ambos dentro de la carpeta del gameserver.
Edita con el servidor parado. Los tres paquetes leen las propiedades una vez al arrancar, así que un cambio hecho con el proceso en marcha se ignora hasta el siguiente reinicio: el clásico "lo arreglé y no cambió nada".
Dirección externa frente a interna: lo que rompe los servidores públicos
Del servidor salen dos direcciones distintas y no son intercambiables. El login envía una dirección a los jugadores que vienen de internet y otra a los que están en tu propia LAN, porque una IP pública no es enrutable desde dentro de la mayoría de redes domésticas.
aCis lo hace explícito en la configuración del login:
ExternalHostname = 203.0.113.10
InternalHostname = 192.168.1.50
LoginserverHostname = *
LoginserverPort = 2106
L2JMobius trasladó la misma idea a un archivo aparte. Copia default-ipconfig.xml a ipconfig.xml y pon la dirección pública en el elemento gameserver, dejando las líneas define que mapean tus rangos de LAN:
<gameserver address="203.0.113.10">
<define subnet="192.168.0.0/16" address="192.168.1.50" />
</gameserver>
Si falta ipconfig.xml, el servidor adivina su dirección, lo que funciona en un VPS con una sola interfaz y falla detrás de NAT o con dos tarjetas. El síntoma es concreto: el servidor aparece en la lista del cliente y luego el cliente se queda esperando al abrir la conexión de juego.
Prueba desde fuera de tu red, con datos móviles, antes de anunciar una fecha de lanzamiento. Una prueba en LAN nunca ejercita la ruta de la dirección externa.

HexID, ID de servidor y registro del game server
Un servidor de juego no es de confianza por defecto: se registra una vez y recibe una identidad. En L2JMobius esa identidad es game/config/hexid.txt, que se genera o se solicita en el primer arranque. Si copias una carpeta de servidor completa a una segunda máquina, también copias la identidad: borra el hexid en la copia y deja que se registre como un servidor de juego nuevo.
RequestServerID pide un hueco en la lista de servidores del cliente (1 = Bartz por defecto) y AcceptAlternateID decide si el login puede asignar otro cuando el hueco pedido está ocupado. Para un servidor único, mantén los valores por defecto.
AcceptNewGameServer es el interruptor que decide si un servidor de juego desconocido puede registrarse. aCis lo trae en False; L2JMobius lo trae en True por comodidad. En un servidor abierto, registra el tuyo y ponlo en False para que nada más reclame un hueco.
Ajustes de cuenta que hay que cambiar antes del primer jugador
Tres valores por defecto están bien en una máquina de pruebas y mal en producción:
AutoCreateAccounts— si está activo, cualquier usuario y contraseña crea una cuenta en el primer login. Cómodo para probar, pésimo en producción: salta el registro, la verificación por correo y cualquier antibot que añadas después. Ponlo en false y crea las cuentas desde tu web.LoginTryBeforeBan/LoginBlockAfterBan— protección contra fuerza bruta, en segundos y por IP. L2JMobius trae 5 intentos y un bloqueo de 900 segundos; aCis, 10 y 600. No lo aprietes tanto como para bloquear a una casa con varios jugadores.ShowLicence— déjalo activo. aCis recomienda el valor por defecto; muestra la ventana de licencia al entrar y cuesta un clic.
En el lado del juego, MaximumOnlineUsers y los límites de conexión de la configuración del flood protector (MaxConnectionPerIP, FastConnectionLimit) acotan cuánto abuso puede generar una sola dirección. Ajusta por tu población real, no por el máximo teórico del paquete.
Revisiones de protocolo del cliente
L2JMobius acepta una lista de revisiones de protocolo, por ejemplo AllowedProtocolRevisions = 603;606;607;610. Un cliente cuya revisión no está en esa lista cae en el login con un error de protocolo o, en algunos clientes, con un fallo genérico que los jugadores leen como contraseña incorrecta. Si alguien reporta "contraseña errónea" en una cuenta que sabes correcta, revisa esta línea y la carpeta system del cliente antes de resetear nada.
No añadas revisiones que no hayas probado. Cada una cambia el manejo de paquetes, y una revisión soportada a medias produce fallos difíciles de rastrear hasta este ajuste.
Comprobación de accesibilidad en cinco minutos
netstat -anmuestra 2106 y 7777 escuchando en0.0.0.0, no solo en127.0.0.1.- La consola del login informa del servidor de juego registrado y sin reintentos repetidos.
- Una máquina fuera de tu red llega a la lista de servidores y entra al mundo.
- El log del servidor de juego muestra la IP externa que entregó al cliente.
Si el paso 3 falla y el 2 pasa, el problema es la dirección externa o el firewall, nunca la base de datos.
Antes de que los jugadores vean la configuración
Cuando las conexiones funcionan, el siguiente fallo es un servidor que nadie encuentra. Una configuración correcta sin geodata produce jugadores cayendo a través del terreno el primer día, así que termina geodata antes de abrir. Después pon el servidor delante de la gente: un listado gratuito en L2Calendar tarda minutos y lo coloca en las páginas de crónica y rate que la gente consulta: añade tu servidor. La colocación de pago va por encima del listado gratuito y es la vía rápida a la visibilidad: listado VIP.
