Konfiguration

Tunnel

TunnelConfig

„Tunnel“ ist das Objekt auf oberster Ebene in einer Outline-Konfiguration, mit dem die Einstellungen für das VPN festgelegt werden.

Format: ExplicitTunnelConfig | LegacyShadowsocksConfig | LegacyShadowsocksURI

ExplicitTunnelConfig

Format: struct

Felder:

  • transport (TransportConfig): die Transportmethode für den Austausch von Paketen mit dem Ziel.
  • error (struct): die Informationen, die Nutzer im Fall eines Dienstfehlers erhalten (z. B. Schlüssel abgelaufen, Kontingent überschritten).
    • message (string): die Meldung, die Nutzern angezeigt wird.
    • details (string): die Meldung, die angezeigt wird, wenn ein Nutzer die Details zum Fehler aufruft. Diese Informationen sind hilfreich bei der Fehlerbehebung.

Die Felder error und transport schließen sich gegenseitig aus.

Fehlerfreies Beispiel:

transport:
  $type: tcpudp
  tcp:
    ...  # Stream Dialer for TCP
  udp:
    ...  # Packet Listener for UDP

Beispiel mit Fehler:

error:
  message: Quota exceeded
  details: Used 100GB out of 100GB

Transport

TransportConfig

Hiermit wird angegeben, wie Pakete mit dem Ziel ausgetauscht werden.

Format: Interface

Unterstützte Schnittstellentypen:

TCPUDPConfig

Mit TCPUDPConfig lassen sich separate TCP- und UDP-Strategien festlegen.

Format: struct

Felder:

  • tcp (DialerConfig): der Stream Dialer, der für TCP-Verbindungen verwendet werden soll.
  • udp (PacketListenerConfig): der Packet Listener, der für UDP-Pakete verwendet werden soll.

Beispiel für das Senden von TCP und UDP an verschiedene Endpunkte:

tcp:
  $type: shadowsocks
  endpoint: ss.example.com:80
  <<: &cipher
    cipher: chacha20-ietf-poly1305
    secret: SECRET
  prefix: "POST "

udp:
  $type: shadowsocks
  endpoint: ss.example.com:53
  <<: *cipher

Endpunkte

Hiermit werden Verbindungen zu bestimmten Endpunkten hergestellt. Diese Option ist besser als Dialer, da sie endpunktspezifische Optimierungen ermöglicht. Es gibt Stream-Endpunkte und Packet-Endpunkte.

EndpointConfig

Format: string | Interface

Der Endpunkt mit dem Format string fungiert als host:port-Adresse des ausgewählten Endpunkts. Die Verbindung wird über den Standard-Dialer hergestellt.

Unterstützte Interface-Typen für Stream-Endpunkte und Packet-Endpunkte:

DialEndpointConfig

Stellt Verbindungen her, indem eine feste Adresse gewählt wird. Hierfür kann ein Dialer genutzt werden, was eine Kombination von Strategien ermöglicht.

Format: struct

Felder:

  • address (string): die zu wählende Adresse des Endpunkts.
  • dialer (DialerConfig): der zu verwendende Dialer.

WebsocketEndpointConfig

Leitet Stream- und Paketverbindungen über WebSockets an einen Endpunkt weiter.

Bei Stream-Verbindungen wird jeder Schreibvorgang in eine WebSocket-Nachricht umgewandelt. Bei Paketverbindungen wird jedes Paket in eine WebSocket-Nachricht umgewandelt.

Format: struct

Felder:

  • url (string): die URL für den WebSocket-Endpunkt. Das Schema muss https oder wss für verschlüsselte WebSocket-Verbindungen über TLS und http oder ws für unverschlüsselte Verbindungen sein.
  • endpoint (EndpointConfig): der Webserver-Endpunkt, mit dem die Verbindung hergestellt werden soll. Ist dieser nicht erreichbar, wird die in der URL angegebene Adresse für die Verbindung verwendet.

Dialer

Dialer stellen Verbindungen mithilfe einer gegebenen Endpunktadresse her. Es gibt Stream-Dialer und Packet-Dialer.

DialerConfig

Format: null | Interface

null (absent) entspricht dem Standard-Dialer, der direkte TCP-Verbindungen (Stream) und direkte UDP-Verbindungen (Packets) verwendet.

Unterstützte Interface-Typen für Stream-Dialers und Packet-Dialers:

Packet Listeners

Ein Packet Listener erstellt eine nicht gebundene Paketverbindung, die verwendet werden kann, um Pakete an verschiedene Ziele zu senden.

PacketListenerConfig

Format: null | Interface

null (absent) entspricht dem standardmäßigen Packet Listener. Dies ist ein UDP Packet Listener.

Unterstützte Schnittstellentypen:

Strategien

Shadowsocks

LegacyShadowsocksConfig

LegacyShadowsocksConfig repräsentiert einen Tunnel, der Shadowsocks als Transportmethode verwendet. Er implementiert dieses alte Format, um die Abwärtskompatibilität sicherzustellen.

Format: struct

Felder:

  • server (string): der Host, mit dem eine Verbindung hergestellt werden soll.
  • server_port (number): die Portnummer für die Verbindung.
  • method (string): die zu verwendende AEAD-Chiffre.
  • password (string): wird verwendet, um den Verschlüsselungsschlüssel zu generieren.
  • prefix (string): die zu verwendende Vorwahltarnung. Diese wird nur bei Stream-Verbindungen unterstützt.

Beispiel:

server: example.com
server_port: 4321
method: chacha20-ietf-poly1305
password: SECRET
prefix: "POST "

LegacyShadowsocksURI

LegacyShadowsocksURI repräsentiert einen Tunnel, der Shadowsocks als Transportmethode verwendet. Er implementiert das alte URL-Format, um die Abwärtskompatibilität sicherzustellen.

Format: string

Siehe Legacy Shadowsocks URI-Format und SIP002 URI-Schema. Wir unterstützen keine Plug-ins.

Beispiel:

ss://chacha20-ietf-poly1305:SECRET@example.com:443?prefix=POST%20

ShadowsocksConfig

ShadowsocksConfig kann einen Stream Dialer oder einen Packet Dialer sowie einen Packet Listener repräsentieren, die Shadowsocks verwenden.

Format: struct

Felder:

  • endpoint (EndpointConfig): der Shadowsocks-Endpunkt, mit dem die Verbindung hergestellt werden soll.
  • cipher (string): die zu verwendende AEAD-Chiffre.
  • secret (string): wird verwendet, um den Verschlüsselungsschlüssel zu generieren.
  • prefix (string, optional): die zu verwendende Vorwahltarnung. Diese wird nur bei Stream-Verbindungen unterstützt.

Beispiel:

endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "

Meta-Definitionen

FirstSupportedConfig

Nutzt die erste Konfiguration, die von der Anwendung unterstützt wird. Dies ist eine Möglichkeit, neue Konfigurationen zu unterstützen und gleichzeitig die Abwärtskompatibilität mit alten Konfigurationen beizubehalten.

Format: struct

Felder:

Beispiel:

options:
  -   $type: websocket
      url: wss://example.com/SECRET_PATH
  -   ss.example.com:4321

Interface

Interfaces bieten die Möglichkeit, eine von mehreren Implementierungen auszuwählen. Mit dem Feld $type wird der Typ angegeben, den die Konfiguration repräsentiert.

Beispiel:

$type: shadowsocks
endpoint: example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET