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
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
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:
| Flag | Umgebungsvariable | Beschreibung | Standard |
|---|---|---|---|
--panel-type | PANEL_TYPE | Quell-Panel-Typ (marzban oder marzneshin) | marzban |
--panel-url | PANEL_URL | Quell-Panel-URL (z. B. https://marzban.example.com) | - |
--panel-username | PANEL_USERNAME | Admin-Benutzername des Quell-Panels | - |
--panel-password | PANEL_PASSWORD | Admin-Passwort des Quell-Panels | - |
--remnawave-url | REMNAWAVE_URL | Ziel-Panel-URL (z. B. https://remnawave.example.com) | - |
--remnawave-token | REMNAWAVE_TOKEN | API-Token des Ziel-Panels (wird als Authorization Bearer verwendet) | - |
--batch-size | BATCH_SIZE | Anzahl der Benutzer, die pro Batch verarbeitet werden | 100 |
--last-users | LAST_USERS | Nur die letzten N Benutzer migrieren (0 = alle Benutzer) | 0 |
--preferred-strategy | PREFERRED_STRATEGY | Traffic-Reset-Strategie (NO_RESET, DAY, WEEK, MONTH) | - |
--source-headers | SOURCE_HEADERS | Zusätzliche Header für das Quell-Panel | - |
--dest-headers | DEST_HEADERS | Zusätzliche Header für Remnawave (z. B. X-Api-Key) | - |
--preserve-status | PRESERVE_STATUS | Benutzerstatus vom Quell-Panel beibehalten | false |
--preserve-subhash | PRESERVE_SUBHASH | Benutzer-Abonnement-URL-Hash vom Quell-Panel beibehalten | false |
--internal-squad | INTERNAL_SQUAD | UUID(s) der internen Gruppe(n) zum Zuweisen (kommagetrennt) | - |
--external-squad | EXTERNAL_SQUAD | UUID der externen Gruppe, die allen erstellten Benutzern zugewiesen wird | - |
Wenn Sie Remnawave mit zusätzlicher Sicherheit durch Caddy verwenden, müssen Sie folgende Schritte ausführen:
- Melden Sie sich beim Auth-Portal an und navigieren Sie zu API Keys
- Stellen Sie einen neuen API-Key aus
- Übergeben Sie diesen Key mit dem Flag --dest-headers im folgenden Format:
--dest-headers="X-Api-Key:api-key-from-auth-portal"
- Verwenden Sie
--last-users=5fü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-strategynicht angegeben ist, wird die ursprüngliche Strategie von Marzban verwendet. DieYEAR-Strategie wird inNO_RESETumgewandelt.
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:
- Benutzeranzahl: Stellen Sie sicher, dass die Anzahl der migrierten Benutzer mit der Quelle übereinstimmt.
- Datenintegrität:
- Benutzernamen
- Passwörter (Trojan, VLESS UUID, Shadowsocks)
- Traffic-Limits und Reset-Strategien
- Ablaufdaten
- Benutzerstatus (wenn
--preserve-statusverwendet wurde) - Abonnement-URL-Hashes (wenn
--preserve-subhashverwendet wurde) - Gruppenzuweisungen (wenn
--internal-squadoder--external-squadverwendet wurde)
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
| Variable | Beschreibung | Beispielwert |
|---|---|---|
REMNAWAVE_PANEL_URL | Remnawave-Panel-URL, kann http://remnawave:3000 oder https://panel.example.com sein | http://remnawave:3000 |
APP_PORT | Der Port, auf dem der Abonnementseiten-Dienst läuft. | 3010 |
MARZBAN_LEGACY_LINK_ENABLED | Aktiviert Unterstützung für veraltete Marzban-Abonnement-Links. Muss true sein, um die folgenden Optionen zu nutzen. | true |
MARZBAN_LEGACY_SECRET_KEY | Der geheime Schlüssel aus Ihrer Marzban-Datenbank, erforderlich für die Entschlüsselung veralteter Links. | secret |
REMNAWAVE_API_TOKEN | Das vom Remnawave-Panel-Dashboard generierte API-Token (unter "API Tokens"). | token |
CUSTOM_SUB_PREFIX | Ein benutzerdefiniertes Präfix für Abonnement-URLs, das zu Ihrem Marzban-Setup passt (z. B. sub). | sub |
- Wenn
MARZBAN_LEGACY_LINK_ENABLEDauftruegesetzt ist, müssen alle nachfolgenden Variablen (MARZBAN_LEGACY_SECRET_KEY,REMNAWAVE_API_TOKENundCUSTOM_SUB_PREFIX) angegeben werden. - Um den
MARZBAN_LEGACY_SECRET_KEYabzurufen, fragen Sie Ihre Marzban-Datenbank ab mit:Wenn Ihre Marzban-Datenbank beispielsweise in einem Docker-Container mit dem NamenSELECT secret_key FROM jwt LIMIT 1;marzban-mysqlläuft, verbinden Sie sich damit:Ersetzen Siedocker exec -it marzban-mysql mysql -uroot -pPasswordmarzban-mysqlundPassworddurch Ihren tatsächlichen Container-Namen und das Root-Passwort. - Generieren Sie den
REMNAWAVE_API_TOKENim Remnawave-Dashboard unter dem Abschnitt "API Tokens".
5.3. Überprüfung der Legacy-Unterstützung
Nach dem Bereitstellen der aktualisierten Konfiguration:
- Starten Sie den Dienst
remnawave-subscription-pageneu:docker compose up -d --force-recreate - Testen Sie einen alten Marzban-Abonnement-Link, um sicherzustellen, dass er korrekt aufgelöst wird und Benutzerdaten auf der Remnawave-Abonnementseite anzeigt.