WSL2 में Git VPN पर रुक जाता है: इंटरफ़ेस MTU या रास्ता?
Git प्रमाणीकरण करता है और फिर WSL2 के अंदर लटक जाता है? Linux इंटरफ़ेस की Windows VPN अडैप्टर से तुलना करें, एक छोटा मान जाँचें और उसका जीवनकाल नियोजित करें।
क्लोन प्रमाणीकरण करता है, ऑब्जेक्ट की संख्या दिखाई देती है, और फिर मिनटों तक कुछ नहीं हिलता। Windows बताता है कि VPN जुड़ा है, होस्टनाम हल होता है, और उसी मशीन पर का ब्राउज़र वही रिपॉज़िटरी पृष्ठ बिना कठिनाई ले आता है। यह संयोजन क्रेडेंशियल की नहीं, पैकेट के आकार की ओर संकेत करता है, और आकार का प्रश्न दो जगह पूछना होगा क्योंकि WSL2 का अपना MTU वाला अपना Linux इंटरफ़ेस है। एक संख्या रास्ते के Windows पक्ष की है, दूसरी डिस्ट्रिब्यूशन की, और केवल VPN अडैप्टर पढ़ने से आधा रास्ता अपरीक्षित रह जाता है।
तीन संकेत आकार की समस्या को दूसरी चीज़ों से अलग करते हैं
पहला संकेत आकार-आकृति है: कनेक्शन स्थापित होता है और छोटा आदान-प्रदान सफल होता है, फिर बड़ा स्थानांतरण प्रगति करना बंद कर देता है। दूसरा सममिति है: वही रिपॉज़िटरी और वही परिवहन विफल होते हैं जबकि उसी रास्ते पर दूसरा होस्ट काम करता है, या विफलता दिन के समय के बजाय पेलोड के आकार के साथ बदलती है। तीसरा मौन है: कोई प्रमाणीकरण त्रुटि नहीं, कोई प्रॉक्सी अस्वीकृति नहीं, कोई नाम-हल विफलता नहीं, बस एक स्थानांतरण जो कभी पूरा नहीं होता।
ये तीन मिलकर पैकेट-आकार की परिकल्पना को उचित ठहराते हैं। DNS विफलता, समाप्त टोकन, अस्वीकृत SSH कुंजी और CONNECT से इनकार करने वाला प्रॉक्सी—हर एक अपनी त्रुटि पैदा करता है, और उनमें से कोई सफलता के बाद रुकने जैसा नहीं दिखता। परीक्षण के दौरान वही रिपॉज़िटरी, परिवहन और समय-खिड़की बनाए रखना ही तुलना को ईमानदार बनाता है।
निर्णय से पहले दोनों इंटरफ़ेस की तुलना करें
एक ही सत्र में Windows दृश्य और Linux दृश्य इकट्ठा करें, और यह अनुमान लगाने के बजाय कि कौन-सा इंटरफ़ेस इसे ले जाता है, रिपॉज़िटरी का पता रखें। नीचे दिया गया आदेश पहले गंतव्य हल करता है ताकि रूट खोज उस वास्तविक सर्वर का वर्णन करे जिससे क्लोन संपर्क करता है, जो ब्राउज़र द्वारा दिखाए गए नाम से भिन्न हो सकता है। दोनों आधे निकट-निकट चलाएँ, क्योंकि VPN प्रयासों के बीच इंटरफ़ेस मीट्रिक बदल सकता है।
netsh interface ipv4 show subinterfaces
wsl -d Ubuntu -- bash -lc 'dest=$(getent ahostsv4 github.com | awk \'NR==1{print $1}\'); ip -br link show; ip route get "$dest"'
Linux वाला आधा डिस्ट्रिब्यूशन के अंदर चलाएँ, आउटपुट को Windows शेल में चिपकाने के बजाय, क्योंकि इंटरफ़ेस नाम और रूट चयन केवल वहीं अर्थपूर्ण हैं। Windows शेल से चिपकाया गया परिणाम बड़े आत्मविश्वास के साथ गलत संख्याएँ बताता है। कुछ भी बदलने से पहले हर पक्ष से डिवाइस, चुना गया रूट और MTU दर्ज करें।
तय करें कि संख्या छोटी होनी चाहिए या नहीं
रास्ता जितना ले जा सकता है उससे बड़ा इंटरफ़ेस MTU स्वतः दोष नहीं है, क्योंकि रास्ता-MTU खोज ठीक इसी के लिए है। विफलता का प्रकार तब प्रकट होता है जब खोज दबा दी जाती है: ICMP संदेश रास्ते में कहीं फ़िल्टर होते हैं, प्रेषक को सीमा कभी पता नहीं चलती, और बड़े पैकेट गायब हो जाते हैं जबकि छोटे पार हो जाते हैं। यह रास्ते का गुण है, Git का नहीं। यही कारण है कि एक छोटी फ़ाइल ऐसे कनेक्शन पर सफल हो सकती है जहाँ बड़ी कभी पूरी नहीं होती।
यदि साक्ष्य इसका समर्थन करते हैं, तो Linux इंटरफ़ेस पर अस्थायी परिवर्तन सबसे सस्ता परीक्षण है। उपयोगी रास्ता-आकार से नीचे कोई मान चुनें, पिछला दर्ज करें, और बाकी सब स्थिर रखें ताकि तुलना का अर्थ रहे। यदि छोटे मान पर स्थानांतरण पूरा होता है, तो आपके पास निदान है, संयोग नहीं।
ip -br link show dev eth0
sudo ip link set dev eth0 mtu 1380
ip -br link show dev eth0
तय करें कि सेटिंग कहाँ रहनी चाहिए
परीक्षण से तीन विकल्प निकलते हैं, और सामान्यतः उनमें से केवल एक ही उपयुक्त होता है। यदि छोटा मान स्थानांतरण ठीक करता है और मान इस नेटवर्क के लिए वास्तव में आवश्यक है, तो सेटिंग को जीवनचक्र का स्वामी चाहिए: डिस्ट्रिब्यूशन में स्टार्ट हुक, प्लेटफ़ॉर्म द्वारा प्रबंधित नेटवर्क कॉन्फ़िगरेशन, या प्रलेखित प्रक्रिया। यदि मान कुछ भी ठीक नहीं करता, तो उसे वापस लौटाएँ और परिवहन, प्रॉक्सी व प्रमाणीकरण के प्रश्नों पर लौटें।
स्टार्ट हुक है या नहीं, यह प्रयुक्त Windows और WSL संस्करणों तथा कॉन्फ़िगर किए गए नेटवर्किंग मोड पर निर्भर करता है। Windows नेटवर्क का प्रतिबिंबन VPN के डिस्ट्रिब्यूशन के साथ व्यवहार को ऐसे बदल सकता है जो MTU समायोजन से अधिक महत्वपूर्ण हैं, इसलिए इसके लिए उपाय तैयार करने से पहले मोड पहचानें। एक ऑपरेटर या एक VPN प्रोफ़ाइल के लिए उपयुक्त मान अगले के लिए डिफ़ॉल्ट नहीं है।
जिससे बचना चाहिए वह लुभावना स्थान है: हर इंटरैक्टिव शेल की स्टार्टअप फ़ाइल में विशेषाधिकार प्राप्त नेटवर्क आदेश, या पूरी ip बाइनरी के लिए बिना पासवर्ड का sudo ताकि कोई स्क्रिप्ट एक पंक्ति चला सके। दोनों निदान को स्थायी एक्सपोज़र में बदल देते हैं और मूल समस्या को बाद में देखना कठिन बनाते हैं।
ताज़ा शुरुआत के बाद सत्यापित करें, फिर पलटें
ऐसा परिवर्तन जो केवल डिस्ट्रिब्यूशन के पुनः आरंभ तक टिके, समाधान नहीं है। डिस्ट्रिब्यूशन पुनः आरंभ करें, VPN फिर से जोड़ें, और ping या छोटे HTTP अनुरोध जैसे विकल्प के बजाय मूल Git क्रिया दोहराएँ। फिर पुष्टि करें कि नए सत्र में इंटरफ़ेस इच्छित मान ले जाता है।
ip -br link show dev eth0
ip route get "$(getent ahostsv4 github.com | awk 'NR==1{print $1}')"
दर्ज किया गया मूल मान परिवर्तन के पास रखें ताकि प्रयोग साफ़-सुथरे ढंग से वापस लिया जा सके, और नोट करें कि कौन-सा पता परिवार जाँचा गया, क्योंकि IPv4 परिणाम उसी होस्ट पर IPv6 कनेक्शन के बारे में कुछ नहीं कहता। WSL नेटवर्किंग दस्तावेज़ उन मोड का वर्णन करते हैं जो तय करते हैं कि समाधान कैसा होना चाहिए; MTU संख्या स्वयं स्थानीय माप है, सिफ़ारिश नहीं।