Tài liệu Shadowsocks

Định dạng cấu hình Shadowsocks

Tập tin cấu hình

Shadowsocks có cấu hình định dạng JSON:

{

    “máy chủ”:”my_server_ip”,

    "Server_port": 8388,

    “local_port”:1080,

    "mật khẩu":"barfoo!",

    “phương thức”:”chacha20-ietf-poly1305″

}

Định dạng JSON

  • người phục vụ : tên máy chủ hoặc IP máy chủ của bạn (IPv4/IPv6).
  • server_port: số cổng máy chủ.
  • local_port: số cổng cục bộ.
  • mật khẩu: một mật khẩu được sử dụng để mã hóa chuyển giao.
  • method: phương pháp mã hóa.

Phương pháp mã hóa

Chúng tôi định cấu hình máy chủ của mình và khuyên bạn nên sử dụng mật mã chacha20-ietf-poly1305 AEAD vì đây là phương pháp mã hóa mạnh nhất. 

Nếu định cấu hình máy chủ shadowsocks của riêng bạn, bạn có thể chọn từ “chacha20-ietf-poly1305” hoặc “aes-256-gcm”.

URI & Mã QR

Shadowsocks cho Android / IOS cũng có cấu hình định dạng URI được mã hóa BASE64:

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

 

URI đơn giản phải là: ss://method:password@hostname:port

URI ở trên không tuân theo RFC3986. Mật khẩu trong trường hợp này phải là văn bản thuần túy, không được mã hóa theo phần trăm.



Ví dụ: Chúng tôi đang sử dụng máy chủ tại 192.168.100.1:8888 sử dụng bạn trai-cfb phương pháp mã hóa và mật khẩu kiểm tra/!@#:

 

Sau đó, với URI đơn giản ss://bf-cfb:test/!@#:@192.168.100.1:8888, chúng ta có thể tạo URI được mã hóa BASE64: 

 

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

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg

 

Để giúp sắp xếp và xác định các URI này, bạn có thể nối thêm thẻ sau chuỗi mã hóa BASE64:

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server

Giải quyết

Shadowsocks sử dụng các địa chỉ được tìm thấy ở định dạng địa chỉ SOCKS5:

[Loại 1 byte][Máy chủ có độ dài thay đổi][Cổng 2 byte]

 

Dưới đây là các loại địa chỉ được xác định:

  • 0x01 : máy chủ là địa chỉ IPv4 4 byte.
  • 0x03 : máy chủ lưu trữ là một chuỗi có độ dài thay đổi, bắt đầu bằng độ dài 1 byte, tiếp theo là tên miền tối đa 255 byte.
  • 0x04 : máy chủ là địa chỉ IPv16 6 byte.

 

Số cổng là một số nguyên không dấu big-endian 2 byte.

TCP

Máy khách ss-local bắt đầu kết nối với ss-remote bằng cách gửi dữ liệu được mã hóa bắt đầu bằng địa chỉ đích theo sau là dữ liệu tải trọng. Mã hóa sẽ khác nhau tùy thuộc vào mật mã được sử dụng.

[địa chỉ mục tiêu][tải trọng]

Điều khiển từ xa ss nhận dữ liệu được mã hóa, sau đó giải mã và phân tích cú pháp địa chỉ đích. Sau đó, nó tạo một kết nối TCP mới tới mục tiêu và chuyển tiếp dữ liệu tải trọng tới mục tiêu. ss-remote nhận trả lời từ mục tiêu sau đó mã hóa dữ liệu và chuyển tiếp nó trở lại ss-local cho đến khi nó bị ngắt kết nối.

Đối với các mục đích che giấu, cục bộ và từ xa sẽ gửi dữ liệu bắt tay với một số trọng tải trong gói đầu tiên.

UDP

ss-local gửi gói dữ liệu được mã hóa chứa địa chỉ đích và tải trọng tới ss-remote.

[địa chỉ mục tiêu][tải trọng]

Sau khi nhận được gói được mã hóa, ss-remote sẽ giải mã và phân tích cú pháp địa chỉ đích. Sau đó, nó sẽ gửi một gói dữ liệu mới với tải trọng đến mục tiêu. ss-remote nhận các gói dữ liệu từ đích và thêm địa chỉ đích vào tải trọng trong mỗi gói. Các bản sao được mã hóa được gửi lại cho ss-local.

[địa chỉ mục tiêu][tải trọng]

Quá trình này có thể được chuyển thành ss-remote thực hiện dịch địa chỉ mạng cho ss-local.

Bắt đầu dùng thử miễn phí 5 ngày của bạn