El mayor portal de MU Online de Brasil — desde 2003
Tutorial Avanzado Tutoriais

Cómo Configurar Proxy Inverso para Proteger IP del Servidor MU

Aprende a configurar un proxy inverso TCP con HAProxy y Nginx para ocultar la IP real de tu servidor MU Online y protegerlo contra ataques DDoS con dos VPS.

EQ Equipo ViciadosMU · Actualizado el 3 jul 2026 · ⏱ 12 min de lectura

Exponer la IP real de tu servidor MU Online es una invitación abierta a ataques DDoS. Un solo atacante con acceso a herramientas comunes puede derribar un VPS sin protección en minutos. La solución es interponer un proxy inverso TCP en un segundo servidor, de modo que jugadores y atacantes jamás vean la IP donde MuServer realmente corre.

Esta guía cubre la configuración completa con HAProxy y Nginx (módulo stream) en un VPS de borde separado, además de los ajustes en MuServer y el firewall del servidor principal.

Arquitectura de la Solución

Jugadores → VPS Proxy/Borde (IP pública, divulgada) → VPS MuServer (IP real, oculta)
             44405, 55901-55910 (TCP)                    44405, 55901-55910

El VPS proxy es el único servidor con esos puertos abiertos a internet. El VPS de MuServer bloquea todas las conexiones externas en esos puertos, aceptando únicamente el tráfico proveniente de la IP del proxy.

Puertos estándar de MU Online que necesitan proxy:

ServicioPuerto TCP
ConnectServer44405
GameServer (por canal)55901, 55902, 55903...
DataServer57900 (raramente expuesto)
Nota: Necesitas dos servidores: el VPS principal donde corre MuServer y un VPS de borde (puede ser un nodo económico) que actúa como proxy. El VPS de borde es el único cuya IP será publicada a los jugadores.

Parte 1 — Proxy TCP con Nginx (módulo stream)

Paso 1: Instalar Nginx con soporte stream

En el VPS proxy (Ubuntu/Debian):

apt update && apt install nginx-full -y
nginx -V 2>&1 | grep -- --with-stream
# Salida esperada: --with-stream o --with-stream=dynamic

Paso 2: Configurar el bloque stream en nginx.conf

Edita /etc/nginx/nginx.conf y agrega el bloque stream fuera del bloque http, justo antes del cierre del archivo:

stream {

    # ConnectServer
    upstream mu_connect {
        server 203.0.113.50:44405;  # IP real de tu VPS MuServer
    }
    server {
        listen 44405;
        proxy_pass mu_connect;
        proxy_timeout 10m;
        proxy_connect_timeout 5s;
    }

    # GameServer canal 0
    upstream mu_gs1 {
        server 203.0.113.50:55901;
    }
    server {
        listen 55901;
        proxy_pass mu_gs1;
        proxy_timeout 30m;
        proxy_connect_timeout 5s;
    }

    # GameServer canal 1
    upstream mu_gs2 {
        server 203.0.113.50:55902;
    }
    server {
        listen 55902;
        proxy_pass mu_gs2;
        proxy_timeout 30m;
        proxy_connect_timeout 5s;
    }
}
Atenção: Reemplaza 203.0.113.50 con la IP real de tu VPS MuServer. Mantén esta IP en absoluto secreto. Nunca la menciones en paneles públicos, foros o logs.

Paso 3: Validar y recargar

nginx -t
# nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl reload nginx
systemctl status nginx

Parte 2 — Alternativa con HAProxy

HAProxy provee health checks automáticos y un panel de estadísticas, siendo preferible cuando se administran múltiples GameServers o se requiere balanceo de carga.

Paso 4: Instalar y configurar HAProxy

apt update && apt install haproxy -y
haproxy -v
# HAProxy version 2.4.x o superior

Edita /etc/haproxy/haproxy.cfg:

global
    log /dev/log local0
    maxconn 50000
    daemon

defaults
    log     global
    mode    tcp
    option  tcplog
    option  dontlognull
    timeout connect 5s
    timeout client  30m
    timeout server  30m

