इस प्रश्न के अंत में नए विवरण जोड़े गए; यह संभव है कि मैं कारण पर शून्य कर रहा हूँ।
मेरे पास एक यूडीपी ओपनवीपीएन-आधारित वीपीएन tap
मोड में सेट है (मुझे इसकी आवश्यकता है tap
क्योंकि मुझे tun
इंटरनेट पर मुट्ठी भर ग्राहकों के साथ वीपीएन को मल्टीकास्ट पैकेट पारित करने की आवश्यकता है, जो नेटवर्क के साथ संभव नहीं लगता है )। मैं वीपीएन पर बार-बार टीसीपी कनेक्शन फ्रीज का अनुभव कर रहा हूं। यही है, मैं एक टीसीपी कनेक्शन स्थापित करूंगा (उदाहरण के लिए एक एसएसएच कनेक्शन, लेकिन अन्य प्रोटोकॉल में समान मुद्दे हैं), और सत्र के दौरान कुछ बिंदु पर, ऐसा लगता है कि ट्रैफ़िक उस टीसीपी सत्र पर प्रसारित नहीं होगा।
यह उन बिंदुओं से संबंधित प्रतीत होता है जिन पर बड़े डेटा ट्रांसफर होते हैं, जैसे कि मैं ls
SSH सत्र में एक कमांड निष्पादित करता हूं , या यदि मैं cat
एक लंबी लॉग फ़ाइल। कुछ Google खोजों ने सर्वर फॉल्ट पर इस तरह के कई उत्तरों को बदल दिया है , जो दर्शाता है कि संभावित अपराधी एक एमटीयू मुद्दा है: कि उच्च यातायात की अवधि के दौरान, वीपीएन पैकेट भेजने की कोशिश कर रहा है जो पाइप के बीच कहीं गिरा हुआ है। वीपीएन समापन बिंदु। उपरोक्त लिंक से पता चलता है कि समस्या को कम करने के लिए निम्न OpenVPN कॉन्फ़िगरेशन सेटिंग्स का उपयोग करना चाहिए:
fragment 1400
mssfix
यह वीपीएन पर उपयोग किए जाने वाले एमटीयू को 1400 बाइट्स तक सीमित करना चाहिए और इससे बड़े किसी भी पैकेट की पीढ़ी को रोकने के लिए टीसीपी अधिकतम सेगमेंट आकार को ठीक करना चाहिए। यह समस्या को थोड़ा कम करने के लिए लगता है, लेकिन मैं अभी भी अक्सर फ्रीज देखता हूं। मैंने fragment
निर्देश के तर्कों के रूप में कई आकारों की कोशिश की है : 1200, 1000, 576, सभी समान परिणाम के साथ। मैं दो छोरों के बीच किसी भी अजीब नेटवर्क टोपोलॉजी के बारे में नहीं सोच सकता है जो इस तरह की समस्या को ट्रिगर कर सकता है: वीपीएन सर्वर सीधे इंटरनेट से जुड़ी एक pfSense मशीन पर चल रहा है , और मेरा क्लाइंट सीधे किसी अन्य स्थान पर इंटरनेट से भी जुड़ा है।
पहेली का एक अन्य अजीब टुकड़ा: अगर मैं tracepath
उपयोगिता को चलाता हूं , तो वह समस्या का बैंड-सहायता करता है। एक नमूना रन जैसा दिखता है:
[~]$ tracepath -n 192.168.100.91
1: 192.168.100.90 0.039ms pmtu 1500
1: 192.168.100.91 40.823ms reached
1: 192.168.100.91 19.846ms reached
Resume: pmtu 1500 hops 1 back 64
उपरोक्त रन वीपीएन पर दो क्लाइंट के बीच है: मैंने ट्रेस 192.168.100.90
को गंतव्य के लिए शुरू किया 192.168.100.91
। fragment 1200; mssfix;
लिंक पर उपयोग किए गए MTU को सीमित करने के प्रयास में दोनों क्लाइंट को कॉन्फ़िगर किया गया था। उपरोक्त परिणामों से प्रतीत होता है कि tracepath
दोनों ग्राहकों के बीच 1500 बाइट्स के पथ MTU का पता लगाने में सक्षम था। मुझे लगता है कि OpenVPN कॉन्फ़िगरेशन में निर्दिष्ट विखंडन सेटिंग्स के कारण यह कुछ हद तक छोटा होगा। मैंने पाया कि परिणाम कुछ अजीब है।
हालांकि, अजनबी भी: यदि मेरे पास रुकी हुई अवस्था में टीसीपी कनेक्शन है (जैसे कि एक एसएसएच सत्र जिसमें निर्देशिका को बीच में ही रोक दिया जाता है), तो ऊपर दिखाए गए कमांड को निष्पादित करने tracepath
से कनेक्शन फिर से शुरू हो जाता है ! मैं ऐसा करने के लिए किसी भी उचित स्पष्टीकरण का पता नहीं लगा सकता हूं, लेकिन मुझे ऐसा लगता है कि यह समस्या के उन्मूलन के लिए एक समाधान की ओर इशारा कर सकता है।
किसी को भी अन्य चीजों के लिए कोई सिफारिश करने की कोशिश करता है?
संपादित करें: मैं वापस आया हूं और इस पर थोड़ा और गौर किया है, और केवल और अधिक जानकारी प्राप्त की है:
मैंने ओपनवीपीएन कनेक्शन को 1400 बाइट्स पर टुकड़े करने के लिए सेट किया है, जैसा कि ऊपर दिखाया गया है। फिर, मैंने पूरे इंटरनेट से वीपीएन से कनेक्ट किया और स्टाल होने के दौरान वीपीएन सर्वर पर भेजे गए यूडीपी पैकेटों को देखने के लिए विंडसर्क का इस्तेमाल किया। निर्दिष्ट 1400 बाइट की संख्या से अधिक कोई भी नहीं था, इसलिए विखंडन ठीक से काम कर रहा है।
यह सत्यापित करने के लिए कि 1400-बाइट MTU भी पर्याप्त होगा, मैंने निम्नलिखित (लिनक्स) कमांड का उपयोग करके वीपीएन सर्वर को पिंग किया:
ping <host> -s 1450 -M do
यह (मेरा मानना है) विखंडन अक्षमता के साथ 1450-बाइट पैकेट भेजता है (मैंने कम से कम यह सत्यापित किया कि अगर मैं इसे स्पष्ट रूप से बहुत बड़ी कीमत 1600 बाइट्स के लिए सेट करता हूं तो यह काम नहीं करता)। ये ठीक काम करने लगते हैं; मुझे बिना किसी समस्या के मेजबान से जवाब मिलता है।
तो, शायद यह एक MTU मुद्दा नहीं है। मैं बस उलझन में हूँ कि यह और क्या हो सकता है!
संपादन 2: खरगोश का छेद बस गहरा होता जा रहा है: मैंने अब समस्या को थोड़ा और अलग कर दिया है। ऐसा लगता है कि वीपीएन क्लाइंट का उपयोग करने वाले सटीक ओएस से संबंधित है। मैंने कम से कम तीन उबंटू मशीनों (13.04 के माध्यम से संस्करण 12.04) पर समस्या को सफलतापूर्वक दोहराया है। मैं मज़बूती से एक मिनट के भीतर एसएसएच कनेक्शन फ्रीज़ को डुप्लिकेट कर सकता हूं, बस cat
एक बड़ी लॉग फ़ाइल के द्वारा।
हालांकि , अगर मैं एक ग्राहक के रूप में एक CentOS 6 मशीन का उपयोग करके एक ही परीक्षण करता हूं, तो मुझे समस्या नहीं दिखती है! मैंने उबंटू मशीनों पर उपयोग किए जा रहे सटीक OpenVPN क्लाइंट संस्करण का उपयोग करके परीक्षण किया है। मैं cat
कनेक्शन फ्रीज देखे बिना घंटों तक फाइलें लॉग इन कर सकता हूं । यह अंतिम कारण के रूप में कुछ अंतर्दृष्टि प्रदान करने के लिए लगता है, लेकिन मुझे यकीन नहीं है कि अंतर्दृष्टि क्या है।
मैंने Wireshark का उपयोग करके वीपीएन पर ट्रैफ़िक की जांच की है। मैं एक टीसीपी विशेषज्ञ नहीं हूं, इसलिए मुझे यकीन नहीं है कि गोर विवरण का क्या होना है, लेकिन यह है कि कुछ बिंदु पर, इंटरनेट लिंक की सीमित बैंडविड्थ के कारण एक यूडीपी पैकेट गिरा दिया जाता है, जिससे टीसीपी के अंदर प्रवेश होता है वीपीएन सुरंग। CentOS क्लाइंट पर, ये रिट्रांसमिशन ठीक से होते हैं और चीजें खुशी से चलती हैं। उबंटू ग्राहकों के साथ कुछ बिंदु पर, हालांकि, दूरस्थ छोर एक ही टीसीपी सेगमेंट को बार-बार शुरू कर देता है (प्रत्येक रिट्रांसमिशन के बीच ट्रांसमिट की देरी बढ़ रही है)। क्लाइंट भेजता है जो प्रत्येक रिट्रांसमिशन के लिए एक वैध टीसीपी एसीके जैसा दिखता है, लेकिन दूरस्थ अंत अभी भी समय-समय पर उसी टीसीपी सेगमेंट को प्रसारित करना जारी रखता है। यह विज्ञापन इनफिनिटम और कनेक्शन स्टालों का विस्तार करता है। मेरा सवाल यहाँ होगा:
- क्या किसी के पास टीसीपी समस्या के मूल कारण का निवारण और / या निर्धारण करने के लिए कोई सिफारिश है? यह ऐसा है जैसे कि दूरस्थ छोर वीपीएन क्लाइंट द्वारा भेजे गए एसीके संदेशों को स्वीकार नहीं कर रहा है।
CentOS नोड और विभिन्न उबंटू रिलीज के बीच एक सामान्य अंतर यह है कि उबंटू में हाल ही में लिनक्स कर्नेल संस्करण है (उबंटू में 3.2.04 से 13.04 से 13.04 तक)। कुछ नए कर्नेल बग के लिए एक सूचक शायद? मैं मान रहा हूँ कि अगर ऐसा होता, तो मैं समस्या का सामना करने वाला अकेला नहीं होता; मुझे नहीं लगता कि यह एक विशेष रूप से विदेशी सेटअप की तरह लगता है।
tun
नेटवर्क पर मल्टिकास्ट पैकेट को राउटिंग करना मल्टीकास्ट राउटिंग डैमन्स (जैसे कि पिमड ) चलाने के माध्यम से संभव होना चाहिए और ओपनवीपीएन सर्वर का उपयोग--topology
"सबनेट" के लिए सेट किए गए विकल्पों का उपयोग करना है -