VPNSmith
tunneling-obfuscationINFO

sing-box VLESS Reality einrichten 2026: Die Config-Felder, die die meisten Anleitungen immer noch falsch machen

Eine aktuelle sing-box VLESS + Reality Konfiguration, geprüft gegen die offizielle Dokumentation für 1.13. Inklusive der Inbound-Felder, die in 1.11 als veraltet markiert wurden und trotzdem in fast jedes Tutorial kopiert werden.

Von Eric Gerard · Gründer · VPNSmith - Spezialist für selbstgehostete VPNs & DSGVO-VPS6 Min. LesezeitPhoto via Pexels

Suchen Sie nach einer sing-box Reality Anleitung, und Sie finden jede Menge Konfigurationsdateien, die 2024 richtig waren. Sie werden weiterhin eingelesen, und genau das ist das Problem: nichts warnt Sie davor, dass Sie gerade auf Feldern aufgebaut haben, die das Projekt als veraltet markiert hat. Dieser Text geht ein VLESS Reality Setup Feld für Feld gegen die aktuelle Dokumentation durch und zeigt, welche Teile sich still und leise verschoben haben.

Zur Einordnung: geprüft wurde gegen sing-box 1.13.15, veröffentlicht am 29. Juli 2026.

Was Reality tatsächlich verändert

Klassische TLS-basierte Proxys haben eine strukturelle Schwäche: das Zertifikat gehört Ihnen. Wer den Handshake untersucht, sieht eine Domain und ein Zertifikat, die zu keiner echten, populären Website passen, und dieser Widerspruch ist selbst schon das Signal.

Der Ansatz von Reality besteht darin, sich den Handshake einer echten fremden Seite zu leihen. Ihr Server wird so konfiguriert, dass er auf einen echten externen Host zeigt, und Datenverkehr, der die Authentifizierung nicht besteht, wird dorthin durchgereicht. Für einen Beobachter sieht die Verbindung aus wie eine Verbindung zu dieser Seite, denn zum Teil ist sie das auch.

Deshalb hat die Konfiguration einen handshake-Block. Er ist keine Zierde, und seine Wahl wiegt schwerer als jeder andere Wert, den Sie setzen werden.

Die drei erforderlichen Reality-Felder auf dem Server

Innerhalb des tls-Objekts verlangt der reality-Block laut Dokumentation genau drei Dinge:

  • handshake (Objekt), enthält server und server_port, also die externe Seite, von der sich Ihr Server borgt
  • private_key (String), der laut Dokumentation mit sing-box generate reality-keypair erzeugt wird
  • short_id (String), beschrieben als hexadezimale Zeichenkette mit null bis acht Stellen

Dazu kommt ein enabled-Boolean sowie ein optionales max_time_difference, das die tolerierte Zeitabweichung zwischen beiden Enden festlegt. Die Dokumentation merkt an, dass die Prüfung deaktiviert ist, wenn das Feld leer bleibt. Wenn Sie es setzen, denken Sie daran, dass Sie damit darauf angewiesen sind, dass beide Maschinen die Uhrzeit korrekt halten.

Die Schlüssel erzeugen

Zwei Werte müssen erzeugt werden, bevor Sie irgendetwas schreiben:

sing-box generate reality-keypair
sing-box generate uuid

Das Keypair gibt einen Private Key und einen Public Key aus. Der Private Key bleibt auf dem Server. Der Public Key geht an jeden Client. Die UUID ist die VLESS-Benutzeridentität.

Bewahren Sie das Paar bei der Erzeugung gemeinsam an einem sicheren Ort auf. Der Public Key lässt sich nicht aus einer Konfigurationsdatei rekonstruieren, die nur den privaten Teil speichert, und eine Neuerzeugung des Paares entwertet jeden Client, den Sie bereits ausgegeben haben.

Blaue Ethernet-Kabel stecken in den nummerierten Ports eines Netzwerk-Switches, an der Frontblende leuchten grüne Status-LEDs.
Blaue Ethernet-Kabel stecken in den nummerierten Ports eines Netzwerk-Switches, an der Frontblende leuchten grüne Status-LEDs.

Der Server-Inbound

Ein VLESS-Inbound benötigt type, tag, die Listen-Felder und ein users-Array. Jeder Benutzereintrag nimmt eine uuid, optional einen name und optional einen flow. Die Dokumentation nennt genau einen verfügbaren Flow-Wert: xtls-rprx-vision.

