OpenVPN: प्रति ग्राहक आधार पर MTU के मुद्दों को कम करने के लिए कैसे?


16

हमारे पास दर्जनों एम्बेडेड डिवाइसेज़ हैं जो ग्राहकों के लिए हैं, जो हमारी ओपनवीपीएन सेवा को घर बुलाते हैं। यह सामान्य रूप से ठीक काम करता है, लेकिन हमारे कुछ ग्राहकों के पास गंभीर पथ MTU मुद्दे हैं। अपने नेटवर्क को ठीक करने के लिए ग्राहकों पर हमारा प्रभाव सीमित है, इसलिए हमें इससे निपटने के लिए OpenVPN की आवश्यकता है। संक्षेप में, मेरा सवाल यह है:

मैं प्रति ग्राहक आधार पर कुछ ग्राहकों के निम्न पथ MTUs को कम कैसे कर सकता हूं, जो सभी ग्राहकों के लिए सबसे खराब स्थिति को समायोजित करने वाली वैश्विक सेटिंग्स का उपयोग किए बिना है।

ध्यान दें कि हमारा सबसे खराब मामला यह बहुत बुरा है: पथ एमटीयू 576, सभी टुकड़ों को गिरा देता है, खुद को खंडित नहीं करता है, डीएफ-बिट का सम्मान नहीं करता है। आप देखते हैं कि मैं वैश्विक स्तर पर इस मुद्दे को क्यों नहीं सुलझाना चाहता।

OpenVPN मैनपेज प्रस्तावों MTU के एक नंबर से संबंधित विकल्प, सबसे विशेष रूप से --link-mtu, --tun-mtu, --fragment and --mssfix। लेकिन यह भी कहता है

--link-mtu [...] इस पैरामीटर को सेट करना सबसे अच्छा है जब तक कि आपको पता न हो कि आप क्या कर रहे हैं।

--tun-mtu [...] MTU नौकरशाही के मुद्दों से निपटने के लिए thefragment और / या --mssfix विकल्पों का उपयोग करना सबसे अच्छा है।

तो मैं के साथ प्रयोग शुरू कर दिया --fragmentऔर --mssfixलेकिन जल्द ही एहसास है कि कम से कम पूर्व न केवल क्लाइंट-साइड, लेकिन सेट किया जाना चाहिए था भी सर्वर साइड । मैंने तब सर्वर-साइड प्रति-क्लाइंट कॉन्फिगरेशन के माध्यम से देखा, --client-config-dirलेकिन यह कहता है

क्लाइंट-विशिष्ट संदर्भ में निम्नलिखित विकल्प कानूनी हैं: --push, --push-reset, --iroute, --ifconfig-push, और --config।

MTU विकल्पों का कोई उल्लेख नहीं!

तो यहाँ मेरे अधिक विशिष्ट प्रश्न हैं:

  • क्यों वास्तव में हैं link-mtuऔर tun-mtuहतोत्साहित? इन विकल्पों के साथ संभावित समस्याएं क्या हैं? ध्यान दें कि मैं निम्न-स्तरीय IP हेडर मुंगिंग के साथ काफी सहज हूं।
  • link-mtu tun-mtu fragment mssfixकाम करने के लिए सर्वर-साइड पर कौन सा विकल्प मिरर करना है?
  • विकल्पों में से किसका link-mtu tun-mtu fragment mssfixउपयोग किया जा सकता है client-config-dir?
  • यदि सभी चार विकल्पों को सर्वर-साइड मिरर किया जाना है, और इसका उपयोग अंदर नहीं किया जा सकता है client-config-dir: क्या आपके ग्राहक के लिए कम पथ MTU का मुकाबला करने के लिए कोई विकल्प हैं?

टिप्पणियाँ:

  • मेरे सवालों के कुछ हिस्सों को यहां 5 साल पहले ही पूछा जा चुका है , लेकिन उन्हें वास्तव में तब वापस जवाब नहीं दिया गया है, इसलिए मैं उनकी नकल करने की हिम्मत करता हूं।
  • OpenVPN सर्वर वर्तमान में Ubuntu 12.04 पर 2.2.1 है। हम Ubuntu 14.04 पर 2.3.2 में अपग्रेड तैयार कर रहे हैं
  • OpenVPN के क्लाइंट डेबियन 7.6 पर 2.2.1 हैं
  • मुझे स्वयं ग्राहक का पथ-MTU निर्धारित करने में खुशी हो रही है
  • वर्तमान में हम बहुत सर्वर-साइड का परीक्षण नहीं कर सकते हैं। लेकिन हम एक पूर्ण अलग परीक्षण बिस्तर का निर्माण कर रहे हैं, जल्द ही तैयार होना चाहिए।

मैं किसी भी उपयोगी सलाह के लिए आभारी हूं।


1
576? प्रिय गौड। मैंने किसी MTU को डायलअप के दिनों से कम नहीं देखा है। क्या यह एक प्राचीन धारावाहिक की कड़ी है?
माइकल हैम्पटन

