Config

Tunnel

TunnelConfig

Tunnel เป็นออบเจ็กต์ระดับบนสุดในการกำหนดค่า Outline ซึ่งจะระบุว่าควรกำหนดค่า VPN อย่างไร

รูปแบบ: ExplicitTunnelConfig | LegacyShadowsocksConfig | LegacyShadowsocksURI

ExplicitTunnelConfig

รูปแบบ: struct

ฟิลด์:

  • transport (TransportConfig): การรับส่งที่จะใช้เพื่อแลกเปลี่ยนแพ็กเกจกับปลายทางเป้าหมาย
  • error (struct): ข้อมูลสำหรับแจ้งให้ผู้ใช้ทราบในกรณีที่เกิดข้อผิดพลาดในการให้บริการ (เช่น คีย์หมดอายุ โควต้าหมด)
    • message (string): ข้อความที่ใช้ง่ายซึ่งจะแสดงต่อผู้ใช้
    • details (string): ข้อความที่จะแสดงเมื่อผู้ใช้เปิดรายละเอียดข้อผิดพลาด ซึ่งมีประโยชน์สำหรับการแก้ปัญหา

ฟิลด์ error และ transport จะเป็นข้อมูลแยกกัน

ตัวอย่างที่สําเร็จ

transport:
  $type: tcpudp
  tcp:
    ...  # Stream Dialer for TCP
  udp:
    ...  # Packet Listener for UDP

ตัวอย่างข้อผิดพลาด

error:
  message: Quota exceeded
  details: Used 100GB out of 100GB

Transport

TransportConfig

ระบุวิธีแลกเปลี่ยนแพ็กเก็ตกับปลายทางเป้าหมาย

รูปแบบ: Interface

ประเภท Interface ที่รองรับ

TCPUDPConfig

TCPUDPConfig ช่วยให้ตั้งค่ากลยุทธ์ TCP และ UDP แยกกันได้

รูปแบบ: struct

ฟิลด์:

  • tcp (DialerConfig): Stream Dialer ที่จะใช้สําหรับการเชื่อมต่อ TCP
  • udp (PacketListenerConfig): Packet Listener ที่จะใช้กับแพ็กเก็ต UDP

ตัวอย่างการส่ง TCP และ UDP ไปยังปลายทางที่แตกต่างกัน

tcp:
  $type: shadowsocks
  endpoint: ss.example.com:80
  <<: &cipher
    cipher: chacha20-ietf-poly1305
    secret: SECRET
  prefix: "POST "

udp:
  $type: shadowsocks
  endpoint: ss.example.com:53
  <<: *cipher

Endpoint

Endpoint จะสร้างการเชื่อมต่อกับปลายทางที่คงที่ ซึ่งดีกว่าใช้ Dialer เนื่องจากช่วยให้เพิ่มประสิทธิภาพเฉพาะปลายทางได้ โดยจะมีทั้ง Stream Endpoint และ Packet Endpoint

EndpointConfig

รูปแบบ: string | Interface

ปลายทาง string คือที่อยู่ host:port ของปลายทางที่เลือก ระบบจะสร้างการเชื่อมต่อโดยใช้ Dialer ตามค่าเริ่มต้น

ประเภท Interface ที่รองรับสําหรับ Stream Endpoint และ Packet Endpoint มีดังนี้

DialEndpointConfig

สร้างการเชื่อมต่อโดยการเชื่อมสายไปยังที่อยู่คงที่ โดยอาจใช้โปรแกรมเชื่อมสาย ซึ่งช่วยให้สามารถกำหนดกลยุทธ์ได้

รูปแบบ: struct

ฟิลด์:

  • address (string): ที่อยู่ปลายทางที่จะเชื่อมสาย
  • dialer (DialerConfig): โปรแกรมเชื่อมสายที่จะใช้เพื่อเชื่อมสายไปยังที่อยู่

WebsocketEndpointConfig

ส่งการเชื่อมต่อสตรีมและแพ็กเก็ตไปยังปลายทางผ่าน Websocket

สำหรับการเชื่อมต่อสตรีม ระบบจะเปลี่ยนการเขียนแต่ละครั้งเป็นข้อความ Websocket และสำหรับการเชื่อมต่อแพ็กเก็ต ระบบจะเปลี่ยนแต่ละแพ็กเก็ตเป็นข้อความ Websocket

รูปแบบ: struct

