Shadowsocks dokumentacija
Navigacija
„Shadowsocks“ konfigūracijos formatas
Konfigūruoti failą
„Shadowsocks“ naudoja JSON formato konfigūracijas:
{
„serveris“: „mano_serverio_ip“,
"server_port": 8388,
„local_port“: 1080,
„slaptažodis“: „barfoo!“,
"metodas": "chacha20-ietf-poly1305"
}
JSON formatas
- serveris: savo pagrindinio kompiuterio pavadinimą arba serverio IP (IPv4 / IPv6).
- server_port: serverio prievado numeris.
- local_port: vietinio prievado numeris.
- slaptažodis: slaptažodis, naudojamas perdavimui užšifruoti.
- metodas: šifravimo metodas.
Šifravimo metodas
Konfigūruojame savo serverius ir rekomenduojame naudoti chacha20-ietf-poly1305 AEAD šifrą, nes tai yra stipriausias šifravimo būdas.
Jei konfigūruojate savo „shadowsocks“ serverį, galite pasirinkti „chacha20-ietf-poly1305“ arba „aes-256-gcm“.
URI ir QR kodas
„Shadowsocks“, skirta „Android“ / „IOS“, taip pat naudoja BASE64 koduotus URI formato konfigūracijas:
ss://BASE64-ENCODED-STRING-BE PADDING#TAG
Paprastas URI turėtų būti: ss://method:password@hostname:port
Aukščiau pateiktas URI neatitinka RFC3986. Slaptažodis šiuo atveju turėtų būti paprastas tekstas, o ne užkoduotas procentais.
Pavyzdys: Mes naudojame serverį 192.168.100.1:8888 naudojant bf-cfb šifravimo būdas ir slaptažodis test/!@#:.
Tada su paprastu URI ss://bf-cfb:test/!@#:@192.168.100.1:8888, galime sugeneruoti BASE64 koduotą URI:
> console.log("ss://" + btoa("bf-cfb:test/!@#:@192.168.100.1:8888")
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg
Norėdami padėti tvarkyti ir identifikuoti šiuos URI, galite pridėti žymą po BASE64 užkoduotos eilutės:
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server
Adresavimas
„Shadowsocks“ naudoja adresus, esančius SOCKS5 adreso formatu:
[1 baito tipas][kintamo ilgio priegloba][2 baitų prievadas]
Čia yra apibrėžti adresų tipai:
- 0x01: pagrindinis kompiuteris yra 4 baitų IPv4 adresas.
- 0x03 : priegloba yra kintamo ilgio eilutė, prasidedanti 1 baito ilgiu, po kurio seka ne daugiau kaip 255 baitų domeno pavadinimas.
- 0x04: pagrindinis kompiuteris yra 16 baitų IPv6 adresas.
Prievado numeris yra 2 baitų didysis beženklis sveikasis skaičius.
TCP
Ss-local klientas inicijuoja ryšį su ss-remote, siųsdamas užšifruotus duomenis, pradedant tiksliniu adresu, po kurio seka naudingos apkrovos duomenys. Šifravimas skirsis priklausomai nuo naudojamo šifro.
[tikslinis adresas][naudinga apkrova]
Ss-remote gauna užšifruotus duomenis, tada iššifruoja ir analizuoja tikslinį adresą. Tada jis sukuria naują TCP ryšį su taikiniu ir persiunčia į jį naudingos apkrovos duomenis. ss-remote gauna atsakymą iš taikinio, tada užšifruoja duomenis ir persiunčia juos atgal į ss-local, kol bus atjungtas.
Užtemdymo tikslais vietinis ir nuotolinis turėtų siųsti rankos paspaudimo duomenis su tam tikra naudingoji apkrova pirmame pakete.
UDP
ss-local siunčia užšifruotą duomenų paketą, kuriame yra tikslinis adresas ir naudingoji apkrova, į ss-remote.
[tikslinis adresas][naudinga apkrova]
Kai gaunamas užšifruotas paketas, ss-remote iššifruoja ir analizuoja tikslinį adresą. Tada jis siunčia naują duomenų paketą su naudingu kroviniu į tikslą. ss-remote gauna duomenų paketus iš tikslinio objekto ir kiekviename pakete prideda tikslinį adresą prie naudingos apkrovos. Šifruotos kopijos siunčiamos atgal į ss-local.
[tikslinis adresas][naudinga apkrova]
Šis procesas gali būti sutrumpintas iki ss-remote, atliekant tinklo adreso vertimą ss-local.