Remnawave ist ein Panel zur Verwaltung von VPN-Servern auf Basis des Xray-Kerns. Damit legen Sie bequem Benutzer an, verteilen Abonnements, begrenzen Traffic und Laufzeiten und binden mehrere Server (Nodes) an ein einziges Panel an. Das Projekt ist kostenlos, quelloffen und hat eine offizielle Dokumentation.
In diesem Artikel haben wir die gesamte Installation zusammengestellt, von der Auswahl der Server bei F3 Cloud bis zur Verbindung des ersten Clients. Die Befehle stammen aus der offiziellen Dokumentation, und wir haben die komplette Installation selbst mit der Panel-Version 3.4.5 durchlaufen. Deshalb stimmen die Namen der Schaltflächen und die Screenshots mit dem überein, was Sie sehen werden. Die Firewall-Einstellungen, die Backups und die Tipps zur Tarnung haben wir selbst ergänzt.
Woraus Remnawave besteht
- Panel – Weboberfläche und API, eine PostgreSQL-Datenbank und ein Valkey-Cache. Das Panel selbst leitet keinen Traffic der Benutzer weiter.
- Node – ein schlanker Container mit dem Xray-Kern. Genau mit den Nodes verbinden sich die Benutzer. Das Panel steuert die Nodes über eine geschützte Verbindung.
- Abonnementseite – eine optionale Komponente. Sie zeigt dem Benutzer eine ansprechende Seite mit Anleitung und verbirgt die Adresse des Panels.
Die Reihenfolge der Installation ist wichtig
Solange kein einziger Node mit dem Panel verbunden ist, können sich die Benutzer nicht verbinden. Deshalb gilt bei der Installation immer dieselbe Reihenfolge, zuerst das Panel, dann Reverse Proxy, Node, Profil, Host und Benutzer.
Was Sie brauchen
Zwei Server
Die Entwickler empfehlen, Panel und Node auf verschiedenen Servern zu installieren. Auf einem einzigen Server würden Panel und Node um Port 443 konkurrieren.
Und wird die IP-Adresse des Nodes gesperrt, verlieren Sie zugleich den Zugang zum Panel.
| Rolle | Anforderungen von Remnawave | Empfohlener Tarif bei F3 Cloud |
|---|---|---|
| Panel | ab 2 Kernen und 2 GB RAM, besser 4 Kerne und 4 GB, 20 GB Speicher | DE-RZ9-2 (2 vCPU, 4 GB RAM, 60 GB NVMe) |
| Node | ab 1 Kern und 1 GB RAM | DE-Promo für den privaten Gebrauch, DE-RZ9-1 für eine Anbindung mit 1 Gbit/s |
Installieren Sie auf beiden Servern Ubuntu oder Debian. Wie Sie einen Server bestellen, steht im Artikel zur Bestellung eines virtuellen Servers.
Domain
Sie benötigen zwei A-Records:
panel.ihre-domain.comzeigt auf die IP-Adresse des Panel-Servers;cdn.ihre-domain.comzeigt auf die IP-Adresse des Node-Servers.
Mit einem eigenen Namen für den Node können Sie die IP-Adresse des Servers später ändern, ohne die Abonnements der Benutzer zu aktualisieren.
Wählen Sie neutrale Namen
Verwenden Sie in Domain und Subdomains keine Wörter wie vpn, proxy, xray, vless, reality, remnawave, node oder ähnliche. Der Servername wird unverschlüsselt übertragen, und solche Wörter lassen sich leicht anhand einer Liste erkennen. Besser sind cdn.example.com, photos.example.com oder die Domain selbst ohne Subdomain.
Zu Cloudflare
Die Remnawave-Dokumentation empfiehlt, die Panel-Domain über Cloudflare zu leiten, wenn Cloudflare in Ihrer Region stabil funktioniert. Aus Russland sind die Dienste von Cloudflare derzeit nur mit Unterbrechungen erreichbar, deshalb empfehlen wir, das Proxying ausgeschaltet zu lassen (graue Wolke).
Für die Node-Domain muss das Proxying immer ausgeschaltet sein, denn Reality funktioniert nur bei einer direkten Verbindung zum Server.
1. Beide Server vorbereiten
Verbinden Sie sich mit jedem Server per SSH, zum Beispiel über Termius, und führen Sie dieselben Befehle aus.
# System aktualisieren
apt update && apt upgrade -y
# Docker mit dem offiziellen Skript installieren
curl -fsSL https://get.docker.com | sh
# Prüfen, ob Docker und das Compose-Plugin funktionieren
docker --version && docker compose versionWenn beide Befehle eine Version anzeigen, ist Docker bereit.

