Outline VPN auf dem eigenen VPS selbst hosten
Betreiben Sie den Outline-VPN-Server statt der Wiki-App auf einem eigenen VPS. Anleitung zu Installation, Zugriffsschlüsseln, Management-API-Port und den Grenzen von Shadowsocks.
Was der Outline-VPN-Server ist
Für das Self-Hosting eines Outline-VPN-Servers betreiben Sie auf Ihrem eigenen VPS zwei Komponenten: einen Shadowsocks-Proxyserver und eine kleine REST-Management-API (Representational State Transfer), die davor liegt. Beide steuern Sie über die Desktopanwendung Outline Manager. Diese erzeugt Zugriffsschlüssel als ss://-Zeichenfolgen, die Sie an andere Personen senden. Outline eignet sich, um aus einem Netzwerk auf das Internet zuzugreifen, das VPNs blockiert. Die Lösung ist nicht für maximalen Durchsatz ausgelegt.
Zunächst eine Klarstellung, da Suchergebnisse diese beiden Produkte häufig verwechseln. Outline VPN ist das auf dieser Seite beschriebene Tool zur Umgehung von Netzwerksperren unter getoutline.org. Outline ist außerdem der Name eines selbst gehosteten Wikis und einer Wissensdatenbank unter einer anderen Domain, die von anderen Personen betrieben werden. Außer dem Namen haben beide nichts gemeinsam. Wenn Sie wegen des Wikis hierher gelangt sind, ist dies die falsche Seite.
Wer entwickelt Outline VPN
Viele Anleitungen bezeichnen Outline weiterhin als Google-Produkt. Zu Beginn stimmte das, heute jedoch nicht mehr. Outline wurde 2018 von Jigsaw gestartet, einem Inkubator innerhalb von Google. Seit August 2026 gibt die Projekt-Website an, dass Outline der Outline Foundation gehört, einer unabhängigen gemeinnützigen Organisation. Der Quellcode liegt unter der Organisation OutlineFoundation auf GitHub. Das ist wichtig, wenn Sie entscheiden, ob Sie der Software vertrauen: Die Frage nach der Governance hat heute eine andere Antwort als 2018. Eine Anleitung, die den Eigentümer falsch angibt, verweist wahrscheinlich auch auf einen Repository-Pfad, der inzwischen geändert wurde.
Was das Installationsprogramm tatsächlich auf Ihrem Server einrichtet
Das Installationsskript kompiliert nichts. Es startet Docker-Container.
shadowboxaus dem Imagequay.io/outline/shadowbox:stable. Dies ist der Verwaltungsserver. Er führtoutline-ss-server, das Shadowsocks-Backend des Projekts, als Data Plane aus.watchtower. Dieser Container sucht standardmäßig einmal pro Stunde nach einem neuerenshadowbox-Image und startet den Container neu, sobald er eines findet.- Ein selbst signiertes TLS-Zertifikat (Transport Layer Security) und ein privater Schlüssel. Beide werden im Statusverzeichnis des Servers gespeichert. Eine öffentliche Zertifizierungsstelle ist nicht beteiligt. Der Manager ordnet das Zertifikat daher anhand seines SHA-256-Fingerabdrucks fest zu, statt eine Zertifikatskette zu validieren.
Der Status liegt unter /opt/outline. Die persistenten Dateien befinden sich in /opt/outline/persisted-state.
Bei Watchtower sollten Sie eine bewusste Entscheidung treffen. Automatische Image-Aktualisierungen sorgen dafür, dass Sicherheitskorrekturen ohne Ihr Zutun installiert werden. Gleichzeitig kann sich die von Ihnen geprüfte Version über Nacht ändern, ohne dass Sie ein entsprechendes Changelog gelesen haben. Entscheiden Sie, was für Sie wichtiger ist. Wenn Sie Aktualisierungen selbst steuern möchten, entfernen Sie den Watchtower-Container und laden Sie neue Images nach Ihrem eigenen Zeitplan.
Voraussetzungen, die der Installer tatsächlich prüft
- Eine 64-Bit-x86-Maschine. Das Skript bricht mit
Unsupported machine type: ${MACHINE_TYPE}. Please run this script on a x86_64 machineab. Ein ARM-VPS-Tarif funktioniert mit dem Standard-Image nicht. Prüfen Sie die Architektur daher, bevor Sie den Tarif buchen. - Docker. Fehlt Docker, bietet das Skript die Installation an und gibt
Would you like to install Docker? This will run 'curl https://get.docker.com/ | sh'.aus. Ist Docker installiert, der Daemon aber gestoppt, bricht das Skript mit einer Meldung ab, die fragt, ob der Docker-Daemon ausgeführt wird. Starten Sie ihn mitsudo systemctl enable --now dockerund führen Sie den Installer erneut aus. - Eine öffentliche IPv4-Adresse, die das Skript selbst ermitteln kann. Es fragt externe Dienste ab, derzeit
icanhazip.com,ipinfo.iound einen Google-Endpunkt, um die Adresse zu ermitteln, die es in die Management-URL schreiben soll. Hinter NAT (Network Address Translation) oder auf einem System, dessen ausgehender HTTP-Verkehr blockiert wird, schlägt diese Abfrage fehl. Dann müssen Sie die Adresse mit--hostnameangeben. - root über sudo.
Die Dokumentation des Projekts nennt Ubuntu 20.04 LTS oder Debian 10 als unterstützte Basis. Da alles in Containern ausgeführt wird, funktioniert ein neueres Ubuntu normalerweise ebenfalls. Sie verwenden dann jedoch nicht mehr die vom Projekt getestete Umgebung.
Outline-VPN-Server installieren
Dies ist der Befehl aus der Projektdokumentation unter developer.getoutline.org, abgerufen im August 2026. Rufen Sie die Dokumentation selbst auf und übernehmen Sie den Befehl von dort, statt einer Kopie in irgendeiner Anleitung, auch in dieser, zu vertrauen: Das Repository wurde bereits einmal verschoben, und eine veraltete Kopie dieser Zeile führt dazu, dass aus einem archivierten Pfad installiert wird.
sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/OutlineFoundation/outline-apps/master/server_manager/install_scripts/install_server.sh)"Lesen Sie das Skript, bevor Sie es ausführen. Eine Remote-URL in eine root-Shell zu pipen bedeutet, dass Sie genau das ausführen, was diese URL zu diesem Zeitpunkt ausliefert. Das vorherige Prüfen kostet nur eine Minute:
wget -qO- https://raw.githubusercontent.com/OutlineFoundation/outline-apps/master/server_manager/install_scripts/install_server.sh | lessMit drei optionalen Flags können Sie Werte festlegen, statt generierte Werte zu übernehmen:
Usage: install_server.sh [--hostname <hostname>] [--api-port <port>] [--keys-port <port>]
--hostname The hostname to be used to access the management API and access keys
--api-port The port number for the management API
--keys-port The port number for the access keysRechnen Sie nicht mit festen Portnummern. Wenn Sie --api-port und --keys-port nicht angeben, wählt das Skript für jeden Port einen zufälligen Port über 1023. Es gibt keinen allgemein bekannten Outline-Port. Eine Anleitung, die eine bestimmte Nummer vorgibt, bezieht sich auf ihre eigene Installation, nicht auf Ihre. Lesen Sie die Ports aus der Ausgabe Ihres Laufs ab.
Bei erfolgreicher Ausführung gibt das Skript ein Banner aus, das mit CONGRATULATIONS! Your Outline server is up and running. beginnt. Anschließend werden Sie aufgefordert, die folgende Zeile einschließlich der geschweiften Klammern in die Outline-Manager-Oberfläche zu kopieren. Die Zeile hat diese Form:
{"apiUrl":"https://<your ip>:<api port>/<random secret>","certSha256":"<fingerprint>"}Danach zeigt das Skript genau an, welche Ports Sie öffnen müssen, und setzt die von ihm gewählten Nummern ein:
Make sure to open the following ports on your firewall, router or cloud provider:
- Management port ${API_PORT}, for TCP
- Access key port ${ACCESS_KEY_PORT}, for TCP and UDPWenn Sie das Terminal schließen und die Konfigurationszeile verlieren, befindet sie sich weiterhin auf dem Server. Mit sudo cat /opt/outline/access.txt wird sie erneut ausgegeben.
Bevor Sie den Manager öffnen, prüfen Sie, ob die Container tatsächlich laufen:
sudo docker psSie sollten shadowbox und watchtower sehen, beide mit dem Status Up. Ein shadowbox-Container, der ständig neu gestartet wird, verhindert die Verbindung des Managers. sudo docker logs shadowbox zeigt den Grund an.
Warum der Management-API-Port nicht ohne Weiteres öffentlich erreichbar sein sollte
Sehen Sie sich apiUrl noch einmal an. Dort gibt es weder einen Benutzernamen noch ein Passwort. Der zufällige Pfadabschnitt in dieser URL ist die Authentifizierung und damit der gesamte Schutzmechanismus. Jeder, der den Management-Port erreichen kann und diesen Pfad kennt, kann jeden Zugriffsschlüssel auf dem Server auslesen und alle Schlüssel löschen.
Der eigene UFW-Vorschlag des Skripts (ufw ist die unkomplizierte Firewall unter Ubuntu) öffnet den Management-Port für das gesamte Internet:
sudo ufw allow ${API_PORT}/tcpDas ist bequem, aber mehr als nötig. Der Port für Zugriffsschlüssel muss weltweit erreichbar sein, weil sich Ihre Benutzer dort verbinden. Der Management-Port muss nur von dem System aus erreichbar sein, auf dem Sie Outline Manager ausführen. Schränken Sie den Zugriff ein:
sudo ufw allow <keys port>/tcp
sudo ufw allow <keys port>/udp
sudo ufw allow from <your admin ip> to any port <api port> proto tcpNoch besser ist es, den Management-Port an der öffentlichen Firewall geschlossen zu halten und über einen bereits eingerichteten privaten Tunnel darauf zuzugreifen. Wenn Sie das selbst gehostete WireGuard-VPN auf einem VPS eingerichtet haben, kann der Outline-Server diesem Tunnel beitreten und die API nur über seine Tunneladresse bereitstellen. Ein Portscan Ihrer öffentlichen IP-Adresse zeigt dann nur den Port für Zugriffsschlüssel und keinen weiteren Port. Denken Sie daran, dass die meisten Anbieter neben der Firewall auf dem Server auch eine Netzwerk-Firewall in ihrem Control Panel bereitstellen. Beide Firewalls müssen den Zugriff zulassen.
Zu dieser Konfigurationszeile gibt es noch zwei weitere wichtige Punkte. Die Outline-Dokumentation bezeichnet sie als vertraulich und weist darauf hin, dass sie nur an Personen weitergegeben werden darf, die Managementzugriff benötigen. Die Übertragung muss über einen verschlüsselten Kanal erfolgen, nicht per unverschlüsselter E-Mail oder über einen Chat. Das Zurücknehmen des Zugriffs ist außerdem tatsächlich schwierig: Bei einem manuell installierten Server besteht die dokumentierte Möglichkeit, eine weitergegebene Management-Konfiguration ungültig zu machen, in einer vollständigen Neuinstallation. Dabei werden auch alle ausgestellten Benutzerzugriffsschlüssel zurückgesetzt. Behandeln Sie diese Zeichenfolge wie das root-Passwort des Servers. In der Praxis erfüllt sie genau diese Funktion.
Zugriffsschlüssel ausstellen und widerrufen
Outline Manager erstellt Schlüssel per Schaltfläche. Im Hintergrund verwendet er gewöhnliche HTTP-Anfragen an den geheimen API-Pfad. Daher können Sie diesen Vorgang skripten:
API="https://SERVER_IP:API_PORT/SECRET_PATH" # the apiUrl from access.txt
curl -k "$API/access-keys"
curl -k -X POST "$API/access-keys"
curl -k -X PUT "$API/access-keys/3/name" -H 'Content-Type: application/json' -d '{"name":"anna-laptop"}'
curl -k -X DELETE "$API/access-keys/3"-k ist erforderlich, weil das Zertifikat selbstsigniert ist. Ohne diese Option beendet curl den Vorgang mit SSL certificate problem: self-signed certificate und sendet die Anfrage nicht. Die API unterstützt außerdem Datenlimits pro Schlüssel. Mit PUT /access-keys/{id}/data-limit legen Sie ein Limit fest, mit DELETE /access-keys/{id}/data-limit heben Sie es wieder auf. So verhindern Sie, dass das Telefon-Backup einer einzelnen Person das gesamte monatliche Bandbreitenkontingent aufbraucht.
Stellen Sie pro Person genau einen Schlüssel aus. Diese Regel entscheidet darüber, ob der restliche Ablauf funktioniert. Widerrufen wird ein Schlüssel durch Löschen. Danach akzeptiert der Server ihn sofort nicht mehr. Eine Person, die das Unternehmen verlässt, verliert also in dem Moment den Zugriff, in dem Sie den Schlüssel löschen. Angenommen, zehn Personen verwenden gemeinsam einen Schlüssel. Sie können dann nicht nur eine dieser Personen entfernen. Sie löschen den Schlüssel, alle zehn verlieren den Zugriff, und Sie müssen neun Schlüssel neu ausstellen. Erst wenn jeder Schlüssel nach seinem Besitzer benannt ist, kann der Löschbefehl sicher ausgeführt werden.
Beachten Sie genau, was das Löschen nicht bewirkt. Die Zeichenfolge ss:// ist ein Geheimnis, das Sie bereits an jemanden gesendet haben. Durch das Löschen des Schlüssels verhindern Sie, dass Ihr Server dieses Geheimnis weiterhin akzeptiert. Das ist der Teil, den Sie kontrollieren. Die bereits gesendete Nachricht wird dadurch nicht zurückgeholt. Wenn ein Schlüssel also offengelegt wurde, löschen Sie ihn und stellen Sie einen neuen aus. Gehen Sie nicht davon aus, dass die vorhandene Kopie verschwunden ist.
Outline ist ein Proxy, kein vollständiger Tunnel
Das ist der Unterschied, der viele Nutzer beim Wechsel von WireGuard überrascht. Shadowsocks leitet TCP- und UDP-Verbindungen über einen Proxy. Auf dem Server gibt es keine Netzwerkschnittstelle, keine Peer-Adresse, keinen Eintrag in der Routing-Tabelle und kein Subnetz hinter dem Server. outline-ss-server überträgt TCP und UDP. Deshalb funktionieren Browser, Anwendungen und DNS darüber. ping funktioniert dagegen nicht, weil ICMP (Internet Control Message Protocol) nicht zu den Protokollen gehört, die ein Shadowsocks-Proxy überträgt. Testen Sie mit curl https://ifconfig.me und prüfen Sie, ob die zurückgegebene Adresse die Adresse Ihres Servers und nicht Ihre eigene ist.
Die Folgen sollten klar benannt werden. Sie können kein privates Netzwerk hinter dem Outline-Server erreichen, wie ein WireGuard-Peer 10.20.0.0/16 erreicht, weil Outline keine Route verteilen kann. Sie können damit nicht zwei Server miteinander verbinden. Peer-to-Peer-Verkehr zwischen Clients ist nicht möglich. Damit entfällt auch das typische Setup zu Hause, bei dem ein Smartphone seine Kamerabilder über den Tunnel mit einem selbst gehosteten Fotoserver synchronisiert. Wenn das Ihr Ziel ist, wählen Sie den Server zuerst anhand von dem Vergleich von PhotoPrism und Immich aus und verwenden Sie dafür ein routbares VPN statt eines Proxys. Wenn Sie ein tatsächliches Netzwerk mit Adressen und Routen benötigen, ist Outline das falsche Werkzeug. Beginnen Sie stattdessen mit dem Vergleich von WireGuard und OpenVPN.
Was die Verschleierung leistet und was nicht
Shadowsocks verschlüsselt und authentifiziert ab dem ersten Byte. Es gibt keinen Klartext-Handshake, kein Protokollversionsfeld, keinen Zertifikatsaustausch und keinen festen Header. Im Netzwerkverkehr sieht eine Verbindung wie ein Strom zufälliger Bytes aus, der an einen hohen Port gesendet wird. Das ist die gesamte Grundlage für Outline: Eine DPI-Instanz (Deep Packet Inspection), die darauf eingestellt ist, den WireGuard-Handshake oder den OpenVPN-Opcode im ersten Paket zu erkennen, findet hier kein passendes Merkmal. outline-ss-server bietet außerdem Replay-Schutz, der mit --replay_history aktiviert wird. Dadurch wird eine Klasse aktiver Prüfungen verhindert, bei denen ein Zensor ein aufgezeichnetes Paket erneut sendet, um zu sehen, wie Ihr Server antwortet.
Nun der ehrliche Teil.
- Der Datenstrom wird nicht verborgen. Ihr Datenverkehr geht weiterhin über Stunden hinweg in erheblichem Umfang an eine einzige Adresse. Eine Analyse von Zeitpunkten und Datenvolumen berücksichtigt nicht, dass der Inhalt unlesbar ist.
- Sie werden dadurch nicht anonym. Ihr Provider weiß, wer den Server gemietet hat, und verfügt normalerweise über Ihre Zahlungsdaten. Außerdem sieht jede von Ihnen besuchte Website die Adresse des Servers. Der Unterschied zwischen dem Mieten eines VPS und dem Kauf eines VPN-Dienstes erklärt, warum ein Server auf Ihren eigenen Namen das Bedrohungsmodell verändert, anstatt es zu beseitigen.
- Eine blockierte Adresse wird dadurch nicht wieder erreichbar. Wenn ein Zensor die IP-Adresse Ihres Servers blockiert, ist die Verschleierung irrelevant, weil nichts ankommt, das verschleiert werden könnte.
- Die Weitergabe von Schlüsseln wird dadurch nicht verhindert. Ein Schlüssel, der in einer öffentlichen Gruppenunterhaltung veröffentlicht wird, kann vom Zensor abgerufen und verwendet werden. Dadurch weiß er genau, welche Adresse er blockieren muss.
Die beiden letzten Punkte sind der Grund dafür, dass Umgehung in großem Maßstab viele sorgfältig vergebene und regelmäßig gewechselte Adressen erfordert. Genau dieses Problem soll das Tor-Projekt mit Bridges lösen. Wenn Ihr Angreifer Adressen schneller blockiert, als Sie Server mieten können, lesen Sie wie Tor-Bridges und Pluggable Transports nicht gelistete Einstiegspunkte vergeben, bevor Sie einen zweiten VPS mieten.
Zwischen Outline und den Alternativen wählen
Wählen Sie Outline, wenn das Netzwerk VPN-Protokolle blockiert und die von Ihnen unterstützten Personen keine Konfigurationsdatei bearbeiten werden. Eine Zeichenfolge zum Versenden und eine Anwendung, in die sie eingefügt wird. Das ist ein echter Vorteil und der Hauptgrund für die Existenz von Outline.
Wählen Sie WireGuard, wenn das Netzwerk den Datenverkehr durchlässt. WireGuard ist schneller, läuft im Kernel, stellt Ihnen ein routbares Netzwerk bereit und erfordert deutlich weniger laufende Verwaltung. Die vollständige Anleitung finden Sie im WireGuard-VPN-Server-Leitfaden.
Wählen Sie eine Bridge oder einen Pluggable Transport, wenn der Angreifer Adressen statt Protokolle blockiert oder wenn Sie neben Erreichbarkeit auch Anonymität benötigen.
Wählen Sie ein Mesh mit einer Control Plane, wenn Ihr Problem eher die Verwaltung einer Geräteflotte als Zensur ist. Das manuelle Verteilen von Schlüsseln und Zuweisen von Adressen lässt sich ab ungefähr einem Dutzend Maschinen nicht mehr sinnvoll skalieren. Ein selbst gehosteter NetBird-Server übernimmt diese Verwaltungsaufgaben für Sie. Wenn Sie überhaupt keine Control Plane betreiben möchten, prüfen Sie zuerst, was der kostenlose Tailscale-Tarif tatsächlich abdeckt. Eine Flotte in einem Haushalt oder kleinen Team passt oft vollständig hinein und verursacht für den Betrieb keine Kosten.
FAQ
Ist Outline VPN dasselbe wie das Outline-Wiki?
Nein. Es handelt sich um voneinander unabhängige Projekte, die zufällig denselben Namen tragen. Outline VPN ist das Tool zur Umgehung von Zensur unter getoutline.org. Es besteht aus einem Shadowsocks-Server und einer REST-Verwaltungs-API und wird über die Desktopanwendung Outline Manager gesteuert. Das Outline-Wiki ist eine selbst gehostete Wissensdatenbank für Teams unter einer anderen Domain. Suchen nach „self-host Outline“ liefern beide Projekte. Prüfen Sie die Domain, bevor Sie einen Installationsbefehl kopieren.
Ist Outline VPN weiterhin ein Google-Produkt?
Nein, seit August 2026 nicht mehr. Outline wurde 2018 von Jigsaw gestartet, einem Inkubator innerhalb von Google. Daher stammt die Bezeichnung „Google VPN“ in älteren Anleitungen. Auf der Projektwebsite steht inzwischen, dass Outline der Outline Foundation gehört, einer unabhängigen Non-Profit-Organisation. Die Quellcode-Repositories liegen unter der Organisation OutlineFoundation auf GitHub.
Welche Ports verwendet der Outline-Server?
Dafür gibt es absichtlich keine feste Vorgabe. Wenn Sie --api-port und --keys-port nicht an das Installationsprogramm übergeben, wählt es einen zufälligen Port oberhalb von 1023 für die Verwaltungs-API und einen weiteren für Zugriffsschlüssel. Am Ende des Durchlaufs gibt es beide Ports aus. Außerdem weist es Sie an, den Verwaltungsport für TCP sowie den Zugriffsschlüssel-Port für TCP und UDP in Ihrer Firewall und in der Netzwerk-Firewall Ihres Providers zu öffnen. Wenn diese Ausgabe nicht mehr vorliegt, gibt sudo cat /opt/outline/access.txt die Verwaltungs-URL einschließlich Port zurück.
Kann ich Outline verwenden, um auf mein privates Netzwerk zuzugreifen?
Nein. Shadowsocks proxyt TCP- und UDP-Verbindungen, anstatt einen Layer-3-Tunnel aufzubauen. Daher verfügt der Server über keine Schnittstelle und keine Routen in dahinterliegende Netzwerke. Ein WireGuard-Peer kann mit AllowedIPs = 10.20.0.0/16 konfiguriert werden und diesen Bereich erreichen. Eine entsprechende Einstellung gibt es in Outline nicht, weil Outline keine Routen dafür bereitstellt. Verwenden Sie WireGuard für den Zugriff auf private Netzwerke. Verwenden Sie Outline weiterhin für den Zugriff auf das öffentliche Internet.
Wie entferne ich den Zugriff einer Person?
Löschen Sie ihren Zugriffsschlüssel in Outline Manager oder mit DELETE /access-keys/{id} über die Verwaltungs-API. Der Server akzeptiert diesen Schlüssel sofort nicht mehr. Das funktioniert nur zuverlässig, wenn jede Person einen eigenen Schlüssel besitzt. Erstellen Sie daher pro Person einen Schlüssel und benennen Sie ihn nach der jeweiligen Person. Den Verwaltungszugriff zu widerrufen, ist deutlich problematischer: Die dokumentierte Lösung für eine gemeinsam genutzte Verwaltungskonfiguration auf einem manuell installierten Server ist eine vollständige Neuinstallation. Dabei werden gleichzeitig alle Benutzerschlüssel zurückgesetzt.