{
  "type": "vless",
  "tag": "vless-in",
  "listen": "::",
  "listen_port": 443,
  "users": [
    {
      "name": "me",
      "uuid": "PASTE-YOUR-GENERATED-UUID",
      "flow": "xtls-rprx-vision"
    }
  ],
  "tls": {
    "enabled": true,
    "server_name": "your-handshake-host.example",
    "reality": {
      "enabled": true,
      "handshake": {
        "server": "your-handshake-host.example",
        "server_port": 443
      },
      "private_key": "PASTE-YOUR-PRIVATE-KEY",
      "short_id": "0123abcd"
    }
  }
}

Beachten Sie server_name und den server im Handshake. Das sind getrennte Felder, die normalerweise denselben Host enthalten, und eine Abweichung zwischen ihnen ist eine häufige Ursache für ein Setup, das sauber baut und dann beim Verbindungsaufbau scheitert.

Der Teil, den die meisten Anleitungen falsch machen

Hier liegt der Unterschied zwischen einer Konfiguration von 2024 und einer aktuellen. Diese drei Inbound-Felder wurden in Version 1.11.0 als veraltet markiert:

  • sniff
  • sniff_timeout
  • domain_strategy

Sie sind aus dem Inbound herausgewandert und zu Route-Rule-Actions geworden. Der Migrationsleitfaden nennt die direkten Entsprechungen:

{
  "route": {
    "rules": [
      { "inbound": "vless-in", "action": "sniff", "timeout": "1s" },
      { "inbound": "vless-in", "action": "resolve", "strategy": "prefer_ipv4" }
    ]
  }
}

Aus "sniff": true wird also eine action vom Typ sniff, aus sniff_timeout wird das timeout dieser Action, und aus domain_strategy wird eine action vom Typ resolve mit einer strategy.

Um bei den Konsequenzen genau zu bleiben: die Dokumentation markiert diese Felder als veraltet und kündigt kein Entfernungsdatum an. Heute geht dadurch nichts kaputt. Aber eine Konfiguration, die sie weiterhin mitschleppt, ist gegen eine Schnittstelle geschrieben, von der sich das Projekt abgewandt hat, und das ist es wert zu wissen, wenn Sie sich für ein Tutorial entscheiden.

Zwei verwandte Felder, sniff_override_destination und udp_disable_domain_unmapping, sind in der aktuellen Dokumentation der Listen-Felder ebenfalls als veraltet markiert.

Die Client-Seite

Der Client braucht weniger als der Server. Reality verlangt clientseitig:

  • public_key, das Gegenstück zum privaten Schlüssel des Servers
  • short_id, die zu einem Wert passen muss, den der Server akzeptiert

Daneben steht das utls-Objekt mit enabled und fingerprint. Dokumentierte akzeptierte Fingerprint-Werte sind chrome, firefox, edge, safari, 360, qq, ios, android, random und randomized. Die Dokumentation gibt an, dass der Chrome-Fingerprint verwendet wird, wenn das Feld leer ist.

Ein Punkt der Ehrlichkeit an dieser Stelle, weil Anleitungen gern das Gegenteil behaupten: die sing-box Dokumentation führt utls als eigenständige TLS-Option und sagt nicht, dass Reality es voraussetzt. Die meisten Client-Konfigurationen aktivieren es trotzdem.

Die Wahl des Handshake-Hosts

Kein Konfigurationswert beeinflusst Ihr Ergebnis stärker, und keine Anleitung kann ihn für Sie auswählen, weil die richtige Antwort davon abhängt, wo Ihr Server steht und wo Ihre Clients sind.

Die Eigenschaften, auf die es ankommt:

  • Es sollte ein Host sein, der auf dem angesteuerten Port tatsächlich TLS 1.3 unterstützt
  • Der Datenverkehr sollte vom Netzwerkstandort Ihres Servers aus plausibel wirken
  • Es sollte keine Seite sein, die im Land, aus dem Sie sich verbinden, selbst blockiert ist, denn das würde den Zweck vollständig zunichtemachen
  • Es sollte keine Seite sein, die Sie kontrollieren, denn der Sinn liegt darin, dass es der echte Datenverkehr von jemand anderem ist

Ein häufig wiederholter Ratschlag lautet, etwas Großes und Generisches zu wählen. Seien Sie mit dieser Begründung vorsichtig: ein Host, den jedes Tutorial empfiehlt, ist per Definition ein Host, der in jeder Konfiguration auftaucht, und Beliebtheit innerhalb der Proxy-Community ist nicht dasselbe wie Unauffälligkeit.