Docker und Compose sind installiert
2. Panel installieren
Alle Befehle dieses Schritts führen Sie auf dem Panel-Server aus.
# Ordner anlegen und die offiziellen Dateien docker-compose.yml und .env herunterladen
mkdir /opt/remnawave && cd /opt/remnawave
curl -o docker-compose.yml https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/docker-compose-prod.yml
curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sampleErzeugen Sie die geheimen Schlüssel, der Befehl schreibt die Zufallswerte selbst in die Datei .env.
sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 64)/" .env && sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 64)/" .env && sed -i "s/^WEBHOOK_SECRET_HEADER=.*/WEBHOOK_SECRET_HEADER=$(openssl rand -hex 64)/" .envÄndern Sie das Passwort der Datenbank. Die Entwickler raten dringend davon ab, das Standardpasswort zu behalten.
pw=$(openssl rand -hex 24) && sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env && sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^\@]*\(@.*\)|\1$pw\2|" .envÖffnen Sie die Datei .env mit dem Befehl nano .env und tragen Sie in drei Zeilen Ihre Domain ein.
FRONT_END_DOMAIN=panel.ihre-domain.com
PANEL_DOMAIN=panel.ihre-domain.com
SUB_PUBLIC_DOMAIN=panel.ihre-domain.com/api/subSchreiben Sie in SUB_PUBLIC_DOMAIN weder https:// noch einen Schrägstrich am Ende. Speichern Sie die Datei mit Ctrl + O.
Schließen Sie den Editor mit Ctrl + X.
Starten Sie das Panel und sehen Sie sich das Startprotokoll an.
docker compose up -d && docker compose logs -f -tSobald im Protokoll das Banner mit der Remnawave-Version erscheint, ist das Panel gestartet. Verlassen Sie die Protokollansicht mit Ctrl + C, die Container laufen weiter.

Das Panel ist gestartet
Öffnen Sie die Dienste nicht nach außen
Alle Remnawave-Dienste lauschen nur auf der Adresse 127.0.0.1 und sind aus dem Internet nicht direkt erreichbar. Ändern Sie das nicht in der docker-compose.yml. Der Zugriff auf das Panel darf nur über den Reverse Proxy aus dem nächsten Schritt erfolgen.
Wenn Sie die .env geändert haben
Nach jeder Änderung an der .env erstellen Sie die Container mit docker compose down && docker compose up -d neu, ein einfacher Neustart reicht nicht.
3. Caddy und HTTPS einrichten
Remnawave unterstützt Caddy, Nginx und Traefik. Am einfachsten lässt sich Caddy einrichten, denn es holt und verlängert das Zertifikat von Let's Encrypt selbstständig.
# Ordner und Konfigurationsdatei für Caddy anlegen
mkdir -p /opt/remnawave/caddy && cd /opt/remnawave/caddy && nano CaddyfileFügen Sie die folgenden Einstellungen in die Datei ein und ersetzen Sie die Domain durch Ihre eigene.
https://panel.ihre-domain.com {
encode
reverse_proxy * http://remnawave:3000
}
:443 {
tls internal
respond 204
}Der zweite Block antwortet mit einer leeren Seite auf alle Anfragen, die nicht an Ihre Domain gehen, etwa beim Scannen über die IP-Adresse.
Legen Sie daneben mit dem Befehl nano docker-compose.yml eine Datei docker-compose.yml für Caddy an und fügen Sie Folgendes ein.
services:
caddy:
image: caddy:2.9
container_name: 'caddy'
hostname: caddy
restart: always
ports:
- '0.0.0.0:443:443'
- '0.0.0.0:80:80'
networks:
- remnawave-network
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy-ssl-data:/data
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true
volumes:
caddy-ssl-data:
driver: local
external: false
name: caddy-ssl-dataStarten Sie Caddy.
docker compose up -d && docker compose logs -f -tÖffnen Sie nach einer Minute https://panel.ihre-domain.com im Browser. Es sollte die Registrierungsseite des Panels mit einem gültigen Zertifikat erscheinen.
4. Administrator registrieren
Beim ersten Aufruf bietet das Panel an, ein Super-Admin-Konto anzulegen. Der erste registrierte Benutzer wird zum Hauptadministrator, registrieren Sie sich deshalb direkt nach dem Start von Caddy.
Denken Sie sich einen Benutzernamen aus und klicken Sie dann auf Generate & copy, damit das Panel selbst ein sicheres Passwort erzeugt, und speichern Sie es sofort in einem Passwortmanager. Klicken Sie danach auf Sign up.

