Wenn es mehrere VPN-Server und Dutzende oder Hunderte Benutzer gibt, wird es in Marzban eng, und viele steigen auf Remnawave um, ein Panel, das für viele Server gleichzeitig ausgelegt ist. Für den Umzug müssen Sie die Benutzer nicht neu anlegen und ihnen keine neuen Schlüssel schicken. Remnawave hat ein offizielles Tool namens remnawave-migrate, das die Benutzer über die API von Marzban abruft und in Remnawave anlegt. In diesem Artikel sehen wir uns an, was es überträgt, wie Sie ohne Ausfallzeit umziehen und wie die alten Abonnement-Links weiter funktionieren.
Den gesamten Umzug haben wir auf unserem Server nachvollzogen. Marzban wurde dort mit unserem Skript installiert, das Übertragungstool hatte die Version 2.1.0, Remnawave 3.4.5 und die Abonnementseite 8.0.0.
So läuft der Umzug ab
Ein VPN-Panel speichert zwei verschiedene Gruppen von Daten. Die erste betrifft die Benutzer. Das sind Namen, Kennungen für die Protokolle, Traffic-Limits und Laufzeiten. Die zweite betrifft die Server selbst. Das sind die Xray-Einstellungen, Ports, Reality-Schlüssel und Websites zur Tarnung. Das Tool überträgt nur die erste Gruppe, und den Serverteil richten Sie in Remnawave neu ein. Das ist folgerichtig, denn Remnawave ist anders aufgebaut. Dort werden die Verbindungseinstellungen in Konfigurationsprofilen gespeichert, und die Verbindungen selbst laufen auf eigenen Nodes.
Für jeden Benutzer überträgt das Tool den Namen, den Status, die UUID für VLESS, die Passwörter für Trojan und Shadowsocks, das Traffic-Limit und die Art, wie es zurückgesetzt wird, das Ablaufdatum, das Erstellungsdatum und die Beschreibung. Aus der Abonnement-Adresse von Marzban ermittelt es die kurze Abonnement-Kennung in Remnawave. Der verbrauchte Traffic steht nicht auf dieser Liste, deshalb beginnen die Zähler in Remnawave bei null. Wenn ein Benutzer in Marzban ein jährliches Zurücksetzen des Traffics hatte, wird daraus in Remnawave „ohne Zurücksetzen“, weil es dort keinen solchen Zeitraum gibt. Benutzer ohne Ablaufdatum erhalten das Datum 31.12.2099, im Panel wird es als unendlich angezeigt.
Ein Detail ist nicht offensichtlich. Remnawave akzeptiert keine Namen mit weniger als sechs Zeichen, deshalb hängt das Tool an kurze Namen Unterstriche an. In unserem Test wurde aus alice der Name alice_ und aus bob der Name bob___. Auf die Abonnements wirkt sich das nicht aus, die alten Links finden solche Benutzer auch nach der Umbenennung.
Da die UUIDs der Benutzer erhalten bleiben, der Serverteil aber neu angelegt wird, müssen die Geräte nach dem Umzug eine neue Konfiguration erhalten. Am einfachsten geht das über das Abonnement. Bleibt das Abonnement erhalten, holt sich die App die neuen Einstellungen bei der nächsten Aktualisierung selbst, und der Benutzer muss nichts tun.
Was Sie brauchen
- Ein laufendes Marzban, aus dem Sie die Benutzer übertragen.
- Ein fertiges Remnawave-Panel mit mindestens einem Node, einem VLESS-Reality-Profil und einem Host. Falls Sie es noch nicht haben, installieren Sie es nach unserer Anleitung. Prüfen Sie mit einem Testbenutzer, ob die Verbindung funktioniert, und übertragen Sie erst danach die übrigen Benutzer.
- SSH-Zugang zum Marzban-Server. Am bequemsten starten Sie das Tool direkt dort.
Schritt 1. API-Token in Remnawave erstellen
Das Tool legt die Benutzer über die API von Remnawave an und braucht dafür ein Token.
- Öffnen Sie im Remnawave-Panel den Bereich Remnawave Settings und scrollen Sie nach unten bis zum Block API tokens.
- Klicken Sie auf die Schaltfläche + unten rechts im Block.
- Geben Sie einen Namen ein, zum Beispiel
migrate, und die Gültigkeitsdauer in Tagen. Für den Umzug reicht ein Tag. - Wählen Sie den Rechtesatz Full access (Полный доступ) und klicken Sie auf Create (Создать).
- Kopieren Sie das Token. Das Panel zeigt es nur ein einziges Mal an.

