उल्टी टेथरिंग फ़ोन का ट्रैफ़िक कंप्यूटर पर ले जाती है और उसे उसी कंप्यूटर के कनेक्शन से बाहर भेजती है। सिर्फ़ USB केबल यह नहीं करता: फ़ोन को ऐसी कैप्चर सेवा चाहिए जो उसकी राउटिंग अपने हाथ में ले, और कंप्यूटर को ऐसा रिले चाहिए जो वे पैकेट आगे ले जाए। रास्ते में चार छलाँगें हैं: ऐप्लिकेशन, फ़ोन पर कैप्चर, USB रिले और होस्ट का निकास, और हर एक का मालिक अलग है। यह रनबुक वह रास्ता बनाता है, होस्ट VPN को उसकी सही जगह रखता है और नतीजे पर भरोसा करने से पहले हर छलांग जाँचता है।

कुछ भी चलाने से पहले छलाँगों का नक्शा बनाएँ

हर छलांग अपनी नीति लागू करती है, इसलिए एक सिरे पर काम करने वाला नतीजा दूसरे सिरे के बारे में कुछ नहीं कहता। ऐप्लिकेशन गंतव्य और रिज़ॉल्वर चुनता है, कैप्चर सेवा तय करती है कि कौन-सा ट्रैफ़िक रिले में प्रवेश करेगा, रिले उसे होस्ट सॉकेट में भेजता है, और होस्ट की राउटिंग तथा VPN वह पता तय करते हैं जो गंतव्य अंत में देखता है।

HopOwnerWhat it decides
Application requestThe appDestination, resolver, address family
Capture servicePhone VpnService appWhich traffic enters the relay at all
ADB relayHost processForwarding phone flows to host sockets
Host egressHost routing and VPNExit address and host policy

एक समय पर सिर्फ़ एक ही VPN सेवा क्लाइंट फ़ोन की कैप्चर भूमिका रख सकता है, इसलिए दूसरा सामान्य VPN ऐप रिले के ऊपर नहीं चढ़ता। अगर VPN कंप्यूटर पर है, तो कैप्चर सेवा उस कंप्यूटर की ओर पहुँच की कड़ी है, यह सबूत नहीं कि कोई दूरस्थ टनल पहले से नतीजे की रक्षा कर रही है।

फ़ोन को छूने से पहले रिले तैयार करें

Gnirehtet इस वास्तुकला का प्रलेखित उदाहरण है: फ़ोन पर बिना root के VPN सेवा क्लाइंट और होस्ट पर ADB से ढोया गया रिले, जो IPv4 पर TCP और UDP का समर्थन करता है। इसका रिपॉज़िटरी यह भी कहता है कि परियोजना अब सक्रिय रूप से बनाए नहीं रखी जाती, इसलिए इसे संदर्भ डिज़ाइन और प्रयोगशाला के लिए काम करने वाला औज़ार मानें, प्रबंधित फ़्लीट पर मानक बनाने लायक समर्थित उत्पाद नहीं।

adb devices
adb shell getprop ro.build.version.release
gnirehtet run

पहले adb devices चलाएँ। जिस फ़ोन ने होस्ट की डीबगिंग कुंजी स्वीकार नहीं की, वह अनधिकृत बताया जाता है, और डिवाइस पर संकेत स्वीकार होने तक रिले जुड़ेगा नहीं। gnirehtet run क्लाइंट इंस्टॉल करता है, रिले शुरू करता है और कैप्चर सक्रिय करता है; जिस संस्करण में चरण अलग हैं, वहाँ इसके बजाय प्रलेखित install, relay और start उपकमांड इस्तेमाल करें।

ADB पहुँच डिवाइस नियंत्रण का संबंध है, नेटवर्क सेटिंग नहीं। सिर्फ़ उसी कंप्यूटर को अधिकृत करें जिसे आप नियंत्रित करते हैं, और काम खत्म होने पर वह अधिकृति वापस लेने की योजना बनाएँ।

होस्ट VPN को फिर से रास्ते में लाएँ