Registrierung des Hauptadministrators
Wenn Sie den Zugang zum Panel verloren haben
Den Administrator können Sie mit dem integrierten Wiederherstellungstool zurücksetzen. Führen Sie dazu auf dem Panel-Server den Befehl docker exec -it remnawave cli aus.
5. Node verbinden
Legen Sie auf dem Node-Server einen Ordner dafür an.
mkdir /opt/remnanode && cd /opt/remnanodeÖffnen Sie im Panel den Bereich Nodes und klicken Sie auf +. Füllen Sie das Formular aus:
- Internal name – ein beliebiger Name, der für Sie verständlich ist, zum Beispiel
DE-Frankfurt-1; - Country – das Land des Servers, seine Flagge sehen die Benutzer;
- Domain or IP – die Adresse des Nodes, zum Beispiel
cdn.ihre-domain.com; - Node Port – der Port, über den das Panel den Node steuert. Standardmäßig ist das
2222.

Node anlegen
Klicken Sie auf Copy docker-compose.yml. Das Panel kopiert eine fertige Datei, die ungefähr so aussieht.
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
network_mode: host
restart: always
cap_add:
- NET_ADMIN
ulimits:
nofile:
soft: 1048576
hard: 1048576
environment:
- NODE_PORT=2222
- SECRET_KEY="Schlüssel aus dem Panel"Öffnen Sie auf dem Node-Server den Editor mit dem Befehl nano docker-compose.yml, fügen Sie den kopierten Inhalt ein, speichern Sie die Datei und starten Sie den Node.
docker compose up -d && docker compose logs -f -tIm Protokoll erscheint eine Tabelle mit dem API-Port, der Xray-Version und den Eckdaten des Servers. Das bedeutet, der Node ist gestartet und wartet auf das Panel.

Der Node ist gestartet
Kehren Sie zum Panel zurück und klicken Sie auf Next. Klicken Sie im Schritt Core configuration auf Select und markieren Sie vorerst das Standardprofil Default-Profile, das eigentliche Arbeitsprofil legen wir im nächsten Schritt an. Klicken Sie auf Create node. Nach einigen Sekunden erscheint die Meldung „Connection successful. Xray Core is up and running!“.

Das Panel hat sich mit dem Node verbunden
Schützen Sie den Node-Port vor Fremden
Den Port des Nodes braucht nur das Panel. Erlauben Sie Verbindungen zu diesem Port ausschließlich von der IP-Adresse des Panel-Servers, die Befehle finden Sie unten im Abschnitt „Firewall“.
6. VLESS-Reality-Profil anlegen
Standardmäßig legt das Panel das Profil Default-Profile mit einem einzigen Shadowsocks-Inbound an. Um Sperren zu umgehen, fügen Sie ein VLESS-Reality-Profil hinzu.
- Öffnen Sie den Bereich Config Profiles, klicken Sie auf +, geben Sie einen Profilnamen ein, zum Beispiel
VLESS-Reality, und klicken Sie auf Create. Der Profileditor öffnet sich. - Klicken Sie unter dem Editor neben der Schaltfläche Format auf die Menüschaltfläche und wählen Sie Load from GitHub.
- Wählen Sie die Vorlage Example VLESS-TCP-REALITY config und klicken Sie auf Load template. Sie enthält bereits den Inbound
VLESS_TCP_REALITYauf Port 443.