Bevor Sie es für funktionierend erklären

Zwei Prüfungen, die sich lohnen und über "der Client hat sich verbunden" hinausgehen.

Prüfen Sie, ob der Fallback sich richtig verhält. Richten Sie einen ganz normalen Browser auf Adresse und Port Ihres Servers. Zu sehen sein sollte die Handshake-Seite, kein Fehler und kein Timeout. Wenn etwas anderes erscheint, macht der Passthrough seinen Job nicht, und das Setup fällt stärker auf als ein gewöhnlicher Proxy.

Prüfen Sie beide Uhren. Wenn Sie max_time_difference gesetzt haben, erzeugt eine Abweichung auf einer der beiden Maschinen Fehler, die wie Authentifizierungsprobleme aussehen und Sie dazu bringen, an Schlüsseln herumzueditieren, die nie falsch waren.

Wenn Sie sich noch zwischen den Engines entscheiden, statt eine zu konfigurieren: die Abwägungen stehen in unserem Vergleich sing-box gegen Xray.

Die Kurzfassung

Drei erforderliche Reality-Felder auf dem Server: handshake, private_key, short_id. Zwei auf dem Client: public_key, short_id. Die Schlüssel kommen von sing-box generate reality-keypair. Und wenn die Anleitung, die Sie gerade lesen, sniff oder domain_strategy in den Inbound setzt, stammt sie aus der Zeit vor Version 1.11, und die aktuelle Entsprechung ist eine Route-Rule-Action.

Feldnamen, Anforderungen und Deprecations in diesem Artikel stammen aus der offiziellen sing-box Dokumentation und dem Migrationsleitfaden, geprüft gegen Release 1.13.15 am 30. Juli 2026. Konfigurationsschnittstellen ändern sich zwischen Versionen, prüfen Sie daher gegen die Dokumentation des Releases, das Sie einsetzen. Das Umgehen von Zensur ist in manchen Rechtsordnungen eingeschränkt oder rechtswidrig; prüfen Sie, was bei Ihnen gilt.

Häufig gestellte Fragen

Welche sing-box Felder brauche ich für einen VLESS Reality Inbound wirklich?
Der VLESS Inbound selbst benötigt type, tag, eine Listen-Adresse mit Port und ein users-Array, in dem jeder Eintrag eine uuid trägt. Der Reality-Teil liegt im tls-Objekt und verlangt serverseitig drei Dinge: ein handshake-Objekt, das mit server und server_port auf eine echte externe Seite zeigt, einen von sing-box generierten private_key und eine short_id. Alles Weitere im Inbound ist optional.
Womit werden der Reality Private Key und Public Key erzeugt?
Mit dem Befehl sing-box generate reality-keypair. Er gibt ein zusammengehöriges Paar aus. Der private_key bleibt in der Serverkonfiguration, der public_key kommt in die Client-Konfiguration. Sie sind nicht austauschbar, und ein Client mit dem falschen public_key scheitert am Handshake, statt auf einfaches TLS zurückzufallen.
Darf die short_id leer sein?
Die Dokumentation beschreibt short_id als hexadezimale Zeichenkette mit null bis acht Stellen, ein leerer Wert liegt also innerhalb der Spezifikation. Der Wert auf dem Client muss zu einem Wert passen, den der Server akzeptiert. Genau das wird übersehen, wenn jemand eine Serverkonfiguration kopiert und nur die UUID anpasst.
Warum stehen sniff und domain_strategy in älteren sing-box Tutorials im Inbound?
Weil das vor Version 1.11.0 korrekt war. Diese Felder wurden damals zusammen mit sniff_timeout als veraltet markiert und in Route-Rule-Actions verschoben: action sniff mit einem timeout-Parameter und action resolve mit einem strategy-Parameter. Auf die alte Art geschriebene Konfigurationen werden weiterhin eingelesen, aber Sie folgen damit einem veralteten Pfad. Das sollte man wissen, bevor man darauf aufbaut.
Brauche ich utls auf dem Client?
Die sing-box Dokumentation führt utls als eigene Option im TLS-Block mit einem enabled-Flag und einem fingerprint, und sie sagt nicht, dass Reality es voraussetzt. Viele Client-Konfigurationen setzen es trotzdem. Wenn Sie fingerprint leer lassen, wird laut Dokumentation der Chrome-Fingerprint verwendet.