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
इससे यह तय होता है कि टारगेट डेस्टिनेशन के साथ पैकेट कैसे एक्सचेंज किए जाने चाहिए.
फ़ॉर्मैट: इंटरफ़ेस
इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:
tcpudp
: TCPUDPConfig
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 पता होता है. कनेक्शन, डिफ़ॉल्ट डायलर का इस्तेमाल करके बनाया जाता है.
स्ट्रीम और पैकेट एंडपॉइंट के लिए, इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:
dial
: DialEndpointConfigfirst-supported
: FirstSupportedConfigwebsocket
: WebsocketEndpointConfigshadowsocks
: ShadowsocksConfig
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 (मौजूद नहीं) डायलर का मतलब डिफ़ॉल्ट डायलर है. यह स्ट्रीम के लिए डायरेक्ट टीसीपी कनेक्शन और पैकेट के लिए डायरेक्ट यूडीपी कनेक्शन का इस्तेमाल करता है.
स्ट्रीम और पैकर डायलर के लिए, इस्तेमाल किए जा सकने वाले इंटरफ़ेस टाइप:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksConfig
पैकेट लिसनर
पैकेट लिसनर, बिना किसी सीमा वाला पैकेट कनेक्शन बनाता है. इसका इस्तेमाल, कई डेस्टिनेशन पर पैकेट भेजने के लिए किया जा सकता है.
PacketListenerConfig
फ़ॉर्मैट: null | Interface
null (मौजूद नहीं) पैकेट लिसनर का मतलब डिफ़ॉल्ट पैकेट लिसनर होता है, जो कि यूडीपी पैकेट लिसनर होता है.
इन इंटरफ़ेस टाइप का इस्तेमाल किया जा सकता है:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksPacketListenerConfig
रणनीतियां
Shadowsocks
LegacyShadowsocksConfig
LegacyShadowsocksConfig, Shadowsocks का इस्तेमाल करने वाले टनल को दिखाता है. यह पुराने सिस्टम के साथ काम करने की सुविधा के लिए, लेगसी फ़ॉर्मैट लागू करता है.
फ़ॉर्मैट: struct
फ़ील्ड:
server
(string): वह होस्ट जिससे कनेक्ट करना हैserver_port
(number): कनेक्ट करने के लिए पोर्ट नंबरmethod
(string): इस्तेमाल किया जाने वाला AEAD cipherpassword
(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 ciphersecret
(string): इसका इस्तेमाल एन्क्रिप्शन कुंजी जनरेट करने के लिए किया जाता हैprefix
(string, ज़रूरी नहीं): इस्तेमाल किया जाने वाला प्रीफ़िक्स डिसगाइज़. स्ट्रीम और पैकेट कनेक्शन पर काम करता है.
उदाहरण:
endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "
मेटा की परिभाषाएं
FirstSupportedConfig
यह विकल्प, ऐप्लिकेशन के साथ काम करने वाले पहले कॉन्फ़िगरेशन का इस्तेमाल करता है. यह पुराने कॉन्फ़िगरेशन के साथ काम करते हुए, नए कॉन्फ़िगरेशन को शामिल करने का एक तरीका है.
फ़ॉर्मैट: struct
फ़ील्ड:
options
(EndpointConfig[] | DialerConfig[] | PacketListenerConfig[]): विचार करने के लिए विकल्पों की सूची
उदाहरण:
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