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
Transports
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
स्ट्रीम डायलरों के लिए, इस्तेमाल किए जा सकने वाले इंटरफ़ेस टाइप:
iptable: IPTableConfigdirect: डायरेक्टblock: ब्लॉक करें
पैकेट लिसनर
पैकेट लिसनर, बिना किसी सीमा वाला पैकेट कनेक्शन बनाता है. इसका इस्तेमाल, कई डेस्टिनेशन पर पैकेट भेजने के लिए किया जा सकता है.
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 "
सेलेक्टिव रूटिंग
IPTableConfig
यह एक स्ट्रीम डायलर को दिखाता है, जो डेस्टिनेशन के आईपी पते के आधार पर कनेक्शन को रूट करता है. यह डेस्टिनेशन आईपी का मिलान, table में मौजूद नियमों की सूची से करता है. अगर कोई नियम मैच होता है, तो कनेक्शन को उस नियम में dialer
बताया गया तरीका इस्तेमाल करके मैनेज किया जाता है. अगर कोई भी नियम मैच नहीं होता है, तो कनेक्शन को fallback डायलर हैंडल करता है.
यह सिर्फ़ स्ट्रीम करने वाला डायलर है और इसका इस्तेमाल tcp ट्रांसपोर्ट के लिए किया जाना चाहिए.
फ़ॉर्मैट: struct
फ़ील्ड:
table(list): राउटिंग के नियमों की सूची.ips(list): आईपी पतों या सीआईडीआर रेंज की सूची (उदाहरण के लिए,192.0.2.0/24).dialer(DialerConfig): अगर डेस्टिनेशन आईपी,ipsमें मौजूद किसी एंट्री से मेल खाता है, तो इस डायलर का इस्तेमाल किया जाएगा.
fallback(DialerConfig): अगर डेस्टिनेशन आईपी,tableमें मौजूद किसी भी नियम से मेल नहीं खाता है, तो इस डायलर का इस्तेमाल करें.
उदाहरण:
# This config blocks TCP connections to 192.0.2.0/24 and sends all
# other TCP traffic directly.
transport:
$type: tcpudp
tcp:
$type: iptable
table:
- ips:
- 192.0.2.0/24
dialer:
$type: block
fallback:
$type: direct
udp:
$type: shadowsocks
# ... udp config
यूटिलिटी डायलर
सीधा
यह डायरेक्ट स्ट्रीम डायलर को दिखाता है.
यह सिर्फ़ स्ट्रीम करने वाला डायलर है और इसका इस्तेमाल tcp ट्रांसपोर्ट के लिए किया जाना चाहिए.
उदाहरण:
dialer:
$type: direct
ब्लॉक करें
यह एक ऐसे डायलर को दिखाता है जो कनेक्शन के सभी अनुरोधों को ब्लॉक करता है. इसका इस्तेमाल, खास डेस्टिनेशन के लिए ट्रैफ़िक को साफ़ तौर पर अस्वीकार करने के लिए किया जा सकता है. खास तौर पर, जब इसका इस्तेमाल IPTableConfig के साथ किया जाता है.
यह सिर्फ़ स्ट्रीम करने वाला डायलर है और इसका इस्तेमाल tcp ट्रांसपोर्ट के लिए किया जाना चाहिए.
उदाहरण:
dialer:
$type: block
मेटा की परिभाषाएं
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