रिले होस्ट पर एक सामान्य प्रक्रिया है, इसलिए उसके आगे के कनेक्शन होस्ट की राउटिंग तालिका का पालन करते हैं। पूर्ण-टनल प्रोफ़ाइल उन्हें ढोती है; विभाजित टनल शायद नहीं। अगर होस्ट VPN प्रति-ऐप नियंत्रण इस्तेमाल करता है, तो रिले बाइनरी को अनुमत समूह में जोड़ें, वरना ब्राउज़र सुरक्षित दिखते हुए भी रिले भौतिक इंटरफ़ेस ही इस्तेमाल करता रहेगा।

ip route get 1.1.1.1
curl -4 https://ifconfig.me
sudo ss -tnp | grep -i relay

होस्ट VPN जोड़ने से पहले और बाद में पहले दो कमांड चलाएँ। अगर पता नहीं बदलता, तो रिले टनल पर नहीं है, क्लाइंट विंडो कुछ भी कहे। सिर्फ़-निजी टनल सार्वजनिक गंतव्यों को होस्ट के सामान्य निकास पर भी छोड़ देती है, जो लीक जैसा दिखता है पर वही नीति है जो आपने तय की।

रिले से जाने वाले ट्रैफ़िक के लिए DNS होस्ट पर हल होता है, इसलिए होस्ट का रिज़ॉल्वर तय करता है कि कौन-सा सर्वर नाम देखेगा। फ़ोन पर निजी DNS सेटिंग रिले के पार नहीं जाती, और फ़ोन की ओर की रिज़ॉल्वर जाँच होस्ट की क्वेरी का वर्णन नहीं करेगी।

हर छलांग अलग से जाँचें

इस क्रम में तीन जाँचें: फ़ोन रिले तक पहुँचता है, रिले होस्ट की नीति के तहत गंतव्य तक पहुँचता है, और ऐप गंतव्य को ठीक से हल करके इस्तेमाल करता है। पेज दोबारा लोड करके अनुमान लगाने के बजाय पहली विफलता पर रुकें।

adb shell dumpsys connectivity | grep -i -A3 vpn
adb logcat -s GnirehtetRelay:V Gnirehtet:V

कनेक्टिविटी डंप में VPN नेटवर्क प्रविष्टि दिखाती है कि कैप्चर सेवा सक्रिय है; रिले का अपना लॉग दिखाता है कि प्रवाह आ रहे हैं या नहीं। इनमें से एक में अनुपस्थिति समस्या को साफ़ बाँटती है: कैप्चर नहीं तो फ़ोन की ओर, प्रवाह नहीं तो होस्ट की ओर।

होस्ट पर चलने वाला ब्राउज़र होस्ट ब्राउज़र का रास्ता साबित करता है, रिले प्रक्रिया का नहीं। दोनों जो पते बताते हैं उनकी तुलना करें, और निजी संसाधन के साथ-साथ सार्वजनिक पेज भी जाँचें, क्योंकि सिर्फ़-निजी टनल एक को रूट कर सकती है और दूसरे को नहीं।

जोड़ तोड़ें और विफलता का व्यवहार चुनें

वापसी रनबुक का हिस्सा है। रिले रोककर हटाएँ, कैप्चर क्लाइंट अनइंस्टॉल करें, और काम पूरा होने पर फ़ोन के डेवलपर विकल्पों से होस्ट की डीबगिंग अधिकृति वापस लें।

gnirehtet stop
gnirehtet uninstall
adb kill-server

तय करें कि रिले के गायब होने पर फ़ोन को क्या करना चाहिए। स्पष्ट चुनाव के बिना वह मोबाइल डेटा पर लौट सकता है और वह ट्रैफ़िक लीक कर सकता है जिसे आप रूट करना चाहते थे, इसलिए कनेक्शन ब्लॉक करने का व्यवहार या VPN नीति जानबूझकर सेट करें और उस पर भरोसा करने से पहले जोड़ तोड़कर जाँचें।

जिस होस्ट को अधिकृत किया गया, रिले संस्करण, होस्ट टनल नीति और जोड़ तोड़ने के चरण लिख लें। वही रिकॉर्ड अगली उल्टी-टेथरिंग सेटिंग को फिर से खोजने वाली दोपहर के बजाय दोहराने योग्य बनाता है।

संबंधित लेख