Shadowsocks-ի փաստաթղթեր
նավարկություն
Shadowsocks-ի կազմաձևման ձևաչափ
Կազմաձևման ֆայլ
Shadowsocks-ը վերցնում է JSON ձևաչափի կոնֆիգուրացիաներ.
{
«սերվեր»: «my_server_ip»,
«server_port»:8388,
«local_port»:1080,
«գաղտնաբառ»: «barfoo!»,
«մեթոդ»:»chacha20-ietf-poly1305″
}
JSON ձևաչափ
- սերվեր: ձեր հոսթի անունը կամ սերվերի IP-ն (IPv4/IPv6):
- server_port՝ սերվերի պորտի համարը:
- local_port՝ տեղական պորտի համարը:
- գաղտնաբառ. գաղտնաբառ, որն օգտագործվում է փոխանցումը կոդավորելու համար:
- մեթոդ՝ գաղտնագրման մեթոդ:
Կոդավորման մեթոդ
Մենք կարգավորում ենք մեր սերվերները և խորհուրդ ենք տալիս օգտագործել chacha20-ietf-poly1305 AEAD ծածկագիրը, քանի որ դա գաղտնագրման ամենաուժեղ մեթոդն է:
Եթե կարգավորեք ձեր սեփական shadowsocks սերվերը, կարող եք ընտրել «chacha20-ietf-poly1305» կամ «aes-256-gcm»:
URI և QR կոդ
Shadowsocks-ը Android/IOS-ի համար նաև ընդունում է BASE64 կոդավորված URI ձևաչափի կազմաձևեր.
ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG
Պարզ URI-ն պետք է լինի՝ ss://method:password@hostname:port
Վերոնշյալ URI-ը չի հետևում RFC3986-ին: Գաղտնաբառն այս դեպքում պետք է լինի պարզ տեքստ, ոչ թե տոկոսային կոդավորված:
Օրինակ՝ մենք օգտագործում ենք 192.168.100.1:8888 սերվեր օգտագործելով bf-cfb գաղտնագրման եղանակը և գաղտնաբառը փորձարկում/!@#:.
Հետո՝ պարզ URI-ով ss://bf-cfb:test/!@#:@192.168.100.1:8888, մենք կարող ենք ստեղծել BASE64 կոդավորված URI.
> console.log( «ss://» + btoa («bf-cfb:test/!@#:@192.168.100.1:8888») )
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg
Այս URI-ները կազմակերպելու և նույնականացնելու համար կարող եք BASE64 կոդավորված տողից հետո պիտակ ավելացնել.
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server
Դիմելով
Shadowsocks-ն օգտագործում է SOCKS5 հասցեի ձևաչափում հայտնաբերված հասցեները.
[1 բայթ տիպ] [փոփոխական երկարությամբ հոսթ] [2 բայթ պորտ]
Ահա սահմանված հասցեների տեսակները.
- 0x01. հոսթը 4 բայթանոց IPv4 հասցե է:
- 0x03. host-ը փոփոխական երկարության տող է, որը սկսվում է 1 բայթ երկարությամբ, որին հաջորդում է առավելագույնը 255 բայթ տիրույթի անուն:
- 0x04. հոսթը 16 բայթանոց IPv6 հասցե է:
Նավահանգստի համարը 2 բայթ մեծ էնդյան անստորագիր ամբողջ թիվ է:
TCP
ss-local հաճախորդը նախաձեռնում է միացում ss-remote-ի հետ՝ ուղարկելով գաղտնագրված տվյալներ՝ սկսած թիրախային հասցեից, որին հաջորդում են բեռնաթափման տվյալները: Կոդավորումը տարբեր կլինի՝ կախված օգտագործվող ծածկագրից:
[նպատակային հասցե]
ss-remote-ը ստանում է կոդավորված տվյալները, այնուհետև վերծանում և վերլուծում է թիրախային հասցեն: Այնուհետև այն ստեղծում է նոր TCP կապ դեպի թիրախ և ուղարկում է օգտակար բեռնվածության տվյալները: ss-remote-ը պատասխան է ստանում թիրախից, այնուհետև գաղտնագրում է տվյալները և այն հետ է ուղարկում ss-local, մինչև այն անջատվի:
Խճճվածության նպատակով տեղական և հեռակառավարման սարքերը պետք է ուղարկեն ձեռքսեղմման տվյալները առաջին փաթեթում որոշակի օգտակար բեռով:
UDP
ss-local-ն ուղարկում է գաղտնագրված տվյալների փաթեթը, որը պարունակում է թիրախային հասցեն և օգտակար բեռը ss-remote:
[նպատակային հասցե]
Կոդավորված փաթեթը ստանալուց հետո ss-remote-ը վերծանում և վերլուծում է թիրախային հասցեն: Այնուհետև այն ուղարկում է նոր տվյալների փաթեթ՝ օգտակար բեռով դեպի թիրախ: ss-remote-ը ստանում է տվյալների փաթեթները թիրախից և նախադրում է թիրախային հասցեն յուրաքանչյուր փաթեթի օգտակար բեռին: Կոդավորված պատճենները հետ են ուղարկվում ss-local-ին:
[նպատակային հասցե]
Այս գործընթացը կարող է զուգորդվել դեպի ss-remote, որը կատարում է ցանցային հասցեի թարգմանություն ss-local-ի համար: