Zum Hauptinhalt springen

Migration von Marzban

Diese Anleitung führt Sie durch die Migration Ihrer Daten von einem Marzban-Panel zu einem Remnawave-Panel mithilfe des Remnawave-Migrationstools.

1. Servervorbereitung

1.1. Installation der erforderlichen Abhängigkeiten

Stellen Sie sicher, dass auf Ihrem Server die notwendigen Tools installiert sind, indem Sie die Systempakete aktualisieren und Git sowie wget installieren.

# Update system packages
sudo apt-get update

# Install Git and wget
sudo apt-get install -y git wget
tipp

Führen Sie git --version und wget --version aus, um die erfolgreiche Installation zu bestätigen.

2. Herunterladen des Migrationstools

2.1. Herunterladen der neuesten Version

Laden Sie das vorkompilierte Remnawave-Migrationstool von der GitHub-Releases-Seite herunter.

# Create and navigate to a working directory
mkdir -p /opt/remnawave && cd /opt/remnawave

# Download the latest version (v2.1.0 as of this guide)
wget https://github.com/remnawave/migrate/releases/download/v2.1.0/remnawave-migrate-v2.1.0-linux-amd64.tar.gz

2.2. Entpacken des Tools

Entpacken Sie das heruntergeladene Archiv, um auf die Binärdatei zuzugreifen.

# Extract the tarball
tar -xf remnawave-migrate-v2.1.0-linux-amd64.tar.gz
tipp

Nach dem Entpacken sollte die Binärdatei remnawave-migrate in Ihrem Verzeichnis sichtbar sein. Verwenden Sie ls -l zur Überprüfung.

3. Konfigurationseinrichtung

3.1. Einrichten der Migrationsparameter

Das Migrationstool verwendet Befehlszeilen-Flags für die Konfiguration. Unten finden Sie einen Beispielbefehl mit allen erforderlichen Parametern. Ersetzen Sie die Platzhalterwerte durch Ihre tatsächlichen Serverdetails.

./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. Konfigurationsoptionen

Das Tool unterstützt die folgenden Flags und die entsprechenden Umgebungsvariablen:

FlagUmgebungsvariableBeschreibungStandard
--panel-typePANEL_TYPEQuell-Panel-Typ (marzban oder marzneshin)marzban
--panel-urlPANEL_URLQuell-Panel-URL (z. B. https://marzban.example.com)-
--panel-usernamePANEL_USERNAMEAdmin-Benutzername des Quell-Panels-
--panel-passwordPANEL_PASSWORDAdmin-Passwort des Quell-Panels-
--remnawave-urlREMNAWAVE_URLZiel-Panel-URL (z. B. https://remnawave.example.com)-
--remnawave-tokenREMNAWAVE_TOKENAPI-Token des Ziel-Panels (wird als Authorization Bearer verwendet)-
--batch-sizeBATCH_SIZEAnzahl der Benutzer, die pro Batch verarbeitet werden100
--last-usersLAST_USERSNur die letzten N Benutzer migrieren (0 = alle Benutzer)0
--preferred-strategyPREFERRED_STRATEGYTraffic-Reset-Strategie (NO_RESET, DAY, WEEK, MONTH)-
--source-headersSOURCE_HEADERSZusätzliche Header für das Quell-Panel-
--dest-headersDEST_HEADERSZusätzliche Header für Remnawave (z. B. X-Api-Key)-
--preserve-statusPRESERVE_STATUSBenutzerstatus vom Quell-Panel beibehaltenfalse
--preserve-subhashPRESERVE_SUBHASHBenutzer-Abonnement-URL-Hash vom Quell-Panel beibehaltenfalse
--internal-squadINTERNAL_SQUADUUID(s) der internen Gruppe(n) zum Zuweisen (kommagetrennt)-
--external-squadEXTERNAL_SQUADUUID der externen Gruppe, die allen erstellten Benutzern zugewiesen wird-
tipp

Wenn Sie Remnawave mit zusätzlicher Sicherheit durch Caddy verwenden, müssen Sie folgende Schritte ausführen:

  1. Melden Sie sich beim Auth-Portal an und navigieren Sie zu API Keys
  2. Stellen Sie einen neuen API-Key aus
  3. Übergeben Sie diesen Key mit dem Flag --dest-headers im folgenden Format:
    --dest-headers="X-Api-Key:api-key-from-auth-portal"
tipp
  • Verwenden Sie --last-users=5 für eine Test-Migration mit einer kleinen Benutzerauswahl.
  • Holen Sie sich Ihren Remnawave-API-Token aus den Remnawave-Panel-Einstellungen (z. B. unter API oder Integrationen).
  • Wenn --preferred-strategy nicht angegeben ist, wird die ursprüngliche Strategie von Marzban verwendet. Die YEAR-Strategie wird in NO_RESET umgewandelt.

3.3. Benutzer Gruppen zuweisen

Sie können alle migrierten Benutzer automatisch internen und/oder externen Gruppen zuweisen:

# Assign to a single internal squad
./remnawave-migrate \
[other flags...] \
--internal-squad=e5201a6a-c50e-4b58-9ecb-a4c26c5e74c8

# Assign to multiple internal squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2,uuid3

# Assign to an external squad
./remnawave-migrate \
[other flags...] \
--external-squad=f6302b7b-d61f-5c69-0fdc-b5d37d6e85d9

# Assign to both internal and external squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2 \
--external-squad=uuid3

4. Überprüfung nach der Migration

4.1. Was zu überprüfen ist

Nach der Migration überprüfen Sie folgendes im Remnawave-Panel:

  1. Benutzeranzahl: Stellen Sie sicher, dass die Anzahl der migrierten Benutzer mit der Quelle übereinstimmt.
  2. Datenintegrität:
    • Benutzernamen
    • Passwörter (Trojan, VLESS UUID, Shadowsocks)
    • Traffic-Limits und Reset-Strategien
    • Ablaufdaten
    • Benutzerstatus (wenn --preserve-status verwendet wurde)
    • Abonnement-URL-Hashes (wenn --preserve-subhash verwendet wurde)
    • Gruppenzuweisungen (wenn --internal-squad oder --external-squad verwendet wurde)
tipp

Melden Sie sich im Remnawave-Panel an und überprüfen Sie stichprobenartig einige Benutzer, um die Datengenauigkeit zu bestätigen.

5. Unterstützung veralteter Marzban-Abonnementseiten

Nach der Migration zu Remnawave ist die einzige Möglichkeit, die Unterstützung und Darstellung veralteter Marzban-Abonnementseiten zu gewährleisten, die Verwendung des Repositories unter https://github.com/remnawave/subscription-page/.

5.1. Standard-Docker-Compose-Konfiguration

Standardmäßig sieht die docker-compose.yml-Datei für den Abonnementseiten-Dienst wie folgt aus:

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. Anpassung für Marzban-Kompatibilität

Während der Migration müssen Sie die Kompatibilität mit Marzban-Abonnementpfaden sicherstellen und die Entschlüsselung von Marzban-Abonnement-Links aktivieren. Ersetzen Sie den environment-Abschnitt in der Standardkonfiguration durch Folgendes:

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

Erläuterung der Konfigurationsoptionen

VariableBeschreibungBeispielwert
REMNAWAVE_PANEL_URLRemnawave-Panel-URL, kann http://remnawave:3000 oder https://panel.example.com seinhttp://remnawave:3000
APP_PORTDer Port, auf dem der Abonnementseiten-Dienst läuft.3010
MARZBAN_LEGACY_LINK_ENABLEDAktiviert Unterstützung für veraltete Marzban-Abonnement-Links. Muss true sein, um die folgenden Optionen zu nutzen.true
MARZBAN_LEGACY_SECRET_KEYDer geheime Schlüssel aus Ihrer Marzban-Datenbank, erforderlich für die Entschlüsselung veralteter Links.secret
REMNAWAVE_API_TOKENDas vom Remnawave-Panel-Dashboard generierte API-Token (unter "API Tokens").token
CUSTOM_SUB_PREFIXEin benutzerdefiniertes Präfix für Abonnement-URLs, das zu Ihrem Marzban-Setup passt (z. B. sub).sub
tipp
  • Wenn MARZBAN_LEGACY_LINK_ENABLED auf true gesetzt ist, müssen alle nachfolgenden Variablen (MARZBAN_LEGACY_SECRET_KEY, REMNAWAVE_API_TOKEN und CUSTOM_SUB_PREFIX) angegeben werden.
  • Um den MARZBAN_LEGACY_SECRET_KEY abzurufen, fragen Sie Ihre Marzban-Datenbank ab mit:
    SELECT secret_key FROM jwt LIMIT 1;
    Wenn Ihre Marzban-Datenbank beispielsweise in einem Docker-Container mit dem Namen marzban-mysql läuft, verbinden Sie sich damit:
    docker exec -it marzban-mysql mysql -uroot -pPassword
    Ersetzen Sie marzban-mysql und Password durch Ihren tatsächlichen Container-Namen und das Root-Passwort.
  • Generieren Sie den REMNAWAVE_API_TOKEN im Remnawave-Dashboard unter dem Abschnitt "API Tokens".

5.3. Überprüfung der Legacy-Unterstützung

Nach dem Bereitstellen der aktualisierten Konfiguration:

  1. Starten Sie den Dienst remnawave-subscription-page neu:
    docker compose up -d --force-recreate
  2. Testen Sie einen alten Marzban-Abonnement-Link, um sicherzustellen, dass er korrekt aufgelöst wird und Benutzerdaten auf der Remnawave-Abonnementseite anzeigt.