लिनक्स पर प्रति-पैकेट मल्टीपाथ रूटिंग कैसे प्राप्त करें?


9

3.6 कर्नेल से पहले लिनक्स कर्नेल IPv4 मल्टीपाथ रूटिंग करने के लिए रूट कैशिंग का उपयोग करता था, जिसका मतलब था कि दो अलग-अलग लाइनों / ISP के बीच रूटिंग काफी आसान थी। 3.6 से एल्गोरिथ्म प्रति पैकेट में बदल गया, जिसका अर्थ है कि दो लाइनों / ISP को प्राप्त करने के लिए कुछ रूट टेबल / नियम / iptables मार्कर ट्रिक्स आवश्यक थे।

हालाँकि, यदि आपके पास एक ही ISP के साथ दो पंक्तियाँ थीं, जो संतुलित / असफल फैशन में प्रति-पैकेट आधार पर दोनों पंक्तियों में एक एकल IP को रूट कर सकती हैं, तो 3.6 की वजह से आप आसानी से (IP स्तर पर) लाइन बॉन्डिंग प्राप्त कर सकते हैं। दोनों दिशाओं में प्रति-पैकेट रूटिंग।

4.4 से, कर्नेल फिर से स्रोत और गंतव्य पते पर हैश के आधार पर प्रवाह-आधारित लोड संतुलन में बदल गया

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

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

क्या प्रति-पैकेट एल्गोरिथ्म का उपयोग करने के लिए वर्तमान कर्नेल को कॉन्फ़िगर करने का एक तरीका है? या प्रति पैकेट मल्टीथ रूटिंग को प्राप्त करने के लिए कोई अन्य विधि? क्या मुझे एक पुराने कर्नेल (जो मैं अन्य विभिन्न कारणों से नहीं करना चाहता) को वापस करने की आवश्यकता होगी?

मेरा आईएसपी मल्टी-लिंक पीपीपी का समर्थन नहीं करता है।

यदि यह प्रासंगिक है, तो मैं वर्तमान में एक रास्पबेरी पाई 3 पर आर्क लिनक्स ARMv7 चला रहा हूं।


3
यह बहुत बुरा विचार है। L2 पर प्रति-पैकेट संतुलन (यानी MLPPP) में पैकेट को फिर से इकट्ठा करने के लिए पर्याप्त तर्क शामिल हैं। इस आईपी पत्तों पर चलने से आउट-ऑफ-द-ऑर्डर वितरण के लिए एक जबरदस्त अवसर (यदि निकट-निश्चित नहीं है) खुले। यह धीमी टीसीपी सत्रों के साथ बड़ी संख्या में समस्याओं का कारण बनने जा रहा है, पूरी तरह से टूटा हुआ यूडीपी, किसी भी प्रकार की वास्तविक समय स्ट्रीमिंग के साथ समस्याएं, आदि। दूसरा मुद्दा यह है कि भले ही आप अपने आईएसपी को पैकेट राउंड-रॉबिन भेज रहे हों। पूरी तरह से कोई सुझाव नहीं है कि वे इसी तरह आप की ओर संतुलन रखेंगे।
rnxrx

@rnxrx आपकी टिप्पणी के लिए धन्यवाद - अतिरिक्त विवरण प्रदान करने के लिए प्रश्न को संपादित किया है। मेरे सवाल से: "आईएसपी से डाउनस्ट्रीम ट्रैफिक को दो अलग-अलग लाइनों पर प्रति-पैकेट आधार पर रूट किया जाता है"। ISP एक नियंत्रण कक्ष प्रदान करता है - जब मैं एक आईपी को दोनों लाइनों पर रूट करने के लिए चुनता हूं तो वे इसे प्रति पैकेट के आधार पर पूरी तरह से संतुलित राउंड-रॉबिन का मार्ग बनाते हैं। अच्छी तरह से काम करता है, दोनों लाइनों की कुल गति का लगभग 90% एक साथ जोड़ा जाता है, और तत्काल विफलता प्रदान करता है। स्काइप वीडियो, वीओआइपी कॉल, यूट्यूब, बीबीसी स्ट्रीमिंग आदि सभी महान - इस तरह के एक महान बहाव का अनुभव मुझे ऊपर की कोशिश करना चाहता है
bao7uo

1
आह - यह मिल गया ... तो वर्तमान में आपके पास दो अनूठे आईपी (एक प्रति कनेक्शन) हैं या क्या वे दो समानांतर रास्तों के माध्यम से आपकी तरफ एक आईपी (या सबनेट) पर रूट कर रहे हैं? यदि आप किसी भी प्रकार का NAT चला रहे हैं तो जाहिर है कि यह इस संतुलन से पहले होता है। किसी भी तरह - क्या आपने support.aa.net.uk/… पर एक नज़र डाली है ? मूल रूप से जो आप वर्णन कर रहे हैं उसे पूरा करने के लिए यह iptables एक्सटेंशन का उपयोग कर रहा है और इस तरह से यह काफी आधुनिक कर्नेल संस्करणों के अनुरूप होना चाहिए।
rnxrx

धन्यवाद @rnxrx - हाँ मैं या तो विकल्प (दो अद्वितीय आईपी या समानांतर पथ के माध्यम से एक एकल आईपी) कर सकता हूं। मैंने एकल आईपी विकल्प को प्राथमिकता दी है क्योंकि यह अधिक समझ में आता है।
bao7uo

जवाबों:


3

