आउटलाइन कॉन्फ़िगरेशन का रेफ़रंस

Outline, वीपीएन पैरामीटर तय करने और टीसीपी/यूडीपी ट्रैफ़िक को मैनेज करने के लिए, YAML पर आधारित कॉन्फ़िगरेशन का इस्तेमाल करता है. कॉन्फ़िगरेशन में कई लेवल पर कंपोज़ेबिलिटी की सुविधा होती है. इससे, सेटअप को अपनी ज़रूरत के हिसाब से बदला जा सकता है और बढ़ाया जा सकता है.

टॉप-लेवल कॉन्फ़िगरेशन में TunnelConfig के बारे में बताया गया है.

उदाहरण

Shadowsocks का सामान्य कॉन्फ़िगरेशन ऐसा दिखेगा:

transport:
  $type: tcpudp

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

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

ध्यान दें कि अब टीसीपी और यूडीपी, अलग-अलग पोर्ट या एंडपॉइंट पर चल सकते हैं.

डुप्लीकेट होने से बचने के लिए, YAML ऐंकर और << मर्ज कुंजी का इस्तेमाल किया जा सकता है:

transport:
  $type: tcpudp

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

  udp: *shared

अब रणनीतियां तैयार की जा सकती हैं और एक से ज़्यादा बार हॉप किया जा सकता है:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks

    endpoint:
      $type: dial
      address: exit.example.com:4321
      dialer:
        $type: shadowsocks
        address: entry.example.com:4321
        cipher: chacha20-ietf-poly1305
        secret: ENTRY_SECRET

    cipher: chacha20-ietf-poly1305
    secret: EXIT_SECRET

  udp: *shared

अगर Shadowsocks जैसे "लुक-लाइक-नथिंग" प्रोटोकॉल ब्लॉक कर दिए जाते हैं, तो WebSockets पर Shadowsocks का इस्तेमाल किया जा सकता है. इसे डिप्लॉय करने का तरीका जानने के लिए, सर्वर के कॉन्फ़िगरेशन का उदाहरण देखें. क्लाइंट कॉन्फ़िगरेशन ऐसा दिखेगा:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

ध्यान दें कि Websocket एंडपॉइंट, बदले में एक एंडपॉइंट ले सकता है. इसका इस्तेमाल डीएनएस पर आधारित ब्लॉकिंग को बायपास करने के लिए किया जा सकता है:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
        endpoint: cloudflare.net:443
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
        endpoint: cloudflare.net:443
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

ध्यान दें कि WebSockets की सुविधा, फ़िलहाल Windows पर काम नहीं करती. सभी प्लैटफ़ॉर्म के लिए एक ही कॉन्फ़िगरेशन का इस्तेमाल करने के लिए, पुराने सिस्टम के साथ काम करने की सुविधा के लिए first-supported का इस्तेमाल करें:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
      $type: first-supported
      options:
        - $type: websocket
          url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
        - ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
      $type: first-supported
      options:
        - $type: websocket
          url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
        - ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

सुरंगें

TunnelConfig

टनल, आउटलाइन कॉन्फ़िगरेशन में टॉप-लेवल ऑब्जेक्ट होता है. इससे यह तय किया जाता है कि वीपीएन को कैसे कॉन्फ़िगर किया जाना चाहिए.

फ़ॉर्मैट: 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

ट्रांसपोर्ट

TransportConfig

इससे यह तय होता है कि टारगेट डेस्टिनेशन के साथ पैकेट कैसे एक्सचेंज किए जाने चाहिए.

फ़ॉर्मैट: इंटरफ़ेस

इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:

TCPUDPConfig

TCPUDPConfig की मदद से, टीसीपी और यूडीपी के लिए अलग-अलग रणनीतियां सेट की जा सकती हैं.

फ़ॉर्मैट: struct

फ़ील्ड:

  • tcp (DialerConfig): टीसीपी कनेक्शन के लिए इस्तेमाल किया जाने वाला स्ट्रीम डायलर.
  • udp (PacketListenerConfig): यूडीपी पैकेट के लिए इस्तेमाल किया जाने वाला पैकेट लिसनर.

अलग-अलग एंडपॉइंट पर टीसीपी और यूडीपी भेजने का उदाहरण:

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

एंडपॉइंट

एंडपॉइंट, किसी तय एंडपॉइंट से कनेक्शन बनाते हैं. यह डायलर से बेहतर है, क्योंकि इससे एंडपॉइंट के हिसाब से ऑप्टिमाइज़ेशन किया जा सकता है. इसमें स्ट्रीम और पैकेट एंडपॉइंट होते हैं.

EndpointConfig

फ़ॉर्मैट: string | Interface

स्ट्रिंग एंडपॉइंट, चुने गए एंडपॉइंट का host:port पता होता है. कनेक्शन, डिफ़ॉल्ट डायलर का इस्तेमाल करके बनाया जाता है.

स्ट्रीम और पैकेट एंडपॉइंट के लिए, इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:

DialEndpointConfig