Auswahl einer Profilvorlage
Direkt nach dem Laden markiert das Panel den Fehler please fill in a valid value for "target". Das ist normal, die Vorlage muss noch vervollständigt werden.

Die Vorlage ist geladen, jetzt fehlen nur noch die Reality-Felder
Die Schlüssel für Reality erzeugen Sie am einfachsten direkt auf dem Node-Server.
# Reality-Schlüsselpaar erzeugen. Den Wert PrivateKey in das Feld privateKey einfügen
docker exec remnanode xray x25519
# Wert für das Array shortIds erzeugen
openssl rand -hex 8Füllen Sie im Block realitySettings folgende Felder aus:
privateKey– der Wert PrivateKey aus dem ersten Befehl;shortIds– der Wert aus dem zweiten Befehl, innerhalb der eckigen Klammern und Anführungszeichen;targetundserverNames– die Adresse der Tarnseite und ihr Name, mehr dazu in der Warnung unten.
Unten im Editor sollte die Meldung Xray config is valid erscheinen. Klicken Sie auf Save.
Tarnen Sie sich nicht als große fremde Websites
Tragen Sie in target und serverNames keine Websites wie google.com, microsoft.com oder apple.com ein, denn genau das ist heute eines der wichtigsten Merkmale, an denen Server gesperrt werden. Am zuverlässigsten tarnen Sie sich als Ihre eigene Domain nach dem Self-Steal-Schema. Installieren Sie dazu auf dem Node-Server nginx mit einer Website auf Ihrer Domain, tragen Sie in target den Wert 127.0.0.1:8443 und in serverNames Ihre Domain ein und setzen Sie xver: 0. Eine Schritt-für-Schritt-Anleitung finden Sie im Artikel über Self-Steal für VLESS Reality.
Jetzt müssen Sie den neuen Inbound nur noch für den Node und die Benutzer aktivieren.
- Öffnen Sie im Bereich Nodes Ihren Node, klicken Sie im Block Core configuration auf die Schaltfläche zum Bearbeiten, markieren Sie das Profil
VLESS-Realityund speichern Sie den Node. - Öffnen Sie Users → Internal Squads, klicken Sie auf
Default-Squad, setzen Sie ein Häkchen beim ProfilVLESS-Realityund speichern Sie. Ohne diesen Schritt erhalten die Benutzer den neuen Inbound nicht.

Das Profil VLESS-Reality ist in Default-Squad aktiviert
7. Host anlegen
Der Host legt fest, welche Adresse und welche Parameter die Benutzer in ihrem Abonnement erhalten.
- Öffnen Sie Subscription → Hosts und klicken Sie auf +.
- Aktivieren Sie den Schalter Host visibility. Standardmäßig ist er ausgeschaltet, und ein solcher Host landet nicht im Abonnement.
- Tragen Sie im Feld Remark einen für die Benutzer verständlichen Namen ein, zum Beispiel „Deutschland“.
- Klicken Sie auf den Block No inbound selected, markieren Sie
VLESS_TCP_REALITYund bestätigen Sie die Auswahl. Der Port wird automatisch eingetragen. - Tragen Sie im Feld Address
cdn.ihre-domain.comein. - Klicken Sie im Block Options auf Add, wählen Sie Fingerprint und geben Sie
firefoxan. - Klicken Sie auf Save.

