> Die vollständige Liste der Artikel steht in [llms.txt](https://docs.f3cloud.com/llms.txt). Jede Seite gibt es auch als Markdown, dazu einfach .md an die Adresse anhängen. Diese Seite als Markdown: [https://docs.f3cloud.com/de/vpn-guide/marzban-to-remnawave.md](https://docs.f3cloud.com/de/vpn-guide/marzban-to-remnawave.md).

# Von Marzban zu Remnawave umziehen – Benutzer und Abonnements übertragen

Wie Sie Benutzer mit dem offiziellen Tool remnawave-migrate von Marzban nach Remnawave übertragen. Was übertragen wird und was nicht, Probelauf und vollständige Übertragung, Squads, Weiterbetrieb der alten Abonnement-Links von Marzban und Abschalten des alten Panels.

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](https://docs.f3cloud.com/de/vpn-guide/marzban-installation.md) 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](https://docs.f3cloud.com/de/vpn-guide/remnawave-installation.md). 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.

1. Öffnen Sie im Remnawave-Panel den Bereich **Remnawave Settings** und scrollen Sie nach unten bis zum Block **API tokens**.
2. Klicken Sie auf die Schaltfläche <kbd>+</kbd> unten rechts im Block.
3. Geben Sie einen Namen ein, zum Beispiel `migrate`, und die Gültigkeitsdauer in Tagen. Für den Umzug reicht ein Tag.
4. Wählen Sie den Rechtesatz **Full access** (Полный доступ) und klicken Sie auf <kbd>Create</kbd> (Создать).
5. Kopieren Sie das Token. Das Panel zeigt es nur ein einziges Mal an.

<figure><img src="https://docs.f3cloud.com/img/remnawave-token-create.jpg" alt="Fenster zum Erstellen eines API-Tokens in Remnawave mit dem Namen migrate, einer Gültigkeit von 1 Tag und vollem Zugriff" width="500"><figcaption><p>API-Token erstellen</p></figcaption></figure>

> **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.

```bash
# 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

```bash
# 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
```

<figure><img src="https://docs.f3cloud.com/img/remnawave-migrate-help.png" alt="Hilfe des Tools remnawave-migrate mit der Liste der Parameter für die Übertragung"><figcaption><p>Parameter des Übertragungstools</p></figcaption></figure>

Prüfen Sie vor dem Start auf der Seite mit den [Releases](https://github.com/remnawave/migrate/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.

```bash
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-subhash
```

Unser 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-status` behä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-subhash` behä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.

<figure><img src="https://docs.f3cloud.com/img/remnawave-migrate-run.png" alt="Protokoll des Tools remnawave-migrate, die Benutzer alice, carol und bob wurden übertragen"><figcaption><p>Probelauf mit drei Benutzern</p></figcaption></figure>

Ö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.

<figure><img src="https://docs.f3cloud.com/img/remnawave-migrated-users.jpg" alt="Liste der übertragenen Benutzer in Remnawave, bob ist deaktiviert, alice hat ein Limit von 50 GB"><figcaption><p>Benutzer nach der Übertragung</p></figcaption></figure>

***

## 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.

```bash
./remnawave-migrate --preserve-status --preserve-subhash
```

Das 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.

```bash
# 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;"
```

<figure><img src="https://docs.f3cloud.com/img/remnawave-marzban-secret.png" alt="Geheimen Schlüssel von Marzban aus der SQLite-Datenbank auslesen, der Schlüssel ist verdeckt" width="560"><figcaption><p>Der geheime Schlüssel von Marzban, auf dem Screenshot verdeckt</p></figcaption></figure>

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“](https://docs.f3cloud.com/de/vpn-guide/remnawave-installation.md#abonnementseite-optional) unseres Artikels über Remnawave und fügen Sie in ihre Datei `.env` die Zeilen für die alten Links ein.

```ini
MARZBAN_LEGACY_LINK_ENABLED=true
MARZBAN_LEGACY_SECRET_KEY=marzban_secret_key
CUSTOM_SUB_PREFIX=sub
```

`CUSTOM_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.

```nginx
    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.

```bash
nginx -t && systemctl reload nginx
```

Wir 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.

```bash
marzban down
```

Lö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

<details>

<summary>Das Tool meldet einen Autorisierungsfehler bei Remnawave</summary>

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"`.

</details>

<details>

<summary>Übertragene Benutzer haben ein leeres Abonnement</summary>

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.

</details>

<details>

<summary>Lässt sich die Art des Zurücksetzens für alle auf einmal ändern</summary>

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`.

</details>

<details>

<summary>Wird der verbrauchte Traffic übertragen</summary>

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.

</details>

***

## Unsere Ressourcen

**Telegram-Kanal:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Hosting-Website:** [https://f3cloud.com](https://f3cloud.com/de)
