Cómo crear un servidor Tibia OTServ en Windows con TFS: guía técnica

Aprende a crear un servidor Tibia OTServ en Windows con The Forgotten Server (TFS), MySQL y configuración de puertos en una VPS dedicada.

Ejecutar un OTServ propio es uno de los ejercicios más educativos para quien quiere entender game servers — manejas base de datos, sockets TCP, scripting Lua y administración de sistema operativo al mismo tiempo. The Forgotten Server (TFS) es el engine más usado en la escena de Open Tibia desde mediados de la década de 2010, y la versión 1.x trajo una base de código C++ moderna que facilita mucho el mantenimiento.

Esta guía muestra el camino completo para poner un TFS 1.5 funcionando en Windows Server 2022, con MySQL configurado, puertos abiertos en el firewall y el cliente conectando al servidor. La persona aquí es el owner de OTServ principiante o intermedio que prefiere un entorno Windows por la curva de aprendizaje menor — incluso si Linux ofrece ventajas de rendimiento a largo plazo.

Tiempo estimado de ejecución: 45 a 60 minutos, considerando la descarga de los binarios y del mapa. La configuración reutiliza las builds precompiladas distribuidas por la comunidad, sin necesidad de compilar TFS desde cero.

Prerrequisitos

Antes de comenzar, confirma que tienes acceso administrativo a una VPS Windows con IP pública dedicada. OTServ no funciona en entornos con CGNAT o IP compartida porque necesita abrir puertos de entrada para que el cliente Tibia se conecte.

Prerrequisitos técnicos

Windows Server 2022 (o Windows 10/11 con acceso administrativo), mínimo 4 GB de RAM y 2 vCPUs para sostener 200-300 jugadores, 30 GB de disco libre, y acceso RDP (Remote Desktop) con un usuario con permisos de administrador. La VPS necesita IPv4 dedicada — sin CGNAT.

Puerto de login 7171/TCP
Puerto del mundo 7172/TCP
Puerto MySQL 3306/TCP (local)
RAM mínima 4 GB

Preparando el entorno Windows

Antes de descargar TFS, instala las dependencias de runtime que los binarios precompilados esperan encontrar en el sistema. Sin ellas, tfs.exe falla al iniciar con mensajes crípticos sobre DLLs faltantes.

01

Conéctate a la VPS vía RDP usando la IP pública, el usuario Administrator y la contraseña proporcionada en el provisionamiento. Usa el cliente Remote Desktop estándar de Windows o el cliente RDP de tu preferencia.

Después del login, abre PowerShell como administrador (clic derecho en el menú Inicio, “Windows PowerShell (Admin)”). Todos los comandos a continuación se ejecutan en ese contexto.

02

Instala el Visual C++ Redistributable 2015-2022 (x64), que es el runtime requerido por las builds modernas de TFS:

Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "$env:TEMP\vc_redist.x64.exe"
Start-Process -FilePath "$env:TEMP\vc_redist.x64.exe" -ArgumentList "/install","/quiet","/norestart" -Wait

Este paquete contiene las librerías C++ que tfs.exe enlaza dinámicamente. Sin él, el ejecutable retorna el error “VCRUNTIME140.dll missing” al intentar abrirlo.

03

Crea la estructura de carpetas donde se ejecutará el servidor:

New-Item -ItemType Directory -Path "C:\otserv" -Force
New-Item -ItemType Directory -Path "C:\otserv\backup" -Force

Mantener OTServ fuera de C:\Program Files evita problemas de permisos de escritura del UAC cuando TFS intenta generar logs o actualizar archivos del mundo.

Instalando MySQL para la base de datos

TFS usa MySQL (o MariaDB) para almacenar cuentas, personajes, casas y el estado persistente del mundo. Sin la base de datos en ejecución, el servidor no inicia.

04

Descarga MySQL Community Server 8.0 (instalador MSI) en mysql.com/downloads. Durante la instalación, elige “Developer Default” como tipo de setup — esto instala MySQL Server, Workbench y los connectors.

Cuando el asistente te pida configurar una contraseña de root, elige una contraseña fuerte y anótala en un gestor de contraseñas. La vas a necesitar en segundos.

05

Abre MySQL Workbench y conéctate a la instancia local. Ejecuta el SQL siguiente para crear la base de datos y el usuario dedicado de TFS:

