Cómo crear un servidor MTA:SA desde cero en Ubuntu Linux
Tutorial técnico paso a paso para montar un servidor MTA:SA en VPS Ubuntu Linux: instalación, configuración, firewall, gamemode y optimización.
Montar un servidor MTA:SA (Multi Theft Auto: San Andreas) en Linux es más sencillo de lo que sugiere su ecosistema antiguo — los binarios oficiales ya vienen listos para distribuciones modernas y el servidor no requiere interfaz gráfica. El punto de fricción suele ser la configuración del firewall (UDP, no TCP) y entender que MTA es un servidor de juego multijugador independiente del GTA:SA original — el cliente conecta directo a la IP de tu VPS.
Este tutorial cubre la instalación desde cero en Ubuntu 24.04 LTS, configuración del mtaserver.conf, despliegue de un gamemode básico, aislamiento mediante usuario dedicado, supervisión con systemd y firewall UFW. Tiempo estimado de ejecución: 25-35 minutos. Vas a terminar con un servidor MTA:SA en línea, registrado en la master list pública y reiniciando automáticamente tras cada reboot.
La persona objetivo es un owner nuevo de comunidad MTA:SA configurando el mtaserver por primera vez. No se requiere experiencia previa con Linux — todos los comandos están explicados.
Requisitos previos
VPS con Ubuntu 24.04 LTS (Server, no Desktop), acceso SSH como usuario sudo, al menos 1 GB de RAM y 5 GB de disco libre. Conexión estable para descargar ~30 MB del paquete MTA. CPU x86_64 obligatoria (ARM64 no funciona).
Confirma que tienes lo necesario antes de continuar:
Ubuntu 24.04 LTS x86_64 1 GB (2 GB recomendado) 22003/UDP 22005/TCP 22126/UDP El puerto 22003/UDP es el puerto de juego donde se conectan los clientes MTA. El 22005/TCP lo usa el recurso HTTP interno (resources, descargas). El 22126/UDP es el ASE (All-Seeing Eye) — protocolo que permite que el servidor aparezca en la lista pública. Todos deben estar abiertos en el firewall.
Instalación del MTA:SA Server
Esta sección cubre desde la creación del usuario dedicado hasta el binario corriendo por primera vez. Ejecutar servicios de juego con un usuario propio (no root) limita el impacto de cualquier exploit en scripts Lua de terceros.
Actualiza el índice de paquetes e instala las dependencias básicas:
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget tar libncurses6 libreadline8 ca-certificatesEl MTA:SA Server necesita libncurses6 y libreadline8 para la consola interactiva. En Ubuntu 24.04 estos paquetes están en el repositorio por defecto.
Crea un usuario dedicado mtasa sin privilegios de login:
sudo useradd -r -m -d /opt/mtasa -s /bin/bash mtasa
sudo su - mtasaEl flag -r crea usuario de sistema, -m crea el home en /opt/mtasa. Ahora estás operando como mtasa — todos los próximos comandos corren en ese contexto, excepto donde se indique con sudo explícito.
Descarga el paquete oficial Linux del MTA:SA Server:
cd /opt/mtasa
wget https://linux.multitheftauto.com/dl/multitheftauto_linux_x64.tar.gz
tar -xzf multitheftauto_linux_x64.tar.gz
mv multitheftauto_linux_x64 server
cd serverLa URL linux.multitheftauto.com/dl/ es el endpoint oficial mantenido por el equipo MTA. Verifica que el archivo llegó completo con ls -lh multitheftauto_linux_x64.tar.gz — debe pesar ~30 MB.
Descarga los recursos por defecto (resources) — sin ellos el servidor arranca pero no tiene ningún modo de juego:
cd /opt/mtasa/server/mods/deathmatch
wget https://mirror.multitheftauto.com/mtasa/resources/mtasa-resources-latest.zip
unzip mtasa-resources-latest.zip -d resources/
rm mtasa-resources-latest.zipSi unzip no está disponible, instálalo con sudo apt install -y unzip (de vuelta como usuario sudo) y rehaz el paso.
Configuración del mtaserver.conf
El archivo mtaserver.conf controla todo el comportamiento del servidor: nombre, contraseña, slots, gamemode inicial, ASE, IP pública. Está en /opt/mtasa/server/mods/deathmatch/mtaserver.conf y usa formato XML.
Abre el archivo de configuración:
nano /opt/mtasa/server/mods/deathmatch/mtaserver.confLocaliza y ajusta los campos críticos:
<servername>Mi Servidor MTA</servername>
<serverip>auto</serverip>
<serverport>22003</serverport>
<maxplayers>32</maxplayers>
<httpport>22005</httpport>
<password></password>
<ase>1</ase>
<donotbroadcastlan>0</donotbroadcastlan>Con <ase>1</ase> el servidor se registra en la master list pública. Si quieres servidor privado para amigos, déjalo en 0. La conexión por IP directa funciona en ambos casos.
Configura la contraseña de admin para la consola remota. Localiza el bloque <resource src="admin" /> y abre el archivo acl.xml:
nano /opt/mtasa/server/mods/deathmatch/acl.xmlEdita el grupo Admin y ajusta el objeto <object name="user.admin" />. La contraseña real se define al agregar el usuario por primera vez vía consola del servidor con el comando addaccount admin TU_CONTRASENA_FUERTE.
La cuenta admin tiene control total — incluso ejecutar Lua arbitrario en el servidor. Usa una contraseña de al menos 16 caracteres aleatorios. Contraseña filtrada = servidor comprometido.
Define el gamemode inicial. Edita mtaserver.conf nuevamente y localiza la sección <resource>. Agrega o ajusta:
<resource src="freeroam" startup="1" protected="0" />
<resource src="play" startup="1" protected="0" />freeroam es el gamemode default más simple — los jugadores aparecen libres y pueden usar comandos para spawnear vehículos. Para probar el servidor por primera vez, es suficiente.
Primera ejecución y prueba
Antes de configurar systemd, corre el servidor manualmente para confirmar que todo funciona. Esto facilita ver errores de configuración en tiempo real.
Inicia el servidor en primer plano:
cd /opt/mtasa/server
./mta-server64La consola muestra la inicialización: carga de módulos, lectura del mtaserver.conf, registro de recursos y, por último, el mensaje Server started and is ready to accept connections!. Si aparece un error de biblioteca faltante, instala libstdc++6 y lib32stdc++6.
Crea la cuenta de admin desde la consola interactiva (sin cerrar el servidor):
addaccount admin TU_CONTRASENA_AQUI
aclrequest allow admin allDespués detén el servidor con Ctrl+C — vamos a ponerlo bajo systemd a continuación.
Firewall y systemd
El servidor corriendo manualmente sirve para probar, pero en producción necesitas un supervisor (para reiniciar en crash) y firewall (para bloquear lo que no es juego).
Abre los puertos necesarios en UFW (como usuario sudo, fuera del contexto mtasa):
sudo ufw allow 22003/udp comment 'MTA:SA game port'
sudo ufw allow 22005/tcp comment 'MTA:SA HTTP'
sudo ufw allow 22126/udp comment 'MTA:SA ASE'
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw enable
sudo ufw status verboseAntes de ejecutar ufw enable, confirma que la regla 22/tcp esté agregada. Habilitar UFW sin ella te deja fuera de la VPS. Si estás usando un puerto SSH personalizado, libéralo explícitamente.
Crea el archivo de unit systemd en /etc/systemd/system/mtasa.service:
sudo nano /etc/systemd/system/mtasa.serviceContenido:
[Unit]
Description=MTA:SA Server
After=network.target
[Service]
Type=simple
User=mtasa
Group=mtasa
WorkingDirectory=/opt/mtasa/server
ExecStart=/opt/mtasa/server/mta-server64
Restart=on-failure
RestartSec=10
StandardOutput=append:/var/log/mtasa/server.log
StandardError=append:/var/log/mtasa/server.log
[Install]
WantedBy=multi-user.targetCrea el directorio de logs y habilita el servicio:
sudo mkdir -p /var/log/mtasa
sudo chown mtasa:mtasa /var/log/mtasa
sudo systemctl daemon-reload
sudo systemctl enable --now mtasaVerificación
Confirma que el servidor está corriendo como servicio supervisado y respondiendo en la red.
sudo systemctl status mtasa
sudo ss -ulnp | grep 22003
tail -f /var/log/mtasa/server.log
systemctl status debe mostrar active (running). ss -ulnp debe listar el proceso mta-server64 escuchando en el puerto 22003/UDP. El log debe contener Server started and is ready to accept connections!.
Para una prueba de conexión real, abre el cliente MTA:SA en Windows, ve a “Quick connect” y conecta a IP_DE_TU_VPS:22003. Si quieres que aparezca en la master list del servidor, tarda 2-5 minutos en propagarse — antes de eso, la conexión directa por IP ya funciona.
Resolución de problemas
”address already in use” al iniciar
Otra instancia sigue corriendo. Detenla con sudo systemctl stop mtasa y pkill -u mtasa mta-server64. Espera 30 segundos antes de reiniciar — el socket UDP puede tardar en liberarse.
El servidor no aparece en la master list
Confirma <ase>1</ase> en el mtaserver.conf y que el firewall UDP 22126 esté abierto. En algunas VPS detrás de NAT, cambia <serverip>auto</serverip> por la IP pública explícita. La propagación al master tarda hasta 5 minutos tras el primer arranque.
Los jugadores conectan pero se caen tras el login
Casi siempre es el puerto HTTP 22005/TCP bloqueado. Los clientes necesitan descargar resources vía HTTP — sin eso, timeout y disconnect. Confirma con sudo ufw status que 22005/tcp esté en ALLOW.
Para servidores con jugadores en España o Latinoamérica, la latencia de la VPS importa más que la CPU bruta. Datacenters en São Paulo entregan típicamente 5-15 ms para gran parte de Sudamérica, contra 120-180 ms en datacenters US East para la misma región.
Próximos pasos
Con el servidor base en línea, los siguientes puntos de evolución:
- Configurar recursos personalizados en
/opt/mtasa/server/mods/deathmatch/resources/ - Configurar respaldo automático del directorio
resources/y del archivointernal.db(base SQLite del servidor) - Agregar un segundo servidor con un modo de juego distinto en otro puerto UDP
- Implementar monitoreo de jugadores online vía API HTTP expuesta por MTA
- Configurar SSL/TLS en el httpserver para los resources si vas a exponer descargas vía CDN
Si estás ejecutando esto en producción y quieres baja latencia para jugadores de Sudamérica, una VPS Hostini en São Paulo entrega típicamente 5-15 ms para gran parte del territorio regional, con protección DDoS en el borde y red dimensionada para picos UDP — perfil exacto que exigen los servidores de juego.
Preguntas frecuentes
¿Cuál es la diferencia entre MTA:SA y SA-MP para hospedar en Linux?
MTA:SA tiene servidor Linux oficial mantenido por el equipo Multi Theft Auto con binarios actualizados para glibc moderna. SA-MP es un proyecto separado, con paquete Linux más antiguo y dependencias de bibliotecas de 32-bit. Para Ubuntu 24.04 LTS, MTA es más sencillo de montar hoy.
¿Cuánta RAM y CPU necesito para un servidor con 50 jugadores?
Un servidor MTA:SA típico con gamemode roleplay o DM consume entre 200 y 500 MB de RAM y normalmente 1 core. Con 50 jugadores activos y scripts Lua complejos, 2 vCPUs y 2 GB de RAM dan holgura. El cuello de botella suele ser la latencia de red, no la CPU.
¿Puedo correr el MTA:SA Server dentro de un contenedor Docker?
Sí, funciona, pero añade una capa de NAT que puede complicar la detección de IP pública y el port forwarding UDP. Para producción, correrlo directamente en el host con systemd es más predecible. Los contenedores tienen sentido para entornos de prueba aislados.
¿Cómo hago que el servidor aparezca en la lista master pública?
En mtaserver.conf, define <serverip>auto</serverip> y <ase>1</ase>. El servidor consulta la IP pública por sí mismo y se registra en la master list al iniciar. Si está detrás de NAT (caso de algunas VPS), fuerza la IP pública manualmente en el campo serverip.
¿El MTA:SA corre en ARM64 (Ampere, Graviton)?
No. El binario oficial Linux está compilado para x86_64 y depende de bibliotecas 32-bit. Usa VPS con CPU Intel o AMD x86_64 — cualquier plan estándar sirve. ARM64 es incompatible y tratar de correrlo vía emulación degrada el rendimiento al punto de inviabilizarlo.