Shadowsocks 文檔
導航
Shadowsocks 配置格式
配置文件
Shadowsocks 採用 JSON 格式配置:
{
“服務器”:“my_server_ip”,
“服務器端口”:8388,
“本地端口”:1080,
“密碼”:“barfoo!”,
“方法”:“chacha20-ietf-poly1305”
}
JSON格式
- 服務器 : 您的主機名或服務器 IP (IPv4/IPv6)。
- server_port:服務器端口號。
- local_port:本地端口號。
- 密碼:用於加密傳輸的密碼。
- 方法:加密方法。
加密方式
我們配置我們的服務器並建議您使用 chacha20-ietf-poly1305 AEAD 密碼,因為它是最強大的加密方法。
如果配置你自己的 shadowsocks 服務器,你可以選擇“chacha20-ietf-poly1305”或“aes-256-gcm”。
網址及二維碼
Shadowsocks for 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:測試/!@#:@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 執行網絡地址轉換。