CREATE DATABASE forgottenserver CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'otserv'@'localhost' IDENTIFIED BY 'CAMBIA_ESTA_CONTRASENA_FUERTE';
GRANT ALL PRIVILEGES ON forgottenserver.* TO 'otserv'@'localhost';
FLUSH PRIVILEGES;

Usar un usuario dedicado en lugar de root reduce el riesgo: si TFS tiene un bug de SQL injection (ya ocurrió históricamente en scripts Lua), el daño queda contenido en la base de datos del juego.

Bind de MySQL

Por defecto MySQL escucha solo en 127.0.0.1, lo cual es correcto para este escenario. NUNCA expongas el puerto 3306 a internet — accede siempre a la base de datos vía SSH/RDP tunelizado o solo localmente en la VPS.

Descargando y configurando TFS

Con el runtime y la base de datos listos, descarga la build de TFS e importa el schema inicial.

06

Descarga la release más reciente de The Forgotten Server 1.5 en otland.net/forums (sección “Compiled Servers — Windows”). Busca una build “downgrade 8.60” si quieres el protocolo clásico más popular, o TFS 1.5 vanilla para el protocolo 12.x moderno.

Extrae el ZIP en C:\otserv\. Deberías tener una estructura como:

C:\otserv\
  tfs.exe
  config.lua.dist
  schema.sql
  data\
  notes\
07

Importa el schema inicial en la base de datos que creaste:

cd C:\otserv
mysql -u otserv -p forgottenserver < schema.sql

Este comando crea todas las tablas: accounts, players, houses, guilds, tile_store y otras. TFS no se ejecuta sin estas tablas presentes.

08

Copia config.lua.dist a config.lua y edítalo con los parámetros de tu servidor:

ip = "TU_IP_PUBLICA_AQUI"
loginProtocolPort = 7171
gameProtocolPort = 7172
statusProtocolPort = 7171

mysqlHost = "127.0.0.1"
mysqlUser = "otserv"
mysqlPass = "CAMBIA_ESTA_CONTRASENA_FUERTE"
mysqlDatabase = "forgottenserver"
mysqlPort = 3306

serverName = "Mi OTServ"
ownerName = "Tu Nombre"
worldType = "pvp"

El campo ip es el error más común: si queda como 127.0.0.1 (por defecto), el servidor responde solo a conexiones locales y los jugadores externos ven “Cannot connect to login server”.

Abriendo puertos en el firewall

El Windows Firewall bloquea las conexiones entrantes por defecto. Necesitas crear reglas explícitas para los puertos de TFS.

09

Abre PowerShell como administrador y crea las reglas de entrada:

New-NetFirewallRule -DisplayName "OTServ Login" -Direction Inbound -Protocol TCP -LocalPort 7171 -Action Allow
New-NetFirewallRule -DisplayName "OTServ Game" -Direction Inbound -Protocol TCP -LocalPort 7172 -Action Allow

Confirma que las reglas fueron creadas:

Get-NetFirewallRule -DisplayName "OTServ*" | Select-Object DisplayName, Enabled, Direction

Deberías ver las dos reglas con Enabled: True y Direction: Inbound.

No desactives el firewall completo

Tentador para los principiantes “resolver de una vez”, desactivar el Windows Firewall expone RDP (puerto 3389), MySQL (3306) y todos los servicios internos a internet. Mantén el firewall activo y crea solo las reglas necesarias.

Iniciando el servidor y verificando

Con todo configurado, es momento de levantar TFS y validar que todo funciona.

10

En la carpeta C:\otserv, haz doble clic en tfs.exe (o ejecútalo en PowerShell):

cd C:\otserv
.\tfs.exe

Deberías ver una salida parecida a:

The Forgotten Server - Version 1.5
Loaded config.lua
Loaded items, monsters, NPCs, spells
Connected to MySQL
Loaded map
[OK] Server Online! - 127.0.0.1:7171

Si aparece un error de MySQL, revisa mysqlPass en config.lua. Si aparece un error de mapa, confirma que data/world/forgotten.otbm existe.

Verificación

Confirma que el servidor está aceptando conexiones externas ejecutando desde tu computadora local (no desde la VPS):

telnet TU_IP_PUBLICA 7171

Si la pantalla queda negra sin mensaje de error, el puerto está abierto y TFS está respondiendo. Presiona Ctrl+] y escribe quit para salir.

Para probar con el cliente Tibia real, abre OTClient o el cliente Tibia adaptado, ve a “Server” y configura: IP = tu IP pública de la VPS, puerto = 7171. Crea una cuenta vía comando in-game o directamente vía SQL e intenta entrar.

Resolución de problemas

”Cannot connect to login server” del lado del cliente

La causa más común: ip en config.lua está como 127.0.0.1 o IP equivocada. Confirma con ipconfig la IP de la interfaz de red y ajusta. Después verifica que el puerto 7171 esté realmente abierto usando un scanner externo como nmap desde otra máquina.

TFS se cierra solo al iniciar

Generalmente es Visual C++ Redistributable faltante o versión equivocada. Confirma que instalaste el paquete x64 2015-2022, no el x86. Otra causa común: data/items/items.otb corrupto o de una versión distinta al protocolo configurado.

Lag/spikes de latencia con pocos jugadores

Casi siempre es un script Lua mal optimizado. Usa modo debug en config.lua (logFile = "logs/server.log") y revisa scripts globales o de eventos disparando consultas SQL en bucles. En hardware adecuado, TFS 1.5 sostiene tranquilamente algunos cientos de jugadores antes de saturar la CPU.

Próximos pasos

Con el OTServ en ejecución, considera los siguientes puntos para evolucionar el proyecto:

  • Configura backup automático de MySQL vía Task Scheduler de Windows (export diario del dump SQL)
  • Levanta un sitio PHP con login.php para que los clientes Tibia modernos consulten información del servidor (charlist API)
  • Añade monitoreo de uptime externo para recibir notificación si tfs.exe se cae
  • Personaliza el mapa con Remere’s Map Editor o crea quests Lua propias
  • Migra al protocolo moderno (12.x) si quieres features actuales del Tibia oficial

Si estás poniendo el servidor en producción con una base de jugadores real, una VPS Hostini para juegos ya viene con IPv4 dedicada, protección DDoS especializada en puertos de game (7171/7172) y baja latencia para Latinoamérica — lo que importa mucho cuando tus jugadores están aquí.

Preguntas frecuentes

¿Qué versión de TFS elegir para un OTServ nuevo en 2026?

TFS 1.5 (downgrade 8.60 o 7.72) es la opción más común para proyectos nuevos por tener una base de código moderna en C++17 y amplia disponibilidad de scripts. TFS 1.4 sigue siendo viable si usas librerías antiguas. Evita TFS 0.4 a menos que tengas un motivo nostálgico — el mantenimiento y soporte de la comunidad migraron a 1.x.

¿Por qué mi cliente Tibia muestra 'Cannot connect to login server' incluso con el OTServ en ejecución?

Casi siempre es una de tres causas: la IP en config.lua está como 127.0.0.1 en lugar de la IP pública, el puerto 7171 no está abierto en el firewall de Windows, o el login.php del sitio no apunta a la IP correcta de la VPS. Verifica las tres antes de tocar el código.

¿Puedo ejecutar OTServ en Windows o Linux es obligatorio?

Windows ejecuta OTServ sin problemas y es más común entre owners principiantes por la familiaridad con la interfaz. Linux tiende a ofrecer mejor rendimiento por core y menor costo de licenciamiento, pero exige soltura con línea de comandos. Para comenzar, Windows Server 2022 es una elección pragmática.

¿Cuántos jugadores aguanta un OTServ en una VPS de 4 GB de RAM?

Para TFS 1.5 con un mapa custom moderado, 4 GB de RAM y 2 vCPUs sostienen tranquilamente 200-300 jugadores online simultáneos. El cuello de botella suele aparecer en scripts Lua mal optimizados (consultas SQL en bucles, eventos globales pesados) antes de saturar el hardware.

¿Necesito IP dedicada para ejecutar OTServ?

Sí, es prácticamente obligatorio. Los jugadores necesitan una IP estable para configurar en el cliente Tibia o en OTClient. Las IPs compartidas (CGNAT) no permiten abrir los puertos 7171 y 7172 para entrada. Toda VPS Hostini ya viene con IPv4 dedicada por defecto.

¿Cómo proteger el OTServ contra ataques DDoS sin comprometer la latencia?

Usa protección en capa de red que filtre tráfico malicioso antes de llegar al servidor. El OTServ usa UDP/TCP en puertos específicos (7171, 7172) — la protección genérica de HTTP no cubre eso. Una VPS con protección DDoS dedicada para juegos filtra ataques volumétricos sin añadir latencia perceptible.

Temas:
Próximos pasos VPS, dedicado o panel gestionado para FiveM, SAMP, MTA, Tibia y más.Aloja tu servidor de juegos con Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp