मैं OpenVPN नेटवर्क पर TCP कनेक्शन फ्रीज़ को कैसे रोकूँ?


19

इस प्रश्न के अंत में नए विवरण जोड़े गए; यह संभव है कि मैं कारण पर शून्य कर रहा हूँ।

मेरे पास एक यूडीपी ओपनवीपीएन-आधारित वीपीएन tapमोड में सेट है (मुझे इसकी आवश्यकता है tapक्योंकि मुझे tunइंटरनेट पर मुट्ठी भर ग्राहकों के साथ वीपीएन को मल्टीकास्ट पैकेट पारित करने की आवश्यकता है, जो नेटवर्क के साथ संभव नहीं लगता है )। मैं वीपीएन पर बार-बार टीसीपी कनेक्शन फ्रीज का अनुभव कर रहा हूं। यही है, मैं एक टीसीपी कनेक्शन स्थापित करूंगा (उदाहरण के लिए एक एसएसएच कनेक्शन, लेकिन अन्य प्रोटोकॉल में समान मुद्दे हैं), और सत्र के दौरान कुछ बिंदु पर, ऐसा लगता है कि ट्रैफ़िक उस टीसीपी सत्र पर प्रसारित नहीं होगा।

यह उन बिंदुओं से संबंधित प्रतीत होता है जिन पर बड़े डेटा ट्रांसफर होते हैं, जैसे कि मैं lsSSH सत्र में एक कमांड निष्पादित करता हूं , या यदि मैं 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.91fragment 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"सबनेट" के लिए सेट किए गए विकल्पों का उपयोग करना है -
कोस्टल

क्या वीपीएन क्लाइंट या सर्वर इन मुद्दों के समय लॉग में कुछ भी इंगित करता है?
मॉर्गन

@ ग्राहक: निश्चित रूप से ग्राहक पर नहीं। मुझे सर्वर लॉग में आने के लिए कुछ काम करना होगा।
जेसन आर

@ मॉर्गन: मुझे आखिरकार इस पर वापस आने का मौका मिला है। ऐसा होने पर क्लाइंट या सर्वर में कुछ भी नहीं होता है। यह वास्तव में चौंकाने वाला है।
जेसन आर

1
क्या कोई संभावना है कि ग्राहकों को फ्रीज करने वाले स्थानीय फायरवॉल हैं जो आईसीएमपी-विखंडन-आवश्यक पैकेट गिरा रहे हैं, जहां वे नहीं हैं, इसलिए नहीं, और इसलिए सही ढंग से टुकड़े कर रहे हैं?
MadHatter

जवाबों:


10

यह आदेश मेरे लिए इसे हल करता है:

$ sudo ip link set dev tun0 mtu 1350 && echo ":)"

आप के साथ tun0 सेटिंग्स सत्यापित कर सकते हैं

$ ip a s

चीयर्स!


क्लाइंट या सर्वर-साइड पर ??
मैट

आपका बहुत बहुत धन्यवाद! @ मैट, यह निर्भर करता है कि समस्या कहाँ स्थित है। हमारे लिए यह सर्वर पर था, लेकिन यह क्लाइंट की तरफ हो सकता है। इसके अलावा मूल्य अलग-अलग हो सकते हैं, आप ping <host> -s 1350 -M doसही मान
ज्ञात

2

टीसीपी में विंडो स्केलिंग को अक्षम करें:

sysctl -w net.ipv4.tcp_window_scaling=0

ऐसा करने के बाद, वीपीएन पर डेबियन / उबंटू सिस्टम के एसएसएच मेरे लिए ठीक काम कर रहे हैं।


0

पोटीन का उपयोग करते हुए विंडोज पर, आपको वीपीएन कनेक्शन के लिए स्थानीय कनेक्शन पर जाकर एमटीयू को बदलना होगा -> नेटवर्क इंटरफेस पर विवरण (टीएपी विंडोज़ एडॉप्टर या ऐसा कुछ) -> उन्नत -> गुण -> एमटीयू (इसे किसी चीज़ में बदलें) 1500 से कम)। आपको फिर से कनेक्ट करना पड़ सकता है। इसने मेरे लिए विंडोज और पुट्टी पर काम किया


-1

ऐसा लग रहा है कि यह एक बफरिंग मुद्दा है। मेरे पास एक ही समस्या है, और मैं हस्तांतरण की गति को कम करके इसे टाल सकता हूं। सबसे अच्छा तरीका नहीं है, लेकिन यह किसी को इसके लिए एक बेहतर समाधान खोजने में मदद कर सकता है।

अद्यतन 1 यहां देखें: ग्राहक कनेक्शन के लिए एक ओपनवीएन क्लाइंट पर एसएसएच फ्रीज को कैसे रोका जाए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.