ฟิลด์:

  • url (string): URL สำหรับปลายทาง Websocket สคีมาต้องเป็น https หรือ wss สำหรับ Websocket ผ่าน TLS และ http หรือ ws สำหรับ Websocket แบบข้อความธรรมดา
  • endpoint (EndpointConfig): ปลายทางของเว็บเซิร์ฟเวอร์ที่จะเชื่อมต่อ หากไม่มี ระบบจะเชื่อมต่อกับที่อยู่ซึ่งระบุไว้ใน URL

Dialer

Dialer จะสร้างการเชื่อมต่อโดยอิงตามที่อยู่ปลายทาง โดยจะมีทั้ง Stream Dialer และ Packet Dialer

DialerConfig

รูปแบบ: null | Interface

Dialer ที่เป็น null (ค่าว่าง) หมายถึง Dialer เริ่มต้น ซึ่งใช้การเชื่อมต่อ TCP โดยตรงสำหรับ Stream และการเชื่อมต่อ UDP โดยตรงสำหรับ Packet

ประเภทอินเทอร์เฟซที่รองรับสำหรับ Stream Dialer และ Packet Dialer

Packet Listener

Packet Listener จะสร้างการเชื่อมต่อแพ็กเก็ตแบบไม่จำกัดซึ่งสามารถใช้เพื่อส่งแพ็กเก็ตไปยังปลายทางหลายแห่ง

PacketListenerConfig

รูปแบบ: null | Interface

Packet Listener ที่เป็น null (ค่าว่าง) หมายถึง Packet Listener เริ่มต้น ซึ่งก็คือ UDP Packet Listener

ประเภท Interface ที่รองรับ

กลยุทธ์

Shadowsocks

LegacyShadowsocksConfig

LegacyShadowsocksConfig แสดงถึง Tunnel ที่ใช้ Shadowsocks เป็นช่องทางการรับส่ง โดยใช้รูปแบบเดิมเพื่อให้เข้ากันได้แบบย้อนหลัง

รูปแบบ: struct

ฟิลด์:

  • server (string): โฮสต์ที่จะเชื่อมต่อ
  • server_port (number): หมายเลขพอร์ตที่จะเชื่อมต่อ
  • method (string): การเข้ารหัส AEAD ที่จะใช้
  • password (string): ใช้ในการสร้างคีย์การเข้ารหัส
  • prefix (string): การซ่อนคำนำหน้าที่จะใช้ โดยรองรับเฉพาะการเชื่อมต่อสตรีม

ตัวอย่าง:

server: example.com
server_port: 4321
method: chacha20-ietf-poly1305
password: SECRET
prefix: "POST "

LegacyShadowsocksURI

LegacyShadowsocksURI แสดงถึง Tunnel ที่ใช้ Shadowsocks เป็นช่องทางการรับส่ง โดยใช้ URL รูปแบบเดิมเพื่อให้เข้ากันได้แบบย้อนหลัง

รูปแบบ: string

ดูรูปแบบ URI ของ Shadowsocks รุ่นเดิมและรูปแบบ URI ของ SIP002 ทั้งนี้เราไม่รองรับปลั๊กอิน

ตัวอย่าง:

ss://chacha20-ietf-poly1305:SECRET@example.com:443?prefix=POST%20

ShadowsocksConfig

ShadowsocksConfig สามารถแสดงถึง Stream Dialer หรือ Packet Dialer รวมถึง Packet Listener ที่ใช้ Shadowsocks ได้เช่นกัน

รูปแบบ: struct

ฟิลด์:

  • endpoint (EndpointConfig): ปลายทาง Shadowsocks ที่จะเชื่อมต่อ
  • cipher (string): การเข้ารหัส AEAD ที่จะใช้
  • secret (string): ใช้ในการสร้างคีย์การเข้ารหัส
  • prefix (string (ไม่บังคับ)): การซ่อนคำนำหน้าที่จะใช้ โดยรองรับเฉพาะการเชื่อมต่อสตรีม

ตัวอย่าง:

endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "

คำอธิบายเมตา

FirstSupportedConfig

ใช้การกําหนดค่าแรกที่แอปพลิเคชันรองรับ วิธีนี้ช่วยให้รวมการกําหนดค่าใหม่ได้ในขณะที่เข้ากันได้แบบย้อนหลังกับการกำหนดค่าเก่า

รูปแบบ: struct

ฟิลด์:

ตัวอย่าง:

options:
  -   $type: websocket
      url: wss://example.com/SECRET_PATH
  -   ss.example.com:4321

Interface

Interface ช่วยให้คุณเลือกการใช้งานได้หลายวิธี โดยใช้ฟิลด์ $type เพื่อระบุประเภทที่ Config แสดง

ตัวอย่าง:

$type: shadowsocks
endpoint: example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET