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.
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.
7171/TCP 7172/TCP 3306/TCP (local) 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.
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.
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" -WaitEste 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.
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" -ForceMantener 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.
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.
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.
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.
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\Importa el schema inicial en la base de datos que creaste:
cd C:\otserv
mysql -u otserv -p forgottenserver < schema.sqlEste comando crea todas las tablas: accounts, players, houses, guilds, tile_store y otras. TFS no se ejecuta sin estas tablas presentes.
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.
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 AllowConfirma que las reglas fueron creadas:
Get-NetFirewallRule -DisplayName "OTServ*" | Select-Object DisplayName, Enabled, DirectionDeberías ver las dos reglas con Enabled: True y Direction: Inbound.
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.
En la carpeta C:\otserv, haz doble clic en tfs.exe (o ejecútalo en PowerShell):
cd C:\otserv
.\tfs.exeDeberí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:7171Si 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.phppara que los clientes Tibia modernos consulten información del servidor (charlist API) - Añade monitoreo de uptime externo para recibir notificación si
tfs.exese 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.