API-Token erstellen
Das Token gibt vollen Zugriff auf das Panel
Bewahren Sie es wie ein Passwort auf und löschen Sie es nach dem Umzug, wenn Sie es nicht mehr brauchen.
Schritt 2. UUID des Squads ermitteln
In Remnawave erhält ein Benutzer Verbindungen nur über einen Squad, zu dem ein Konfigurationsprofil gehört. Wenn Sie Benutzer ohne Squad übertragen, bleiben ihre Abonnements leer. Deshalb fügen wir sie gleich bei der Übertragung zum Squad Default-Squad hinzu, in dem Ihr VLESS-Reality-Profil aktiviert ist. Die UUID des Squads erhalten Sie über die API.
# Statt TOKEN und panel.ihre-domain.com Ihre eigenen Werte eintragen
curl -s -H "Authorization: Bearer TOKEN" https://panel.ihre-domain.com/api/internal-squads \
| python3 -c "import json,sys; [print(s['uuid'], s['name']) for s in json.load(sys.stdin)['response']['internalSquads']]"Der Befehl gibt die Liste der Squads aus. Kopieren Sie die UUID aus der Zeile mit Default-Squad.
Schritt 3. Tool auf den Marzban-Server herunterladen
# Ordner für das Tool
mkdir -p /opt/remnawave-migrate && cd /opt/remnawave-migrate
# Version 2.1.0 herunterladen und entpacken
wget https://github.com/remnawave/migrate/releases/download/v2.1.0/remnawave-migrate-v2.1.0-linux-amd64.tar.gz
tar -xf remnawave-migrate-v2.1.0-linux-amd64.tar.gz
# Liste der Parameter
./remnawave-migrate --help
Parameter des Übertragungstools
Prüfen Sie vor dem Start auf der Seite mit den Releases, ob eine neuere Version erschienen ist, und ändern Sie bei Bedarf die Nummer im Befehl.
Schritt 4. Probelauf durchführen
Übertragen Sie zuerst einige der zuletzt angelegten Benutzer, um sicherzugehen, dass alles richtig eingerichtet ist. Wenn Marzban mit unserem Skript installiert wurde, liegen Benutzername und Passwort des Administrators in der Datei /root/marzban-credentials.txt, und der Befehl unten liest sie selbst von dort aus.
cd /opt/remnawave-migrate
# Zugangsdaten von Marzban aus der Datei, die unser Skript angelegt hat
export PANEL_TYPE=marzban
export PANEL_URL=http://127.0.0.1:PANEL_PORT
export PANEL_USERNAME=$(awk '/^Логин:/ {print $2}' /root/marzban-credentials.txt)
export PANEL_PASSWORD=$(awk '/^Пароль:/ {print $2}' /root/marzban-credentials.txt)
# Daten von Remnawave
export REMNAWAVE_URL=https://panel.ihre-domain.com
export REMNAWAVE_TOKEN=TOKEN
export INTERNAL_SQUAD=SQUAD_UUID
# Nur die 5 zuletzt angelegten Benutzer übertragen
./remnawave-migrate --last-users=5 --preserve-status --preserve-subhashUnser Skript schreibt diese Datei auf Russisch, deshalb müssen die Wörter Логин (Benutzername) und Пароль (Passwort) im Befehl genau so bleiben und dürfen nicht übersetzt werden.
Tragen Sie statt PANEL_PORT den Port aus der Adresse des Marzban-Panels ein, das Skript hat ihn am Ende der Installation angezeigt. Wenn Marzban auf andere Weise installiert wurde, tragen Sie in PANEL_URL die Adresse ein, unter der Sie das Panel öffnen, und geben Sie Benutzername und Passwort von Hand ein.
Zwei Parameter am Ende des Befehls sind wichtig.
--preserve-statusbehält den Status der Benutzer bei. Ohne diesen Parameter werden alle übertragenen Benutzer aktiv, auch wenn sie in Marzban deaktiviert waren oder ihre Laufzeit abgelaufen war.--preserve-subhashbehält die Abonnement-Kennungen von Marzban bei. Er wird gebraucht, damit die alten Abonnement-Links weiter bedient werden können, mehr dazu unten.
Das Tool schreibt jeden verarbeiteten Benutzer ins Protokoll und meldet am Ende Migration completed successfully!. Zeilen mit was sanitized to bedeuten, dass ein Name auf sechs Zeichen aufgefüllt wurde.

Probelauf mit drei Benutzern
Öffnen Sie in Remnawave den Bereich Users und prüfen Sie die übertragenen Benutzer. Traffic-Limits, Ablaufdaten und Status müssen übereinstimmen, und im Block Internal squads muss Default-Squad stehen.