# ConnectServer
frontend mu_connect_front
    bind *:44405
    default_backend mu_connect_back

backend mu_connect_back
    server vps_real 203.0.113.50:44405 check inter 5s rise 2 fall 3

# GameServer canal 0
frontend mu_gs1_front
    bind *:55901
    default_backend mu_gs1_back

backend mu_gs1_back
    server vps_real 203.0.113.50:55901 check inter 5s rise 2 fall 3

# GameServer canal 1
frontend mu_gs2_front
    bind *:55902
    default_backend mu_gs2_back

backend mu_gs2_back
    server vps_real 203.0.113.50:55902 check inter 5s rise 2 fall 3

# Panel de estadísticas (acceso restringido)
listen stats
    bind *:8404
    mode http
    stats enable
    stats uri /haproxy-stats
    stats auth admin:CambiaPorContrasenaFuerte
    stats refresh 10s
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy && systemctl enable haproxy

Accede a http://IP_DEL_PROXY:8404/haproxy-stats para monitorear conexiones activas y estado de los backends en tiempo real.

Parte 3 — Ajustes en MuServer

Paso 5: Actualizar CSConfig.ini en el ConnectServer

Edita ConnectServer/CSConfig.ini en el VPS MuServer:

[CONNECT_SERVER]
Port = 44405
PublicIP = 177.77.77.10        ; IP del VPS proxy — divulgada a los clientes
InternalIP = 0.0.0.0           ; Escucha en todas las interfaces locales
MaxConnections = 10000
ServerListFile = ServerList.dat

Paso 6: Actualizar ServerList.dat

El archivo ConnectServer/ServerList.dat debe referenciar la IP del proxy en cada entrada de GameServer:

[SERVER_INFO]
ServerCode = 0
ServerName = Servidor Principal
ServerAddress = 177.77.77.10   ; IP del proxy, no la IP real del VPS
ServerPort = 55901

Paso 7: Actualizar la tabla SQL (Season 6+)

En servidores Season 6 y posteriores, el ConnectServer lee la lista de servidores desde la base de datos:

USE MuOnline;
GO

-- Verificar configuración actual
SELECT ServerCode, ServerName, ServerIp, ServerPort
FROM GameServerInfo
ORDER BY ServerCode;

-- Actualizar todos los GameServers a la IP del proxy
UPDATE GameServerInfo
SET ServerIp = '177.77.77.10'
WHERE ServerCode IN (0, 1, 2);
-- Ajusta los códigos según la configuración de tus canales

GO
Dica: En versiones Season 2-S4, busca el archivo ConnectServer/ServerList.dat o ServerInfo.dat. El campo de IP generalmente está en la segunda columna, separada por coma o tabulación. Reemplaza todas las ocurrencias de la IP real por la IP del proxy.

Parte 4 — Firewall en el VPS MuServer

Paso 8: Restringir el acceso directo a los puertos MU

En el VPS MuServer (Windows Server), abre PowerShell como Administrador:

$ProxyIP = "177.77.77.10"   # IP del VPS proxy

# Permitir ConnectServer solo desde el proxy
New-NetFirewallRule -DisplayName "MU ConnectServer via Proxy" `
    -Direction Inbound -Protocol TCP -LocalPort 44405 `
    -RemoteAddress $ProxyIP -Action Allow

# Permitir GameServers solo desde el proxy
New-NetFirewallRule -DisplayName "MU GameServers via Proxy" `
    -Direction Inbound -Protocol TCP -LocalPort 55901-55910 `
    -RemoteAddress $ProxyIP -Action Allow

# Bloquear acceso externo directo (regla de menor prioridad)
New-NetFirewallRule -DisplayName "MU Block Direct External" `
    -Direction Inbound -Protocol TCP `
    -LocalPort 44405,55901,55902,55903,55904,55905 `
    -Action Block
Atenção: En Windows Firewall, las reglas Allow tienen precedencia sobre las reglas Block cuando ambas aplican al mismo paquete. Confirma el comportamiento en el panel wf.msc antes de terminar tu sesión de administración. Prueba conectando al servidor antes de cerrar la sesión RDP.

Verificación Final

Desde el VPS proxy, prueba la conectividad al VPS MuServer:

nc -zv 203.0.113.50 44405   # debe retornar "succeeded"
nc -zv 203.0.113.50 55901

Desde tu máquina local, prueba los puertos en el proxy:

# Linux/Mac
nc -zv 177.77.77.10 44405

# Windows PowerShell
Test-NetConnection -ComputerName 177.77.77.10 -Port 44405
Test-NetConnection -ComputerName 177.77.77.10 -Port 55901

Confirma que la IP real no se filtra a los clientes usando Wireshark en el cliente del juego: captura paquetes en el puerto 44405 y verifica que el campo ServerAddress en los paquetes 0xF4 devueltos por el ConnectServer muestre la IP del proxy, no 203.0.113.50.

Solución de Problemas

Los jugadores no pueden conectar después del cambio:

  1. Verifica que Nginx/HAProxy esté corriendo: systemctl status nginx o systemctl status haproxy
  2. Prueba el puerto localmente en el proxy: nc -zv 127.0.0.1 44405
  3. Confirma que el ConnectServer esté corriendo en el VPS MuServer
  4. Revisa los logs: tail -f /var/log/nginx/error.log o journalctl -u haproxy -f

El cliente MU muestra "Unable to connect to server":

El ejecutable del cliente o el connect.ini aún apunta a la IP antigua. En clientes Season 6, localiza connect.ini en la carpeta del cliente y actualiza el campo de IP del ConnectServer a la IP del proxy.

La latencia es mayor a la esperada:

Usa un VPS proxy geográficamente cercano al VPS MuServer, idealmente en el mismo datacenter. La diferencia de latencia debe ser menor a 5ms en redes de calidad. Si ambos están en el mismo datacenter, usa la IP de red interna (10.x.x.x) en lugar de la IP pública para la comunicación proxy → MuServer, reduciendo la latencia a menos de 1ms.

Dica: Para recargar la configuración de HAProxy sin desconectar jugadores conectados, usa systemctl reload haproxy. Esto aplica la nueva configuración de forma graciosa sin cerrar las conexiones TCP existentes — los jugadores en juego no son desconectados durante el recarga.

Perguntas frequentes

¿Por qué usar proxy inverso en vez de solo un firewall?

Un firewall filtra el tráfico pero sigue exponiendo la IP real del VPS. Con un proxy inverso, los jugadores y atacantes solo ven la IP del nodo proxy — la IP real del servidor de juego queda completamente oculta, incluso ante fugas por logs de DNS o análisis de paquetes con Wireshark.

¿El proxy inverso agrega latencia para los jugadores?

Sí, pero mínimamente. Un proxy en la misma región que tu servidor agrega típicamente 2-8ms extra. Para MU Online esto es aceptable; el verdadero cuello de botella de latencia es la distancia geográfica entre el jugador y el servidor, no el salto adicional por el proxy.

¿Necesito dos servidores VPS para que funcione?

Sí. La arquitectura recomendada usa un VPS económico como nodo proxy (1vCPU/1GB RAM es suficiente) y tu VPS principal para el servidor MU. El VPS proxy absorbe o filtra el DDoS mientras el servidor real permanece inaccesible directamente.

¿Cómo actualizo el ConnectServer.ini después de cambiar al proxy?

Actualiza el campo PublicIP o ServerAddress en CSConfig.ini para que apunte a la IP del VPS proxy. En Season 6+, actualiza también la tabla GameServerInfo en la base de datos MuOnline via SQL: UPDATE GameServerInfo SET ServerIp = 'IP_DEL_PROXY' WHERE ServerCode IN (0,1,2).

¿Puedo usar Nginx para el proxy TCP en lugar de HAProxy?

Sí. Nginx con el módulo stream hace proxy TCP nativo. Instala nginx-full (que incluye --with-stream) y agrega un bloque stream fuera del bloque http en nginx.conf con los puertos 44405 y 55901-55910.

EQ

Equipo ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Sigue leyendo

Artículos relacionados