ठीक है, इसलिए यह जांच करने के लिए अधिक समय होने के बाद मुझे लिनक्स टीएचक्यूएल (ट्रू लिंक इक्वालाइज़र) का उपयोग करने का एक तरीका मिला। यहाँ एक लिंक है जिसका मैंने शिथिल पालन किया है, लेकिन कुछ ट्विक्स के साथ।

http://lartc.org/howto/lartc.loadshare.html

यह है कि मैं इसे आर्क लिनक्स ARMv7 (रास्पबेरी पाई 3) पर काम कर रहा हूं

बूट पर:

उपयुक्त कर्नेल मॉड्यूल को लोड करने के लिए बूट पर निम्न कमांड चलाया जाना चाहिए।

modprobe sch_teql

निम्नलिखित कमांड भी बूट पर चलाने के लिए मान लें कि आप eth0 पर स्थानीय नेटवर्क से NAT करना चाहते हैं।

sysctl -w net.ipv4.ip_forward=1
iptables -A INPUT -i ppp+ -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -o teql+ -j MASQUERADE

FORWARD रिटर्न ट्रैफ़िक ppp + पर है, और POSTROUTING MASQUERADE टेकल + पर है क्योंकि आउटगोइंग ट्रैफ़िक teql पर निकलता है और वापसी ट्रैफ़िक ppp पर वापस आता है।

जब ppp लिंक आते हैं:

लोड-संतुलित होने के लिए लिंक मानते हुए ppp हैं, स्क्रिप्ट में एक /etc/ppp/ip-up.d/स्क्रिप्ट में चलाने के लिए निम्न कमांड ।

sysctl -w net.ipv4.conf.ppp1.rp_filter=2
sysctl -w net.ipv4.conf.ppp2.rp_filter=2
tc qdisc add dev ppp1 root teql0
tc qdisc add dev ppp2 root teql0
ip address add 1.1.1.1/32 dev teql0
# you can add additional public IP addresses teql0 if you need to
ip link set teql0 up
ip route replace default scope global dev teql0

1.1.1.1आपका ISP का सामना करने वाला सार्वजनिक IP पता कहां है अतिरिक्त सार्वजनिक IP को teql0 डिवाइस को सौंपा जा सकता है, लेकिन ppp डिवाइस को असाइन करने की आवश्यकता नहीं है। मेरे सेटअप में दो ppp लिंक समान IP (pppoe आदि द्वारा बातचीत) साझा करते हैं। Teql लिंक इसे मैन्युअल रूप से निर्दिष्ट किया गया है जैसा कि ऊपर दिखाया गया है। आईएसपी को आईपी के लिए ट्रैफ़िक को समान रूप से दोनों लिंक नीचे भेजने की आवश्यकता है।

ऊपर की पटरी ( rp_filter) 2दोनों स्क्रिप्ट में ऊपर (ढीली) पर सेट की गई है ताकि वापसी पैकेट टक्कल0 के बजाय पीपीपी इंटरफेस पर वापस आने के कारण गिरा न जाए।

मैंने इसे इस तरह स्थापित किया है, और यह पूरी तरह से काम करता है। बहुत आसान! जब लिंक विफल होते हैं, तो निर्बाध विफलता होती है। जब वे आते हैं, तो वे फिर से काम करना शुरू कर देते हैं। ऐसा लगता है जैसे कोई पैकेट नुकसान या देरी नहीं है जब यह विफल हो जाता है, और कोई नहीं जब यह वापस आता है।

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

http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing


मैंने कभी भी नीति मार्ग की कोशिश नहीं की क्योंकि TEQL ने इतनी अच्छी तरह से काम किया। अगर यह नहीं टूटा है ....
bao7uo

मैं काम करने के लिए इसे पाने की कोशिश कर रहा हूं। मेरे पास बॉन्डिंग काम है, मैं राउटर से बंधे हुए इंटरफ़ेस का उपयोग कर सकता हूं। मैं NAT काम नहीं कर सकता, हालांकि, मेरे LAN से ट्रैफ़िक बंधी हुई लिंक से नीचे नहीं जा रहा है :(
andynormancx

यदि आप सर्वर की गलती पर एक नया प्रश्न पोस्ट करते हैं, और एक टिप्पणी से इसे लिंक करते हैं, तो मैं इसे आपके लिए जानने की कोशिश करूंगा। जब तक आप सभी जानकारी को यहाँ टिप्पणी में फिट नहीं कर सकते, तब तक इंटरफ़ेस / आईपी कॉन्फ़िगरेशन, राउटिंग टेबल, आईपीटेबल्स नियम आदि जैसी अधिक जानकारी शामिल करें।
197 में बाओ

1
पुनश्च। बस मेरे विन्यास में एक गलती पर ध्यान दिया। इसने कहा sysctl -w net.ipv4.ip_forwardलेकिन sysctl -w net.ipv4.ip_forward=1मुझे कहना चाहिए कि मैंने ऊपर सही किया है। यह निश्चित रूप से लैन से बंधुआ लिंक के नीचे जाने से यातायात को रोक देगा।
197

मुझे नहीं लगता कि मेरे लिए यह काम करना बंद कर दिया गया था, मैं आगे Sysctl में सक्षम था। मैं अब यह जानने की कोशिश कर रहा हूं कि क्या बड़े पैमाने पर आउट ऑफ ऑर्डर पैकेट जो मैं देख रहा हूं, वह अपेक्षित है।
andynormancx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.