Benutzer nach der Übertragung
Schritt 5. Alle Benutzer übertragen
Wenn der Probelauf erfolgreich war, starten Sie das Tool ohne Begrenzung der Benutzerzahl. Die Variablen aus dem vorigen Schritt bleiben erhalten, solange dasselbe Terminalfenster geöffnet ist.
./remnawave-migrate --preserve-status --preserve-subhashDas Tool verarbeitet die Benutzer in Paketen zu je 100 und berücksichtigt selbst die Benutzer, die beim Probelauf bereits angelegt wurden.
Schritt 6. Alte Abonnement-Links erhalten
Nach dem Umzug müssen die Benutzer ihr Abonnement von Remnawave beziehen. Dafür gibt es zwei Wege.
Neue Links verschicken. Das ist die einfachste und zuverlässigste Variante, wenn Sie nur wenige Benutzer haben. Den neuen Link jedes Benutzers finden Sie in seiner Karte in Remnawave.
Alte Links weiter bedienen. Die Abonnementseite von Remnawave kann Links von Marzban verstehen. Dafür braucht sie den geheimen Schlüssel, mit dem Marzban seine Links signiert hat. Wenn Marzban mit SQLite läuft, wie nach unserem Skript, erhalten Sie den Schlüssel mit einem einzigen Befehl.
# Wenn der Befehl nicht gefunden wird, installieren Sie ihn mit apt install -y sqlite3
sqlite3 /var/lib/marzban/db.sqlite3 "SELECT secret_key FROM jwt LIMIT 1;"
Der geheime Schlüssel von Marzban, auf dem Screenshot verdeckt
Wenn Marzban mit MySQL läuft, führen Sie dieselbe Abfrage SELECT secret_key FROM jwt LIMIT 1; in seiner Datenbank aus.
Installieren Sie danach die Abonnementseite nach dem Abschnitt „Abonnementseite“ unseres Artikels über Remnawave und fügen Sie in ihre Datei .env die Zeilen für die alten Links ein.
MARZBAN_LEGACY_LINK_ENABLED=true
MARZBAN_LEGACY_SECRET_KEY=marzban_secret_key
CUSTOM_SUB_PREFIX=subCUSTOM_SUB_PREFIX muss mit dem Pfad der Abonnements in Marzban übereinstimmen, standardmäßig ist das sub. Erstellen Sie den Container nach der Änderung mit dem Befehl docker compose up -d --force-recreate neu. Die Abonnementseite antwortet nur über einen Reverse Proxy mit HTTPS, deshalb müssen Sie sie über Caddy veröffentlichen, wie im selben Artikel beschrieben. Direkt über HTTP verweigert sie den Dienst und schreibt den Fehler Reverse proxy and HTTPS are required ins Protokoll.
Alte Links führen zur alten Adresse
Die Links von Marzban zeigen auf die Adresse seines Servers. Nach unserem Skript sehen sie so aus wie http://SERVER_IP:PORT/sub/.... Wenn Sie den alten Server löschen, ist es einfacher, den Benutzern neue Links zu schicken.
Wenn der alte Server weiterläuft, leiten Sie seine Anfragen an /sub/ auf die neue Abonnementseite weiter. Öffnen Sie auf dem Marzban-Server die Datei /etc/nginx/sites-available/marzban-panel und fügen Sie vor der Zeile location / { den folgenden Block ein, wobei Sie die Domain durch die Adresse Ihrer Abonnementseite ersetzen.
location /sub/ {
proxy_pass https://sub.ihre-domain.com;
proxy_set_header Host sub.ihre-domain.com;
proxy_ssl_server_name on;
proxy_ssl_name sub.ihre-domain.com;
}Prüfen Sie die Konfiguration und übernehmen Sie sie.
nginx -t && systemctl reload nginxWir haben dieses Vorgehen geprüft. Ein alter Marzban-Link der Form http://SERVER_IP:PORT/sub/... lieferte danach das Remnawave-Abonnement des übertragenen Benutzers, und der Link eines deaktivierten Benutzers antwortete mit der Meldung Subscription disabled.
Schritt 7. Marzban abschalten
Wenn die Benutzer die neue Konfiguration erhalten haben und sich über Remnawave verbinden, stoppen Sie Marzban.
marzban downLöschen Sie es nicht sofort. Lassen Sie den Server mit dem gestoppten Marzban einige Tage stehen, damit Sie bei Bedarf zurückkehren können. Sichern Sie vor dem endgültigen Löschen eine Kopie des Ordners /var/lib/marzban.
Häufige Fragen
Das Tool meldet einen Autorisierungsfehler bei Remnawave
Prüfen Sie das Token und die Adresse des Panels in REMNAWAVE_URL. Wenn das Remnawave-Panel zusätzlich durch Caddy geschützt ist, erstellen Sie im Autorisierungsportal dieses Schutzes einen API-Schlüssel und übergeben Sie ihn mit dem Parameter --dest-headers="X-Api-Key:schlüssel".
Übertragene Benutzer haben ein leeres Abonnement
Die Benutzer sind in keinem Squad mit Profil gelandet. Fügen Sie sie im Remnawave-Panel zu Default-Squad hinzu oder übertragen Sie sie erneut mit dem Parameter --internal-squad. Prüfen Sie außerdem, ob beim Host der Schalter Host visibility eingeschaltet ist.
Lässt sich die Art des Zurücksetzens für alle auf einmal ändern
Ja, der Parameter --preferred-strategy legt eine einheitliche Art für alle übertragenen Benutzer fest. Mögliche Werte sind NO_RESET, DAY, WEEK und MONTH.
Wird der verbrauchte Traffic übertragen
Nein. Das Tool überträgt das Traffic-Limit und die Art, wie es zurückgesetzt wird, und der Zähler für den verbrauchten Traffic beginnt in Remnawave von vorn.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com