स्मार्ट डायलर कॉन्फ़िगरेशन

स्मार्ट डायलर, ऐसी रणनीति खोजता है जो टेस्ट डोमेन की दी गई सूची के लिए डीएनएस और टीएलएस को अनब्लॉक करती है. यह कॉन्फ़िगरेशन, चुनने के लिए कई रणनीतियों के बारे में बताता है.

स्मार्ट डायलर के लिए YAML कॉन्फ़िगरेशन

स्मार्ट डायलर जिस कॉन्फ़िगरेशन का इस्तेमाल करता है वह YAML फ़ॉर्मैट में होता है. उदाहरण के लिए:

dns:
  - system: {}
  - https:
      name: 8.8.8.8
  - https:
      name: 9.9.9.9
tls:
  - ""
  - split:2
  - tlsfrag:1

fallback:
  - ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1

डीएनएस कॉन्फ़िगरेशन

  • dns फ़ील्ड में, जांच के लिए डीएनएस रिज़ॉल्वर की सूची दी जाती है.
  • हर डीएनएस रिज़ॉल्वर, इनमें से किसी एक तरह का हो सकता है:
    • system: सिस्टम रिज़ॉल्वर का इस्तेमाल करें. खाली ऑब्जेक्ट के साथ बताएं.
    • https: एन्क्रिप्ट (सुरक्षित) किए गए डीएनएस-ओवर-एचटीटीपीएस (डीओएच) रिज़ॉल्वर का इस्तेमाल करें.
    • tls: एन्क्रिप्ट (सुरक्षित) किए गए डीएनएस ओवर टीएलएस (डीओटी) रिज़ॉल्वर का इस्तेमाल करें.
    • udp: यूडीपी रिज़ॉल्वर का इस्तेमाल करें.
    • tcp: टीसीपी रिज़ॉल्वर का इस्तेमाल करें.

डीएनएस-ओवर-एचटीटीपीएस रिज़ॉल्वर (डीओएच)

https:
  name: dns.google
  address: 8.8.8.8
  • name: DoH सर्वर का डोमेन नेम.
  • address: DoH सर्वर का host:port. डिफ़ॉल्ट रूप से name:443 पर सेट होता है.