Host mit dem Fingerprint firefox
Warum firefox und nicht chrome
Seit Ende 2025 bewerten die Filtersysteme russischer Provider (TSPU) eine TLS-Verbindung nach mehreren Merkmalen zugleich, nämlich nach dem Subnetz des Hosters, dem Namen der Website (SNI) und dem Fingerprint des Clients. Der Fingerprint chrome ist in fast allen VPN-Apps und Panels voreingestellt, deshalb ist die Kombination „Chrome-Fingerprint plus IP-Adresse eines Rechenzentrums“ für die Filter zu einem zuverlässigen Merkmal für einen Proxy geworden. Benutzer berichten, dass die Verbindung bei mehreren gleichzeitigen Verbindungen mit diesem Fingerprint für einige Minuten „einfriert“ und dass der Wechsel zu firefox hilft.
Der Fingerprint edge hat früher ebenfalls geholfen, ist aber seit September 2026 mit neuen Xray-Versionen nicht mehr kompatibel. Ab Xray 26.9.8 (zum Beispiel enthalten in 3X-UI 3.8.0 und neuer) akzeptiert ein Reality-Server nur noch Clients mit dem Post-Quanten-Schlüsselaustausch ML-KEM. Das Profil edge entspricht in Xray dem alten Edge 85 ohne ML-KEM, und eine Verbindung damit kommt nicht zustande. Das Profil firefox unterstützt ML-KEM, wenn die App den Xray-Kern 26.3.23 oder neuer enthält, halten Sie Ihre Clients deshalb aktuell. Verwenden Sie auch die Werte random und randomized nicht, denn sie können ein Profil ohne ML-KEM auswählen.
8. Benutzer und Abonnement anlegen
- Öffnen Sie den Bereich Users und klicken Sie auf +.
- Geben Sie einen Username ohne Leerzeichen ein. Später lässt er sich nicht mehr ändern.
- Legen Sie das Traffic limit fest,
0bedeutet unbegrenzt. - Prüfen Sie das Expiry date, denn standardmäßig setzt das Panel eine Laufzeit von einem Tag.
- Markieren Sie im Block Internal squads den Eintrag
Default-Squad. - Klicken Sie auf Create.

Benutzer anlegen
Öffnen Sie den angelegten Benutzer. In seiner Karte gibt es das Feld Subscription URL in der Form https://panel.ihre-domain.com/api/sub/kennung, daneben eine Schaltfläche zum Kopieren. Genau diesen Link senden Sie dem Benutzer.