क्या आप दो OpenVPN सर्वर चला सकते हैं? हो सकता है कि आप एक ही सार्वजनिक आईपी पते पर दोनों सर्वर चला सकते हैं और पोर्ट फ़ॉरवर्डिंग (या एक रूटिंग नीति) का उपयोग करके ग्राहकों को एक अलग ओपनवीपीएन सर्वर पर निर्देशित कर सकते हैं, जो इस बात पर निर्भर करता है कि वे एक ज्ञात समस्याग्रस्त नेटवर्क पर हैं या नहीं (ग्राहक की सूची के अनुसार निर्धारित किया गया है) आईपी ​​पते)।
कास्परड सेप

1
@ मिचेल हैम्पटन मैं भी हैरान था। यह> 600kbit / s और RTT ~ 30ms, मेरे लिए प्राचीन धारावाहिक की तरह नहीं दिखता है। यह देखते हुए कि उनके पास अन्य बेवकूफ सेटिंग्स हैं (उदाहरण के लिए 'विखंडन की आवश्यकता के साथ DF का जवाब नहीं)', मुझे लगता है कि यह सिर्फ एक और है। हमने उन्हें बताया, लेकिन अभी तक वापस नहीं सुना है।
नेल्स टोड्टमैन

@kasperd दिलचस्प विचार। मैं कई OpenVPN सर्वर इंस्टेंस चला सकता है। अलग-अलग MTU रेंज के लिए शायद 3 या 4 होना चाहिए। सर्वर-साइड प्रति-क्लाइंट NAT काम नहीं करेगा (मैं डायनेमिक पब्लिक क्लाइंट IP पतों की भविष्यवाणी नहीं कर सकता), लेकिन मुझे MTU सेटिंग्स (सही?) के लिए वैसे भी क्लाइंट कॉन्फिगर को बदलना होगा, इसलिए मैं सीधे अलग पोर्ट को कॉन्फ़िगर करूंगा? ग्राहक में। - लेकिन यह एक बुरा सपना होगा कि मैं बचना पसंद करूँगा!
नेल्स टॉड्टमैन

@NilsToedtmann आप कौन से मानदंड का उपयोग करेंगे कि कौन से ग्राहक प्रभावित हैं? क्लाइंट के कनेक्ट होने के बाद सर्वर पर स्क्रिप्ट चलाने के लिए एक अन्य तरीका हो सकता है। स्क्रिप्ट क्लाइंट आईपी पते को अलग-अलग पैकेट आकारों के साथ पिंग करने की कोशिश कर सकती है ताकि पता लगाया जा सके कि कौन सा काम है और कौन सा नहीं। फिर यह iptablesसभी SYN पैकेट पर या उस क्लाइंट IP पते से MSS को कम करने के लिए नियम सम्मिलित कर सकता है ।
कास्परड सेप

जवाबों:


4

मैंने क्लाइंट mssfix 1300फ़ाइल पर कॉन्फ़िगरेशन फ़ाइल के विकल्प को जोड़कर समस्या का हल किया ।

Openvpn मैन पेज से:

--mssfix max
    Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed max bytes. 

मेरे समाधान के लिए मूल विचार personalvpn.org से आया है


1
तो mssfixकेवल क्लाइंट-साइड सेट किया जा सकता है? खैर, यह कम से कम कुछ है। हालांकि यह यूडीपी पैकेटों के साथ मदद नहीं करता है (इसलिए मैं अन्य विकल्पों में दिलचस्पी रखता था, लेकिन कम से कम अनुशंसित fragmentआवश्यकताओं को सर्वर-साइड भी सेट करना पड़ता है)
निल्स टूडमैन

3
mssfix को सर्वर के साथ-साथ क्लाइंट पर भी जोड़ा जा सकता है। हालाँकि छोटे मूल्य का उपयोग बातचीत में किया जाएगा
अहमद

2

उत्तरों की कमी को देखते हुए, मैं अब एक समाधान पोस्ट कर रहा हूं जो बहुत ही सुरुचिपूर्ण नहीं है, लेकिन सरल है: "बुरे ग्राहकों" के लिए टीसीपी पर एक और ओपनवीपीएन उदाहरण चलाएं

proto tcp

और क्लाइंट पर टीसीपी एमएसएस कम करें, जैसे

iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ${OUT_DEV} -j TCPMSS --set-mss ${PATH-MTU-MINUS-40}

इस समाधान का एक फायदा यह है कि प्रत्येक ग्राहक अपना अलग-अलग एमएसएस निर्धारित कर सकता है।

यह बेशक टीसीपी-ओवर-टीसीपी है, लेकिन यह कई परिदृश्यों में पर्याप्त प्रदर्शन करना चाहिए

ध्यान दें कि मुझे अभी भी बहुत दिलचस्पी वाले समाधान हैं जिनकी आवश्यकता नहीं है proto tcp, और यदि वे अधिक या कम मेरी उल्लिखित आवश्यकताओं को पूरा करते हैं, तो मैं उन्हें मान्य उत्तर के रूप में चिह्नित करूंगा।

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