डीएनएस-ओवर-टीएलएस रिज़ॉल्वर (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: DoT सर्वर का डोमेन नाम.
  • address: DoT सर्वर का होस्ट:पोर्ट. डिफ़ॉल्ट रूप से, इसकी वैल्यू name:853 होती है.

यूडीपी रिज़ॉल्वर

udp:
  address: 8.8.8.8
  • address: यह यूडीपी रिज़ॉल्वर का host:port है.

टीसीपी रिज़ॉल्वर

tcp:
  address: 8.8.8.8
  • address: टीसीपी रिज़ॉल्वर का होस्ट:पोर्ट.

TLS कॉन्फ़िगरेशन

  • tls फ़ील्ड में, जांच के लिए टीएलएस ट्रांसपोर्ट की सूची दी जाती है.
  • हर टीएलएस ट्रांसपोर्ट एक स्ट्रिंग होती है. यह स्ट्रिंग, इस्तेमाल किए जाने वाले ट्रांसपोर्ट के बारे में बताती है.
  • उदाहरण के लिए, override:host=cloudflare.net|tlsfrag:1 एक ऐसे ट्रांसपोर्ट के बारे में बताता है जो Cloudflare और टीएलएस फ़्रैगमेंटेशन के साथ डोमेन फ़्रंटिंग का इस्तेमाल करता है. ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन का दस्तावेज़ देखें.

फ़ॉलबैक कॉन्फ़िगरेशन

अगर बिना प्रॉक्सी वाली कोई भी रणनीति कनेक्ट नहीं हो पाती है, तो फ़ॉलबैक कॉन्फ़िगरेशन का इस्तेमाल किया जाता है. उदाहरण के लिए, यह उपयोगकर्ता के कनेक्शन को आज़माने के लिए बैकअप प्रॉक्सी सर्वर के बारे में बता सकता है. फ़ॉलबैक का इस्तेमाल करने पर, कनेक्शन शुरू होने में ज़्यादा समय लगेगा. ऐसा इसलिए, क्योंकि पहले अन्य DNS/TLS रणनीतियों को काम नहीं करना चाहिए या उनका टाइम आउट हो जाना चाहिए.

फ़ॉलबैक स्ट्रिंग इस तरह होनी चाहिए:

  • configurl में बताई गई, StreamDialer की मान्य कॉन्फ़िगरेशन स्ट्रिंग.
  • psiphon फ़ील्ड के चाइल्ड ऑब्जेक्ट के तौर पर, Psiphon का मान्य कॉन्फ़िगरेशन ऑब्जेक्ट.

Shadowsocks सर्वर का उदाहरण

fallback:
  - ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1

SOCKS5 सर्वर का उदाहरण

fallback:
  - socks5://[USERINFO]@[HOST]:[PORT]

Psiphon कॉन्फ़िगरेशन का उदाहरण

Psiphon नेटवर्क का इस्तेमाल करने के लिए, आपको यह करना होगा:

  1. Psiphon की टीम से संपर्क करके, ऐसा कॉन्फ़िगरेशन पाएं जिससे आपको उनके नेटवर्क का ऐक्सेस मिल सके. इसके लिए, कानूनी समझौते की ज़रूरत पड़ सकती है.
  2. Psiphon से मिले कॉन्फ़िगरेशन को, Smart Dialer के कॉन्फ़िगरेशन के fallback सेक्शन में जोड़ें. JSON, YAML के साथ काम करता है. इसलिए, Psiphon के कॉन्फ़िगरेशन को सीधे fallback सेक्शन में कॉपी करके चिपकाया जा सकता है. जैसे:
fallback:
  - psiphon: {
      "PropagationChannelId": "FFFFFFFFFFFFFFFF",
      "SponsorId": "FFFFFFFFFFFFFFFF",
      "DisableLocalSocksProxy" : true,
      "DisableLocalHTTPProxy" : true,
      ...
    }

स्मार्ट डायलर इस्तेमाल करने का तरीका

स्मार्ट डायलर का इस्तेमाल करने के लिए, एक StrategyFinder ऑब्जेक्ट बनाएं. इसके बाद, NewDialer तरीके को कॉल करें. इसमें टेस्ट डोमेन की सूची और YAML कॉन्फ़िगरेशन पास करें. NewDialer तरीके से transport.StreamDialer मिलेगा. इसका इस्तेमाल, मिली हुई रणनीति का इस्तेमाल करके कनेक्शन बनाने के लिए किया जा सकता है. उदाहरण के लिए:

finder := &smart.StrategyFinder{
    TestTimeout:  5 * time.Second,
    LogWriter:   os.Stdout,
    StreamDialer: &transport.TCPDialer{},
    PacketDialer: &transport.UDPDialer{},
}

configBytes := []byte(`
dns:
  - system: {}
  - https:
      name: 8.8.8.8
  - https:
      name: 9.9.9.9
tls:
  - ""
  - split:2
  - tlsfrag:1
fallback:
  - ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
`)

dialer, err := finder.NewDialer(
  context.Background(),
  []string{"www.google.com"},
  configBytes
)
if err != nil {
    // Handle error.
}

// Use dialer to create connections.

यह एक बुनियादी उदाहरण है. इसे अपने इस्तेमाल के हिसाब से बदला जा सकता है.

फ़ॉलबैक की नई रणनीति जोड़ना

फ़ॉलबैक रणनीतियों का इस्तेमाल तब किया जाता है, जब बिना प्रॉक्सी वाली कोई भी रणनीति काम नहीं करती. ये आम तौर पर ऐसे प्रॉक्सी होते हैं जो ज़्यादा भरोसेमंद होते हैं.

फ़ॉलबैक की नई रणनीति जोड़ने के लिए:

  1. FallbackParser फ़ंक्शन बनाएं. यह फ़ंक्शन, YAMLNode लेता है और transport.StreamDialer और कॉन्फ़िगरेशन सिग्नेचर दिखाता है.
  2. mobileproxy.SmartDialerOptions.RegisterFallbackParser तरीके का इस्तेमाल करके, FallbackParser को रजिस्टर करें.

उदाहरण के लिए, यहां एक फ़ॉलबैक रजिस्टर करने का तरीका बताया गया है. इसे {error: "my error message"} के साथ कॉन्फ़िगर किया गया है. यह हमेशा डायल करने पर गड़बड़ी दिखाता है:

func RegisterErrorConfig(opt *mobileproxy.SmartDialerOptions, name string) {
    opt.RegisterFallbackParser(name, func(ctx context.Context, yamlNode smart.YAMLNode) (transport.StreamDialer, string, error) {
        switch typed := yamlNode.(type) {
        case string:
            dialer := transport.FuncStreamDialer(func(ctx context.Context, addr string) (transport.StreamConn, error) {
                return nil, errors.New(typed)
            })
            return dialer, typed, nil
        default:
            return nil, "", fmt.Errorf("invalid error dialer config")
        }
    })
}

func main() {
    // ...
  opts := mobileproxy.NewSmartDialerOptions(mobileproxy.NewListFromLines(*testDomainsFlag), *configFlag)
    opts.SetLogWriter(mobileproxy.NewStderrLogWriter())
    RegisterErrorConfig(opts, "error")
  //...
}