Benutzerkarte und Abonnement-Link
Client verbinden
Kopieren Sie den Abonnement-Link aus der Benutzerkarte und importieren Sie ihn in die App, wie in der Anleitung zum Import gezeigt. Das Abonnement aktualisiert sich selbst, deshalb müssen die Benutzer bei Änderungen auf dem Server nichts neu einrichten.
Firewall
In der offiziellen Dokumentation gibt es keine Befehle für die Firewall, deshalb zeigen wir unsere Variante auf Basis von UFW. Wenn Sie SSH auf einen anderen Port verlegt haben, tragen Sie diesen statt 22 ein.
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable# Statt PANEL_IP die IP-Adresse des Panel-Servers eintragen
ufw allow 22/tcp
ufw allow 443/tcp
ufw allow from PANEL_IP to any port 2222 proto tcp
ufw enableWeitere Schutzmaßnahmen beschreiben wir im Artikel zum Schutz des Servers vor unbefugtem Zugriff.
Abonnementseite (optional)
Eine eigene Abonnementseite verbirgt die Adresse des Panels vor den Benutzern und zeigt ihnen eine Anleitung zur Verbindung. Sie können sie auf demselben Server wie das Panel installieren.
- Legen Sie einen A-Record für die Abonnement-Domain an, zum Beispiel
sub.ihre-domain.com, und tragen Sie diese in der Datei/opt/remnawave/.envin der VariableSUB_PUBLIC_DOMAINein. Erstellen Sie danach den Panel-Container mit dem Befehlcd /opt/remnawave && docker compose down remnawave && docker compose up -dneu. - Erstellen Sie ein Token im Bereich Remnawave Settings → API tokens.
- Legen Sie den Ordner
/opt/remnawave/subscriptionund darin die Datei.envan.
APP_PORT=3010
REMNAWAVE_PANEL_URL=http://remnawave:3000
REMNAWAVE_API_TOKEN=token_aus_dem_panel- Legen Sie im selben Ordner eine
docker-compose.ymlan.
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
env_file:
- .env
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true- Starten Sie die Seite mit dem Befehl
docker compose up -dund fügen Sie in/opt/remnawave/caddy/Caddyfileeinen neuen Block hinzu.
https://sub.ihre-domain.com {
encode
reverse_proxy * http://remnawave-subscription-page:3010
}- Starten Sie Caddy mit dem Befehl
cd /opt/remnawave/caddy && docker compose down && docker compose up -dneu.
Aktualisierung
Aktualisieren Sie zuerst das Panel und danach die Nodes.
# Auf dem Panel-Server
cd /opt/remnawave && docker compose pull && docker compose down && docker compose up -d
docker image prune# Auf dem Node-Server
cd /opt/remnanode && docker compose pull && docker compose down && docker compose up -dWenn die Abonnementseite installiert ist, aktualisieren Sie auch diese mit demselben Befehl aus dem Ordner /opt/remnawave/subscription.
Backups
Eine offizielle Anleitung für Backups gibt es bei Remnawave nicht. Es genügt, die Datenbank und die Konfigurationsdateien zu sichern, denn der Valkey-Cache speichert nichts Wichtiges auf der Festplatte. So machen wir das.
cd /opt/remnawave
# Datenbank in eine Datei mit dem heutigen Datum sichern
docker exec remnawave-db pg_dump -U postgres postgres > backup-$(date +%F).sql
# Konfigurationsdateien in ein Archiv sichern
tar czf remnawave-config-$(date +%F).tar.gz .env docker-compose.yml caddy/CaddyfileLaden Sie die Kopien auf Ihren Computer oder in einen anderen Speicher herunter, denn eine Kopie auf demselben Server hilft nicht, wenn mit ihm etwas passiert. Mehr über Backups erzählen wir in einem eigenen Artikel.
Häufige Probleme
Das Panel öffnet sich nicht
Prüfen Sie, ob der A-Record der Panel-Domain auf die IP-Adresse des Servers zeigt. Sehen Sie sich danach die Protokolle mit dem Befehl docker compose logs in den Ordnern /opt/remnawave und /opt/remnawave/caddy an. Wenn Caddy kein Zertifikat erhalten konnte, steht der Grund in seinem Protokoll.
Der Node verbindet sich nicht mit dem Panel
Stellen Sie sicher, dass Port 2222 auf dem Node-Server für die IP-Adresse des Panels geöffnet ist und dass SECRET_KEY vollständig in die docker-compose.yml kopiert wurde. Das Protokoll des Nodes sehen Sie mit dem Befehl docker compose logs im Ordner /opt/remnanode.
Das Profil wird nicht gespeichert, Fehler wegen target
Die Meldung please fill in a valid value for "target" bedeutet, dass die Felder der Vorlage im Block realitySettings nicht ausgefüllt sind. Füllen Sie target, serverNames, privateKey und shortIds aus, wie in Schritt 6 beschrieben.
Fehler SPAWN_ERROR: xray
Xray konnte auf dem Node mit diesem Profil nicht starten, meistens wegen eines Fehlers in den Einstellungen oder eines belegten Ports. Sehen Sie sich das Xray-Protokoll mit dem Befehl docker exec remnanode xlogs an und korrigieren Sie das Profil.
Der Benutzer sieht den Server nicht im Abonnement
Prüfen Sie drei Dinge. Das Profil ist in Default-Squad aktiviert, der Benutzer gehört zu diesem Squad, und beim Host ist der Schalter Host visibility eingeschaltet. Standardmäßig wird ein neuer Host ausgeschaltet angelegt.
Die Verbindung steht, aber Websites öffnen sich nicht
Prüfen Sie, ob serverNames, die Schlüssel und shortIds im Profil mit dem übereinstimmen, was der Client erhält, und ob die IP-Adresse des Nodes beim Provider nicht gesperrt ist.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com