Shadowsocks-documentatie

Shadowsocks-configuratieformaat

Config-bestand

Shadowsocks neemt configuraties in JSON-indeling:

{

    “server”:”mijn_server_ip”,

    "server_poort":8388,

    "lokale_poort":1080,

    "wachtwoord":"barfoo!",

    “methode”:”chacha20-ietf-poly1305″

}

JSON-formaat

  • server: uw hostnaam of server-IP (IPv4/IPv6).
  • server_port: serverpoortnummer.
  • local_port: lokaal poortnummer.
  • wachtwoord: een wachtwoord dat wordt gebruikt om de overdracht te coderen.
  • methode: versleutelingsmethode.

Versleutelingsmethode

We configureren onze servers en raden u aan de chacha20-ietf-poly1305 AEAD-codering te gebruiken, omdat dit de sterkste versleutelingsmethode is. 

Als u uw eigen shadowsocks-server configureert, kunt u kiezen uit "chacha20-ietf-poly1305" of "aes-256-gcm".

URI & QR-code

Shadowsocks voor Android / IOS gebruikt ook BASE64-gecodeerde URI-indelingsconfiguraties:

ss://BASE64-ENCODED-STRING-ZONDER-PADDING#TAG

 

De gewone URI moet zijn: ss://methode:wachtwoord@hostnaam:poort

De bovenstaande URI volgt RFC3986 niet. Het wachtwoord moet in dit geval platte tekst zijn, niet procentgecodeerd.



Voorbeeld: we gebruiken een server op 192.168.100.1:8888 gebruik bf-cfb encryptiemethode en wachtwoord testen/!@#:

 

Vervolgens met de gewone URI ss://bf-cfb:test/!@#:@192.168.100.1:8888, kunnen we de BASE64-gecodeerde URI genereren: 

 

> console.log(“ss://” + btoa(“bf-cfb:test/!@#:@192.168.100.1:8888”) )

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg

 

Om deze URI's te helpen organiseren en identificeren, kunt u een tag toevoegen na de BASE64-gecodeerde tekenreeks:

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server

Het aanpakken

Shadowsocks gebruikt de adressen in het SOCKS5-adresformaat:

[type van 1 byte][host met variabele lengte][poort van 2 bytes]

 

Hier zijn de adrestypes gedefinieerd:

  • 0x01: host is een IPv4-adres van 4 bytes.
  • 0x03 : host is een tekenreeks met variabele lengte, beginnend met een lengte van 1 byte, gevolgd door een domeinnaam van maximaal 255 bytes.
  • 0x04: host is een IPv16-adres van 6 bytes.

 

Het poortnummer is een 2-byte big-endian unsigned integer.

TCP

De ss-local-client brengt een verbinding tot stand met ss-remote door versleutelde gegevens te verzenden, beginnend met het doeladres, gevolgd door de payload-gegevens. De codering zal verschillen, afhankelijk van het gebruikte cijfer.

[doeladres][lading]

De ss-remote ontvangt de versleutelde gegevens, ontsleutelt en ontleedt vervolgens het doeladres. Vervolgens maakt het een nieuwe TCP-verbinding met het doel en stuurt het de payload-gegevens ernaar door. ss-remote ontvangt een antwoord van het doel, codeert vervolgens de gegevens en stuurt deze terug naar ss-local totdat de verbinding wordt verbroken.

Voor verduisteringsdoeleinden moeten lokaal en op afstand de handshake-gegevens met een bepaalde lading in het eerste pakket worden verzonden.

UDP

ss-local stuurt het versleutelde datapakket met het doeladres en de payload naar ss-remote.

[doeladres][lading]

Zodra het gecodeerde pakket is ontvangen, decodeert en ontleedt ss-remote het doeladres. Vervolgens stuurt het een nieuw datapakket met de payload naar het doel. ss-remote ontvangt de datapakketten van het doel en voegt het doeladres toe aan de payload in elk pakket. Versleutelde kopieën worden teruggestuurd naar ss-local.

[doeladres][lading]

Dit proces komt neer op het uitvoeren van een netwerkadresvertaling door ss-remote voor ss-local.

Start uw gratis proefperiode van 5 dagen