Dokumentasi Shadowsocks
Navigasi
Format Konfigurasi Shadowsocks
File Konfigurasi
Shadowsocks mengambil konfigurasi format JSON:
{
"server":"my_server_ip",
"Server_port":8388,
"port_lokal":1080,
"kata sandi": "barfoo!",
“metode”:”chacha20-ietf-poly1305″
}
Format JSON
- pelayan : nama host atau IP server Anda (IPv4/IPv6).
- server_port: nomor port server.
- local_port: nomor port lokal.
- kata sandi: kata sandi yang digunakan untuk mengenkripsi transfer.
- metode: metode enkripsi.
Metode Enkripsi
Kami mengonfigurasi server kami dan menyarankan agar Anda menggunakan cipher AEAD chacha20-ietf-poly1305 karena ini adalah metode enkripsi terkuat.
Jika mengonfigurasi server shadowsocks Anda sendiri, Anda dapat memilih dari "chacha20-ietf-poly1305" atau "aes-256-gcm".
URI & Kode QR
Shadowsocks untuk Android / iOS juga menggunakan konfigurasi format URI yang disandikan BASE64:
ss://BASE64-ENCODED-STRING-TANPA-PADDING#TAG
URI biasa harus: ss://method:password@hostname:port
URI di atas tidak mengikuti RFC3986. Kata sandi dalam hal ini harus berupa teks biasa, bukan persen yang disandikan.
Contoh: Kami menggunakan server di 192.168.100.1:8888 menggunakan bf-cfb metode enkripsi dan kata sandi uji/!@#:.
Kemudian, dengan URI biasa ss://bf-cfb:tes/!@#:@192.168.100.1:8888, kita dapat membuat URI yang disandikan BASE64:
> console.log( “ss://” + btoa(“bf-cfb:test/!@#:@192.168.100.1:8888”) )
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg
Untuk membantu mengatur dan mengidentifikasi URI ini, Anda dapat menambahkan tag setelah string berenkode BASE64:
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server
Pengalamatan
Shadowsocks menggunakan alamat yang ditemukan dalam format alamat SOCKS5:
[tipe 1-byte][host dengan panjang variabel][port 2-byte]
Berikut adalah jenis alamat yang ditentukan:
- 0x01 : host adalah alamat IPv4 4-byte.
- 0x03 : host adalah string panjang variabel, dimulai dengan panjang 1-byte, diikuti dengan nama domain maksimal 255-byte.
- 0x04 : host adalah alamat IPv16 6-byte.
Nomor port adalah 2-byte big-endian unsigned integer.
TCP
Klien ss-local memulai koneksi ke ss-remote dengan mengirimkan data terenkripsi dimulai dengan alamat target diikuti oleh data payload. Enkripsi akan berbeda tergantung pada cipher yang digunakan.
[alamat target][muatan]
ss-remote menerima data terenkripsi, kemudian mendekripsi dan mem-parsing alamat target. Kemudian ia membuat koneksi TCP baru ke target dan meneruskan data payload ke target tersebut. ss-remote menerima balasan dari target kemudian mengenkripsi data dan meneruskannya kembali ke ss-local hingga terputus.
Untuk tujuan kebingungan, lokal dan jarak jauh harus mengirimkan data jabat tangan dengan beberapa muatan di paket pertama.
UDP
ss-local mengirimkan paket data terenkripsi yang berisi alamat target dan payload ke ss-remote.
[alamat target][muatan]
Setelah paket terenkripsi diterima, ss-remote mendekripsi dan mem-parsing alamat target. Kemudian mengirimkan paket data baru dengan payload ke target. ss-remote menerima paket data dari target dan menambahkan alamat target ke payload di setiap paket. Salinan terenkripsi dikirim kembali ke ss-local.
[alamat target][muatan]
Proses ini dapat diringkas menjadi ss-remote melakukan terjemahan alamat jaringan untuk ss-local.