เอกสารประกอบของ Shadowsocks

รูปแบบการกำหนดค่า Shadowsocks

ไฟล์กำหนดค่า

Shadowsocks ใช้การกำหนดค่ารูปแบบ JSON:

{

    “เซิร์ฟเวอร์”:”my_server_ip”,

    "เซิร์ฟเวอร์_พอร์ต":8388,

    “local_port”:1080,

    “รหัสผ่าน”:”บาร์ฟู!”,

    “วิธีการ”:”chacha20-ietf-poly1305″

}

รูปแบบ JSON

  • เซิร์ฟเวอร์ : ชื่อโฮสต์หรือเซิร์ฟเวอร์ IP ของคุณ (IPv4/IPv6)
  • server_port: หมายเลขพอร์ตเซิร์ฟเวอร์
  • local_port: หมายเลขพอร์ตในเครื่อง
  • รหัสผ่าน: รหัสผ่านที่ใช้เข้ารหัสการถ่ายโอน
  • วิธีการ: วิธีการเข้ารหัส

วิธีการเข้ารหัส

เรากำหนดค่าเซิร์ฟเวอร์ของเราและแนะนำให้คุณใช้รหัส AEAD chacha20-ietf-poly1305 เนื่องจากเป็นวิธีการเข้ารหัสที่แข็งแกร่งที่สุด 

หากกำหนดค่าเซิร์ฟเวอร์ shadowsocks ของคุณเอง คุณสามารถเลือกจาก “chacha20-ietf-poly1305” หรือ “aes-256-gcm”

URI และคิวอาร์โค้ด

Shadowsocks สำหรับ Android / IOS ยังใช้การกำหนดค่ารูปแบบ URI ที่เข้ารหัส BASE64:

ss://BASE64-ENCODED-STRING-ไม่มีช่องว่างภายใน#TAG

 

URI ธรรมดาควรเป็น: ss://method:password@hostname:port

URI ข้างต้นไม่เป็นไปตาม RFC3986 รหัสผ่านในกรณีนี้ควรเป็นข้อความล้วน ไม่ใช่เข้ารหัสแบบเปอร์เซ็นต์



ตัวอย่าง: เรากำลังใช้เซิร์ฟเวอร์ที่ 192.168.100.1:8888 การใช้ bf-cfb วิธีการเข้ารหัสและรหัสผ่าน ทดสอบ/!@#:

 

จากนั้นใช้ URI ธรรมดา เอสเอส://bf-cfb:test/!@#:@192.168.100.1:8888เราสามารถสร้าง URI ที่เข้ารหัส BASE64 ได้: 

 

> 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 : โฮสต์คือที่อยู่ IPv4 ขนาด 4 ไบต์
  • 0x03 : host เป็นสตริงที่มีความยาวผันแปรได้ โดยเริ่มจากความยาว 1 ไบต์ ตามด้วยชื่อโดเมนสูงสุด 255 ไบต์
  • 0x04 : โฮสต์คือที่อยู่ IPv16 ขนาด 6 ไบต์

 

หมายเลขพอร์ตเป็นจำนวนเต็มที่ไม่ได้ลงนามขนาดใหญ่ 2 ไบต์

TCP

ไคลเอนต์ ss-local เริ่มต้นการเชื่อมต่อกับ ss-remote โดยส่งข้อมูลที่เข้ารหัสโดยเริ่มจากที่อยู่เป้าหมายตามด้วยข้อมูลเพย์โหลด การเข้ารหัสจะแตกต่างกันไปตามรหัสที่ใช้

[ที่อยู่เป้าหมาย][เพย์โหลด]

ss-remote ได้รับข้อมูลที่เข้ารหัส จากนั้นถอดรหัสและแยกวิเคราะห์ที่อยู่เป้าหมาย จากนั้นจะสร้างการเชื่อมต่อ TCP ใหม่ไปยังเป้าหมายและส่งต่อข้อมูล payload ไปยังเป้าหมาย ss-remote ได้รับการตอบกลับจากเป้าหมาย จากนั้นเข้ารหัสข้อมูลและส่งต่อกลับไปยัง ss-local จนกว่าจะยกเลิกการเชื่อมต่อ

เพื่อจุดประสงค์ในการทำให้งงงวย โลคัลและรีโมตควรส่งข้อมูลการจับมือพร้อมกับเพย์โหลดบางส่วนในแพ็กเก็ตแรก

UDP

ss-local ส่งแพ็คเก็ตข้อมูลที่เข้ารหัสซึ่งมีที่อยู่เป้าหมายและเพย์โหลดไปยัง ss-remote

[ที่อยู่เป้าหมาย][เพย์โหลด]

เมื่อได้รับแพ็กเก็ตที่เข้ารหัสแล้ว ss-remote จะถอดรหัสและแยกวิเคราะห์ที่อยู่เป้าหมาย จากนั้นจะส่งแพ็กเก็ตข้อมูลใหม่พร้อมเพย์โหลดไปยังเป้าหมาย ss-remote รับแพ็คเก็ตข้อมูลจากเป้าหมายและเพิ่มที่อยู่เป้าหมายไปยัง payload ในแต่ละแพ็กเก็ต สำเนาที่เข้ารหัสจะถูกส่งกลับไปที่ ss-local

[ที่อยู่เป้าหมาย][เพย์โหลด]

กระบวนการนี้สามารถสรุปเป็น ss-remote เพื่อทำการแปลที่อยู่เครือข่ายสำหรับ ss-local

เริ่มทดลองใช้ฟรี 5 วันของคุณ