Migrar desde Marzban
Esta guía te lleva paso a paso por la migración de tus datos desde un panel Marzban a un panel Remnawave usando la herramienta de migración de Remnawave.
1. Preparación del servidor
1.1. Instalación de las dependencias necesarias
Asegúrate de que tu servidor tiene las herramientas necesarias instaladas actualizando los paquetes del sistema e instalando Git y wget.
# Actualizar paquetes del sistema
sudo apt-get update
# Instalar Git y wget
sudo apt-get install -y git wget
Ejecuta git --version y wget --version para confirmar la instalación exitosa.
2. Descarga de la herramienta de migración
2.1. Descarga de la última versión
Descarga la herramienta de migración de Remnawave precompilada desde la página de versiones de GitHub.
# Crear y navegar a un directorio de trabajo
mkdir -p /opt/remnawave && cd /opt/remnawave
# Descargar la última versión (v2.1.0 en el momento de esta guía)
wget https://github.com/remnawave/migrate/releases/download/v2.1.0/remnawave-migrate-v2.1.0-linux-amd64.tar.gz
2.2. Extracción de la herramienta
Descomprime el archivo descargado para acceder al binario.
# Extraer el archivo tar
tar -xf remnawave-migrate-v2.1.0-linux-amd64.tar.gz
Después de la extracción, deberías ver el binario remnawave-migrate en tu directorio. Usa ls -l para verificarlo.
3. Configuración
3.1. Configuración de los parámetros de migración
La herramienta de migración usa flags de línea de comandos para la configuración. A continuación se muestra un ejemplo de comando con todos los parámetros necesarios. Reemplaza los valores de marcador de posición con los detalles reales de tu servidor.
./remnawave-migrate \
--panel-type=marzban \
--panel-url=https://your-marzban-server \
--panel-username=admin \
--panel-password=your-admin-password \
--remnawave-url=https://your-remnawave-server \
--remnawave-token=your-remnawave-token \
--preserve-status
3.2. Opciones de configuración
La herramienta admite los siguientes flags y sus correspondientes variables de entorno:
| Flag | Variable de entorno | Descripción | Predeterminado |
|---|---|---|---|
--panel-type | PANEL_TYPE | Tipo de panel fuente (marzban o marzneshin) | marzban |
--panel-url | PANEL_URL | URL del panel fuente (p. ej., https://marzban.example.com) | - |
--panel-username | PANEL_USERNAME | Nombre de usuario administrador del panel fuente | - |
--panel-password | PANEL_PASSWORD | Contraseña de administrador del panel fuente | - |
--remnawave-url | REMNAWAVE_URL | URL del panel de destino (p. ej., https://remnawave.example.com) | - |
--remnawave-token | REMNAWAVE_TOKEN | Token de API del panel de destino (usado como Authorization Bearer) | - |
--batch-size | BATCH_SIZE | Número de usuarios a procesar por lote | 100 |
--last-users | LAST_USERS | Migrar solo los últimos N usuarios (0 = todos los usuarios) | 0 |
--preferred-strategy | PREFERRED_STRATEGY | Estrategia de restablecimiento de tráfico (NO_RESET, DAY, WEEK, MONTH) | - |
--source-headers | SOURCE_HEADERS | Cabeceras adicionales para el panel fuente | - |
--dest-headers | DEST_HEADERS | Cabeceras adicionales para Remnawave (p. ej., X-Api-Key) | - |
--preserve-status | PRESERVE_STATUS | Conservar el estado del usuario del panel fuente | false |
--preserve-subhash | PRESERVE_SUBHASH | Conservar el hash de URL de suscripción del usuario del panel fuente | false |
--internal-squad | INTERNAL_SQUAD | UUID(s) de escuadra(s) interna(s) a asignar (separados por coma) | - |
--external-squad | EXTERNAL_SQUAD | UUID de la escuadra externa a asignar a todos los usuarios creados | - |
Si estás usando Remnawave con seguridad adicional proporcionada por Caddy, necesitas seguir estos pasos:
- Inicia sesión en el Portal de Auth y navega a Claves de API
- Emite una nueva clave de API
- Pasa esta clave usando el flag --dest-headers en el siguiente formato:
--dest-headers="X-Api-Key:api-key-from-auth-portal"
- Usa
--last-users=5para una migración de prueba con un pequeño subconjunto de usuarios. - Obtén tu token de API de Remnawave desde la configuración del panel de Remnawave (p. ej., en API o Integraciones).
- Si
--preferred-strategyno se especifica, se usará la estrategia original de Marzban. La estrategiaYEARse convierte enNO_RESET.
3.3. Asignación de usuarios a escuadras
Puedes asignar automáticamente todos los usuarios migrados a escuadras internas y/o externas:
# Asignar a una única escuadra interna
./remnawave-migrate \
[otros flags...] \
--internal-squad=e5201a6a-c50e-4b58-9ecb-a4c26c5e74c8
# Asignar a múltiples escuadras internas
./remnawave-migrate \
[otros flags...] \
--internal-squad=uuid1,uuid2,uuid3
# Asignar a una escuadra externa
./remnawave-migrate \
[otros flags...] \
--external-squad=f6302b7b-d61f-5c69-0fdc-b5d37d6e85d9
# Asignar a escuadras internas y externas
./remnawave-migrate \
[otros flags...] \
--internal-squad=uuid1,uuid2 \
--external-squad=uuid3
4. Verificación posterior a la migración
4.1. Qué verificar
Después de la migración, verifica lo siguiente en el panel de Remnawave:
- Recuento de usuarios: Asegúrate de que el número de usuarios migrados coincide con el origen.
- Integridad de los datos:
- Nombres de usuario
- Contraseñas (Trojan, UUID VLESS, Shadowsocks)
- Límites de tráfico y estrategias de restablecimiento
- Fechas de vencimiento
- Estados de usuario (si se usó
--preserve-status) - Hashes de URL de suscripción (si se usó
--preserve-subhash) - Asignaciones de escuadra (si se usó
--internal-squado--external-squad)
Inicia sesión en el panel de Remnawave y verifica aleatoriamente algunos usuarios para confirmar la precisión de los datos.
5. Soporte de páginas de suscripción heredadas
Después de migrar a Remnawave, la única forma de garantizar el soporte y renderizado de páginas de suscripción heredadas de Marzban es usando el repositorio en https://github.com/remnawave/subscription-page/.
5.1. Configuración predeterminada de Docker Compose
De forma predeterminada, el archivo docker-compose.yml para el servicio de página de suscripción tiene este aspecto:
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=http://remnawave:3000
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true
5.2. Ajuste para compatibilidad con Marzban
Durante la migración, debes garantizar la compatibilidad con las rutas de suscripción de Marzban y habilitar el descifrado de los enlaces de suscripción de Marzban. Reemplaza la sección environment en la configuración predeterminada con lo siguiente:
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=http://remnawave:3000
- MARZBAN_LEGACY_LINK_ENABLED=true
- MARZBAN_LEGACY_SECRET_KEY=secret
- REMNAWAVE_API_TOKEN=token
- CUSTOM_SUB_PREFIX=sub
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true
Opciones de configuración explicadas
| Variable | Descripción | Valor de ejemplo |
|---|---|---|
REMNAWAVE_PANEL_URL | URL del panel Remnawave, puede ser http://remnawave:3000 o https://panel.example.com | http://remnawave:3000 |
APP_PORT | Puerto en el que se ejecuta el servicio de página de suscripción. | 3010 |
MARZBAN_LEGACY_LINK_ENABLED | Habilita el soporte para enlaces de suscripción heredados de Marzban. Debe ser true para usar las opciones a continuación. | true |
MARZBAN_LEGACY_SECRET_KEY | La clave secreta de tu base de datos de Marzban, requerida para descifrar los enlaces heredados. | secret |
REMNAWAVE_API_TOKEN | El token de API generado desde el panel de Remnawave (en "API Tokens"). | token |
CUSTOM_SUB_PREFIX | Un prefijo personalizado para las URL de suscripción para coincidir con tu configuración de Marzban (p. ej., sub). | sub |
- Si
MARZBAN_LEGACY_LINK_ENABLEDestá configurado entrue, todas las variables posteriores (MARZBAN_LEGACY_SECRET_KEY,REMNAWAVE_API_TOKENyCUSTOM_SUB_PREFIX) deben proporcionarse. - Para obtener el
MARZBAN_LEGACY_SECRET_KEY, consulta tu base de datos de Marzban con:Por ejemplo, si tu base de datos de Marzban está en un contenedor Docker llamadoSELECT secret_key FROM jwt LIMIT 1;marzban-mysql, conéctate a él usando:Reemplazadocker exec -it marzban-mysql mysql -uroot -pPasswordmarzban-mysqlyPasswordcon el nombre real de tu contenedor y la contraseña de root. - Genera el
REMNAWAVE_API_TOKENdesde el panel de Remnawave en la sección "API Tokens".
5.3. Verificación del soporte heredado
Después de implementar la configuración actualizada:
- Reinicia el servicio
remnawave-subscription-page:docker compose up -d --force-recreate - Prueba un antiguo enlace de suscripción de Marzban para asegurarte de que se resuelva correctamente y muestre los datos del usuario en la página de suscripción de Remnawave.