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.
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:
| Servicio | Puerto TCP |
|---|---|
| ConnectServer | 44405 |
| GameServer (por canal) | 55901, 55902, 55903... |
| DataServer | 57900 (raramente expuesto) |
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;
}
}
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
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
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:
- Verifica que Nginx/HAProxy esté corriendo:
systemctl status nginxosystemctl status haproxy - Prueba el puerto localmente en el proxy:
nc -zv 127.0.0.1 44405 - Confirma que el ConnectServer esté corriendo en el VPS MuServer
- Revisa los logs:
tail -f /var/log/nginx/error.logojournalctl -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.
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.