Configurar mtaserver.conf de MTA:SA desde cero — guía completa

Aprende a configurar cada opción de mtaserver.conf en Multi Theft Auto desde cero, con explicación técnica de puertos, ASE, password, módulos y recursos.

El mtaserver.conf es el archivo central de configuración de cualquier servidor Multi Theft Auto: San Andreas. Define desde detalles operativos básicos como puerto y número de slots hasta comportamiento de red, módulos cargados, recursos que arrancan en el boot y cómo el servidor se anuncia en la master list pública. Editar este archivo sin entender cada bloque suele resultar en un servidor que no aparece in-game, lag inexplicable o crashes en el startup.

Este tutorial es para quien está montando un servidor MTA:SA desde cero — ya sea en un VPS Linux, dedicado Windows o entorno local — y necesita entender qué hace cada línea del mtaserver.conf, con valores recomendados para producción. Tiempo estimado de ejecución: 25 a 40 minutos, dependiendo de cuántos bloques opcionales actives.

La premisa es que ya tienes el servidor MTA instalado (paquete multitheftauto-server en Linux o release oficial de mtasa.com en Windows) y puedes iniciar el proceso mta-server al menos una vez antes de editar la configuración definitiva.

Requisitos previos

Requisitos previos

Servidor MTA:SA versión 1.6 o superior instalado. Acceso al filesystem del servidor (SSH/SFTP o RDP). Editor de texto que respete los saltos de línea del XML (vim, nano, VS Code, Notepad++). Tres puertos UDP liberados en el firewall: el puerto del servidor, ASE y HTTP interno.

Archivo mods/deathmatch/mtaserver.conf
Formato XML
Puerto por defecto 22003/UDP
Puerto ASE puerto+123
HTTP interno 22005/TCP

El archivo está en mods/deathmatch/mtaserver.conf relativo a la raíz de la instalación. Todo cambio exige restart del proceso mta-server para surtir efecto, con pocas excepciones aplicables en runtime vía consola.

Bloque de identidad y visibilidad

Esta sección define cómo aparece tu servidor a los jugadores en la master list y cómo responde a queries externas. Son las primeras tags del XML inmediatamente después de <config>.

01

Define el nombre público y la descripción que aparecen en la master list:

<servername>Mi Servidor RP ES</servername>
<serverip>auto</serverip>