यह कुकी, तय किए गए पते पर डायल करके कनेक्शन बनाती है. यह एक डायलर ले सकता है, जो रणनीतियों को कंपोज़ करने की अनुमति देता है.

फ़ॉर्मैट: struct

फ़ील्ड:

  • address (string): डायल करने के लिए एंडपॉइंट का पता
  • dialer (DialerConfig): पते को डायल करने के लिए इस्तेमाल किया जाने वाला डायलर

WebsocketEndpointConfig

टनल, WebSockets पर किसी एंडपॉइंट को स्ट्रीम और पैकेट कनेक्शन भेजती हैं.

स्ट्रीम कनेक्शन के लिए, हर राइट को WebSocket मैसेज में बदल दिया जाता है. पैकेट कनेक्शन के लिए, हर पैकेट को WebSocket मैसेज में बदल दिया जाता है.

फ़ॉर्मैट: struct

फ़ील्ड:

  • url (string): WebSocket एंडपॉइंट का यूआरएल. टीएलएस पर WebSocket के लिए स्कीमा, https या wss होना चाहिए. साथ ही, टेक्स्ट फ़ॉर्मैट वाले WebSocket के लिए, http या ws होना चाहिए.
  • endpoint (EndpointConfig): कनेक्ट करने के लिए वेब सर्वर एंडपॉइंट. अगर यह मौजूद नहीं है, तो यह यूआरएल में दिए गए पते से कनेक्ट होता है.

डायलर

डायल करने वाले ऐप्लिकेशन, एंडपॉइंट के पते के आधार पर कनेक्शन बनाते हैं. इसमें स्ट्रीम और पैकेट डायलर होते हैं.

DialerConfig

फ़ॉर्मैट: null | Interface

null (मौजूद नहीं) डायलर का मतलब डिफ़ॉल्ट डायलर है. यह स्ट्रीम के लिए डायरेक्ट टीसीपी कनेक्शन और पैकेट के लिए डायरेक्ट यूडीपी कनेक्शन का इस्तेमाल करता है.

स्ट्रीम और पैकर डायलर के लिए, इस्तेमाल किए जा सकने वाले इंटरफ़ेस टाइप:

पैकेट लिसनर

पैकेट लिसनर, बिना किसी सीमा वाला पैकेट कनेक्शन बनाता है. इसका इस्तेमाल, कई डेस्टिनेशन पर पैकेट भेजने के लिए किया जा सकता है.

PacketListenerConfig

फ़ॉर्मैट: null | Interface

null (मौजूद नहीं) पैकेट लिसनर का मतलब डिफ़ॉल्ट पैकेट लिसनर होता है, जो कि यूडीपी पैकेट लिसनर होता है.

इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:

रणनीतियां

Shadowsocks

LegacyShadowsocksConfig

LegacyShadowsocksConfig, Shadowsocks का इस्तेमाल करने वाले टनल को दिखाता है. यह पुराने सिस्टम के साथ काम करने की सुविधा के लिए, लेगसी फ़ॉर्मैट लागू करता है.

फ़ॉर्मैट: struct

फ़ील्ड:

  • server (string): वह होस्ट जिससे कनेक्ट करना है
  • server_port (number): कनेक्ट करने के लिए पोर्ट नंबर
  • method (string): इस्तेमाल किया जाने वाला AEAD cipher
  • password (string): इसका इस्तेमाल एन्क्रिप्शन कुंजी जनरेट करने के लिए किया जाता है
  • prefix (string): इस्तेमाल किया जाने वाला prefix disguise. स्ट्रीम और पैकेट कनेक्शन पर काम करता है.

उदाहरण:

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

LegacyShadowsocksURI

LegacyShadowsocksURI, Shadowsocks को ट्रांसपोर्ट के तौर पर इस्तेमाल करने वाले टनल को दिखाता है. यह पुराने सिस्टम के साथ काम करने की सुविधा के लिए, यूआरएल के पुराने फ़ॉर्मैट का इस्तेमाल करता है.

फ़ॉर्मैट: string

लेगसी Shadowsocks यूआरआई का फ़ॉर्मैट और SIP002 यूआरआई स्कीम देखें. हम प्लग इन इस्तेमाल करने की सुविधा नहीं देते.

उदाहरण:

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

ShadowsocksConfig

ShadowsocksConfig, स्ट्रीम या पैकेट डायलर के साथ-साथ Shadowsocks का इस्तेमाल करने वाले पैकेट लिसनर को भी दिखा सकता है.

फ़ॉर्मैट: struct

फ़ील्ड:

  • endpoint (EndpointConfig): कनेक्ट करने के लिए Shadowsocks एंडपॉइंट
  • cipher (string): इस्तेमाल किया जाने वाला AEAD cipher
  • 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

इंटरफ़ेस

इंटरफ़ेस की मदद से, कई तरीकों में से किसी एक को लागू किया जा सकता है. यह $type फ़ील्ड का इस्तेमाल करके, उस टाइप के बारे में बताता है जिसे कॉन्फ़िगरेशन दिखाता है.

उदाहरण:

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