Shadowsocks-Dokumentation
Navigation
Shadowsocks-Konfigurationsformat
Konfigurationsdatei
Shadowsocks akzeptiert Konfigurationen im JSON-Format:
{
„server“: „my_server_ip“,
„server_port“:8388,
„lokaler_port“: 1080,
„Passwort“: „barfoo!“,
„Methode“: „chacha20-ietf-poly1305“
}
JSON-Format
- Server: Ihr Hostname oder Ihre Server-IP (IPv4/IPv6).
- server_port: Serverportnummer.
- local_port: lokale Portnummer.
- Passwort: ein Passwort, das zum Verschlüsseln der Übertragung verwendet wird.
- Methode: Verschlüsselungsmethode.
Verschlüsselungsmethode
Wir konfigurieren unsere Server und empfehlen Ihnen, die AEAD-Chiffre chacha20-ietf-poly1305 zu verwenden, da dies die stärkste Verschlüsselungsmethode ist.
Wenn Sie Ihren eigenen Shadowsocks-Server konfigurieren, können Sie entweder „chacha20-ietf-poly1305“ oder „aes-256-gcm“ auswählen.
URI & QR-Code
Shadowsocks für Android/IOS akzeptiert auch Konfigurationen im BASE64-codierten URI-Format:
ss://BASE64-ENCODED-STRING-OHNE-PADDING#TAG
Der einfache URI sollte lauten: ss://method:password@hostname:port
Der obige URI folgt nicht RFC3986. Das Passwort sollte in diesem Fall im Klartext und nicht prozentkodiert sein.
Beispiel: Wir verwenden einen Server unter 192.168.100.1:8888 Verwendung von bf-cfb Verschlüsselungsverfahren und Passwort Prüfung/!@#:.
Dann mit dem einfachen URI ss://bf-cfb:test/!@#:@192.168.100.1:8888, können wir den BASE64-codierten URI generieren:
> console.log( „ss://“ + btoa(“bf-cfb:test/!@#:@192.168.100.1:8888“) )
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg
Um diese URIs zu organisieren und zu identifizieren, können Sie ein Tag nach der BASE64-codierten Zeichenfolge anhängen:
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server
Adressierung
Shadowsocks verwendet die im SOCKS5-Adressformat gefundenen Adressen:
[1-Byte-Typ][Host mit variabler Länge][2-Byte-Port]
Hier sind die Adresstypen definiert:
- 0x01 : Host ist eine 4-Byte-IPv4-Adresse.
- 0x03 : Host ist eine Zeichenfolge mit variabler Länge, beginnend mit einer Länge von 1 Byte, gefolgt von einem Domänennamen von maximal 255 Byte.
- 0x04 : Host ist eine 16-Byte-IPv6-Adresse.
Die Portnummer ist eine 2-Byte-Big-Endian-Ganzzahl ohne Vorzeichen.
TCP
Der ss-local-Client initiiert eine Verbindung zu ss-remote, indem er verschlüsselte Daten sendet, beginnend mit der Zieladresse, gefolgt von den Nutzdaten. Die Verschlüsselung ist je nach verwendeter Chiffre unterschiedlich.
[Zieladresse][Nutzlast]
Die ss-remote empfängt die verschlüsselten Daten, entschlüsselt und analysiert dann die Zieladresse. Dann baut es eine neue TCP-Verbindung zum Ziel auf und leitet die Nutzdaten an dieses weiter. ss-remote empfängt eine Antwort vom Ziel, verschlüsselt dann die Daten und leitet sie zurück an ss-local, bis die Verbindung getrennt wird.
Zu Verschleierungszwecken sollten Local und Remote die Handshake-Daten mit einigen Nutzdaten im ersten Paket senden.
UDP
ss-local sendet das verschlüsselte Datenpaket mit Zieladresse und Payload an ss-remote.
[Zieladresse][Nutzlast]
Sobald das verschlüsselte Paket empfangen wurde, entschlüsselt und parst ss-remote die Zieladresse. Anschließend sendet er ein neues Datenpaket mit der Nutzlast an das Ziel. ss-remote empfängt die Datenpakete vom Ziel und stellt die Zieladresse der Nutzlast in jedem Paket voran. Verschlüsselte Kopien werden an ss-local zurückgesendet.
[Zieladresse][Nutzlast]
Dieser Prozess kann darauf reduziert werden, dass ss-remote eine Netzwerkadressübersetzung für ss-local durchführt.