Usa auto en serverip casi siempre — el MTA detecta la IP externa vía STUN. Solo fija la IP manualmente si el servidor está detrás de NAT complejo y sabes qué dirección pública anunciar. El nombre del servidor está limitado a 96 caracteres; emojis y color codes (#FF0000) funcionan pero dificultan la búsqueda textual.

02

Configura los puertos de red:

<serverport>22003</serverport>
<maxplayers>64</maxplayers>
<httpserver>1</httpserver>
<httpport>22005</httpport>

serverport es UDP — es por donde transita el gameplay. maxplayers define cuántos slots simultáneos. httpserver=1 activa el HTTP integrado para entregar resources a los clientes durante el join; httpport es TCP y generalmente queda en serverport+2.

03

Activa el anuncio en la master list (ASE):

<ase>1</ase>
<allow_gta3_img_mods>none</allow_gta3_img_mods>
<donotbroadcastlan>0</donotbroadcastlan>

ase=1 hace que tu servidor aparezca en el browser in-game. El puerto ASE es automáticamente serverport+123 (UDP) — necesita estar abierto en el firewall, de lo contrario la master list no puede confirmar que el servidor está vivo y lo elimina de la lista tras algunos minutos.

Tres puertos, tres reglas de firewall

El servidor MTA exige tres puertos abiertos: la serverport (UDP), el puerto ASE = serverport+123 (UDP) y la httpport (TCP). Olvidar el ASE es el error más común — el servidor levanta, conecta localmente, pero nunca aparece en la lista pública.

Seguridad y control de acceso

Aquí defines password, ACLs, anti-cheat y quién puede administrar vía consola remota. Es la sección que más varía entre servidor de producción y servidor de desarrollo.

04

Define la password (opcional) y el modo de acceso:

<password></password>
<minclientversion>1.6.0-9.22790.0</minclientversion>
<recommendedclientversion></recommendedclientversion>

Deja <password></password> vacío para servidor público. Para whitelist privada, pon una contraseña fuerte (16+ caracteres). minclientversion fuerza al cliente a estar actualizado — útil para evitar bugs ya corregidos; el formato exacto viene del release del MTA que quieres exigir.

05

Configura el anti-cheat y las detecciones:

<ac>1,2</ac>
<disableac></disableac>
<enablesd>12,28,32</enablesd>

ac activa categorías de anti-cheat — 1,2 cubre los checks estándar recomendados. enablesd activa special detections numeradas; la lista oficial está en la wiki del MTA. En servidores de desarrollo, deja disableac con los IDs que necesitas desactivar para testear mods.

06

Configura el acceso remoto vía web admin:

<httpdosthreshold>20</httpdosthreshold>
<verifyclientsettings>-1</verifyclientsettings>
<bandwidthreductionmode>medium</bandwidthreductionmode>

httpdosthreshold limita las solicitudes por segundo en el HTTP interno para mitigar flood. bandwidthreductionmode puede ser none, medium o maximum — en servidor con muchos jugadores, medium es el sweet spot entre consumo de banda y capacidad de respuesta.

ACL.xml controla quién es admin

La password en mtaserver.conf es solo para entrar al servidor. Quién puede ejecutar comandos administrativos viene de mods/deathmatch/acl.xml. Nunca dejes el grupo Admin con la password por defecto serveradmin — cualquiera en internet sabe que existe e intenta brute force diariamente.

Rendimiento y logs

Esta sección controla cuántos recursos consume el servidor y cómo registra la actividad. Valores malos aquí causan lag percibido incluso con hardware sobrante.

07

Define los límites de tickrate y voice:

<voice>0</voice>
<voice_samplerate>1</voice_samplerate>
<voice_quality>4</voice_quality>
<fpslimit>36</fpslimit>

fpslimit es el tickrate del servidor — 36 es el valor por defecto y funciona para la mayoría. Subirlo a 60 o 100 mejora la precisión de sincronización en deathmatch competitivo, pero duplica/triplica el uso de CPU. voice=0 desactiva el chat de voz; actívalo solo si el gameplay depende de eso.

08

Configura los archivos de log:

<logfile>logs/server.log</logfile>
<authserialloglevel>2</authserialloglevel>
<authserialgroups>Admin,Moderator</authserialgroups>
<loadfailurelogfile>logs/load_errors.log</loadfailurelogfile>
<scriptdebugloglevel>0</scriptdebugloglevel>
<htmllogfile>logs/server.html</htmllogfile>
<acllogfile>logs/acl.log</acllogfile>

Logs separados ayudan al debug. scriptdebugloglevel=0 desactiva el log verbose de scripts Lua — actívalo a 2 o 3 solo en desarrollo porque llena disco rápido. authserialloglevel=2 registra las autenticaciones de los grupos privilegiados; útil para auditoría.

09

Define directorios y crash dumps:

<crashdumpfile>logs/crashdump.log</crashdumpfile>
<filterduplicatelogfilelines>1</filterduplicatelogfilelines>
<backup_path>backups</backup_path>
<backup_interval>3</backup_interval>
<backup_copies>10</backup_copies>

backup_interval=3 hace backup de mods/deathmatch/ cada 3 días manteniendo 10 copias. En servidor de producción, considera apuntar backup_path a un volumen separado o correr rsync externo — backup en el mismo disco del servidor no protege contra fallo físico.

Módulos y recursos iniciales

La última sección del XML define qué carga en el boot: módulos C++ (extensiones binarias) y los resources Lua que forman el gameplay.

10

Lista los módulos binarios que deben cargarse:

<module src="mta_mysql.dll" />
<module src="ml_sockets.dll" />

Sustituye .dll por .so en Linux. Módulos comunes: mta_mysql para conexión MySQL nativa (más rápida que dbConnect puro), ml_sockets para TCP/UDP raw, ml_base64. Cada módulo necesita estar en mods/deathmatch/modules/ para ser encontrado.

11

Define qué resources arrancan automáticamente:

<resource src="admin" startup="1" protected="0" />
<resource src="webadmin" startup="1" protected="0" />
<resource src="resourcemanager" startup="1" protected="0" />
<resource src="mapmanager" startup="1" protected="0" />
<resource src="mi-gamemode" startup="1" protected="0" />

startup="1" carga en el boot del servidor. protected="1" impide que comandos in-game detengan el resource — úsalo en resources críticos (admin, ACL). El orden importa: las dependencias deben declararse antes que los resources que dependen de ellas.

HTTP externo reduce CPU en servidores grandes

Si el servidor tiene 100+ slots, configura httpdownloadurl apuntando a un nginx/CDN externo que espeje el directorio mods/deathmatch/resources/. Los clientes descargan desde ahí en lugar de saturar el HTTP interno del MTA — reduce CPU del proceso y mejora la velocidad de join. El mirror necesita actualizarse en cada deploy de resource nuevo.

Verificación

Después de guardar el mtaserver.conf, valida la configuración antes de abrir al público. Inicia el servidor en foreground para ver los logs:

cd /opt/mta-server
./mta-server

En Windows, ejecuta MTA Server.exe directamente desde el terminal para ver el output. Busca estas líneas en el startup:

[INFO] Server started and is ready to accept connections!
[INFO] Listening on 0.0.0.0:22003 (UDP)
[INFO] HTTP server started on port 22005
[INFO] Querying master server...
[INFO] Master server registration successful

Si la última línea aparece como failed o timed out, es firewall en el puerto ASE. Prueba desde fuera usando nc -u -z TU_IP 22126 (si serverport=22003, ASE=22126). Tras el éxito, conecta desde el cliente MTA a tu-ip:22003 y confirma que el servidor aparece en la master list en hasta 5 minutos.

Resolución de problemas

El servidor levanta pero no aparece en la lista

La causa más común es firewall bloqueando el puerto ASE (UDP serverport+123). La master list envía query a ese puerto cada pocos minutos para confirmar que el servidor está vivo. Sin respuesta, lo eliminan de la lista. Verifica ufw status en Linux o Windows Firewall, y también el firewall del proveedor de hosting — en VPS, ambas capas necesitan liberar el puerto.

”Could not load module” en el startup

La ruta del módulo en <module src="..." /> es relativa a mods/deathmatch/modules/. Confirma que el archivo existe ahí y que la extensión coincide con el SO (.dll Windows, .so Linux). Los módulos compilados para versiones antiguas del MTA no cargan en 1.6+ — descarga siempre la build correspondiente a la versión exacta de tu servidor.

El resource no inicia aun con startup=“1”

Revisa logs/load_errors.log — la razón suele estar ahí. Errores comunes: dependencia declarada en meta.xml que no existe, archivo Lua con syntax error que impide el parse, ACL bloqueando acciones del resource. Ejecuta refresh en la consola del servidor después de corregir.

Próximos pasos

Con el mtaserver.conf configurado, el siguiente paso natural es ajustar acl.xml para crear grupos administrativos con permisos granulares — nunca uses la password por defecto serveradmin. Después, configura backups externos vía rsync o volumen separado, y considera espejar resources en un CDN si planeas escalar a 100+ slots.

Para deploy en producción, vale la pena dimensionar la infraestructura por el tickrate deseado: 36fps cabe holgado en un VPS de 2 vCPU, mientras que 100fps en deathmatch competitivo pide 4+ vCPU dedicadas. Si vas a poner un servidor MTA:SA al aire, el plan de hosting de juegos de Hostini ya viene con protección DDoS en el borde e IPs latinoamericanas con baja latencia, ideal para comunidades hispanohablantes.

Por último, monitorea métricas de largo plazo: uso de CPU por tickrate, tráfico de salida por jugador conectado y tamaño de los logs. Un servidor MTA bien configurado consume sorprendentemente poco — si el consumo está alto, casi siempre es un resource Lua mal escrito, no el mtaserver.conf.

Preguntas frecuentes

¿Puedo correr dos servidores MTA en la misma máquina?

Sí. Cada instancia necesita una copia separada del directorio del servidor y puertos distintos en serverport, httpport y ase. Recuerda cambiar también el servername para diferenciarlos en la master list y abrir los 3 puertos en el firewall para cada instancia.

¿Cuál es la diferencia entre httpserver y httpdownloadurl?

httpserver=1 levanta un HTTP interno del MTA en el puerto httpport para entregar resources a los clientes. Si configuras httpdownloadurl con un CDN/nginx externo, el cliente descarga desde ahí en lugar del servidor — reduce CPU y banda del proceso MTA, pero exige mantener el mirror sincronizado.

¿Por qué mi servidor no aparece en la lista in-game aun con ase=1?

Casi siempre es firewall en el puerto ASE (serverport+123 por defecto, UDP). La master list necesita recibir respuesta en ese puerto para listarte. Verifica iptables/ufw y, en VPS, el firewall del panel del proveedor — ambos necesitan permitir el puerto UDP del ASE.

¿Debo dejar voice=1 en producción?

Solo si forma parte del gameplay. Voice consume banda razonable (cerca de 8 kbps por jugador hablando) y suma CPU para la mezcla. En servidores grandes (200+ slots) sin mecánica de voz, deja voice=0 para ahorrar recursos.

¿Qué pasa si no defino una password en mtaserver.conf?

El servidor queda público — cualquiera en la master list puede entrar. Para servidor de desarrollo o whitelist, define una password fuerte. En servidor público de producción, déjalo vacío pero configura ACL y anti-cheat (ac) correctamente para mitigar abuso.

¿Puedo editar el mtaserver.conf con el servidor corriendo?

Puedes editar, pero la mayoría de las opciones solo recargan en el siguiente restart. Cambios en maxplayers, password y algunas ACL pueden aplicarse vía comandos de consola sin restart. Para cambios en puertos, módulos o httpserver, el restart es obligatorio.

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