Shadowsocks-documentatie
Navigatie
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.