क्या आउटबाउंड कनेक्शन के लिए कई डिफ़ॉल्ट गेटवे रखना संभव है?


16

मैं एक ही सबनेट में कई एनआईसी (eth0 और wlan0) रखना चाहता हूं और अगर एनआईसी में से एक में विफल रहता है तो मेजबान के लिए बैकअप के रूप में सेवा करना चाहता हूं। इस कारण से मैंने एक अतिरिक्त रूटिंग टेबल बनाया है। इस प्रकार /etc/network/interfacesदिखता है:

iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
    post-up ip route add default via 192.168.178.1 dev eth0
    post-up ip rule add from 192.168.178.2/32
    post-up ip rule add to 192.168.178.2/32

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
    post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
    post-up ip rule add from 192.168.178.3/32 table rt2
    post-up ip rule add to 192.168.178.3/32 table rt2

होस्ट से कनेक्ट करने के लिए यह काम करता है: मैं अभी भी इसमें एसएसएच कर सकता हूं अगर एक इंटरफेस विफल हो जाता है। हालाँकि, होस्ट पर अनुप्रयोग यदि eth0नीचे है तो बाहरी दुनिया के लिए कनेक्शन को प्रारंभ नहीं कर सकता है। यही मेरी समस्या है।

मैंने उस विषय पर शोध किया है और निम्नलिखित रोचक जानकारी प्राप्त की है:

जब कोई प्रोग्राम एक आउटबाउंड कनेक्शन शुरू करता है तो वाइल्डकार्ड स्रोत पते (0.0.0.0) का उपयोग करना सामान्य है, यह इंगित करता है कि कोई प्राथमिकता नहीं है कि किस इंटरफ़ेस का उपयोग किया गया है ताकि संबंधित गंतव्य पता उपलब्ध हो। रूटिंग निर्णय किए जाने तक इसे एक विशिष्ट स्रोत पते से प्रतिस्थापित नहीं किया जाता है। इस तरह के कनेक्शनों से जुड़ा ट्रैफ़िक उपरोक्त नीति नियमों में से किसी एक से मेल नहीं खाएगा, और न ही नए जोड़े गए रूटिंग टेबल के लिए निर्देशित किया जाएगा। अन्यथा एक सामान्य कॉन्फ़िगरेशन को मानते हुए, यह बजाय मुख्य मार्ग तालिका के माध्यम से गिर जाएगा। http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html

मैं जो चाहता हूं वह मुख्य मार्ग तालिका के लिए एक से अधिक डिफ़ॉल्ट गेटवे (एक पर eth0और एक पर wlan0) है और डिफ़ॉल्ट eth0रूप से और wlan0यदि eth0नीचे है तो डिफ़ॉल्ट गेटवे के माध्यम से जाना है।

क्या यह संभव है? ऐसी कार्यक्षमता प्राप्त करने के लिए मुझे क्या करने की आवश्यकता है?


बहुत संक्षेप में: कई डिफ़ॉल्ट मार्ग यादृच्छिक पर एक इंटरफ़ेस चुनेंगे, जिससे परेशानी होती है क्योंकि असाइन किया गया IP अलग है। आप जो चाहते हैं वह मल्टीहोमिंग या बंडलिंग है , जो करना मुश्किल है, यहाँ
dirkt

1
आप बॉन्डिंग के साथ डायनेमिक फेलओवर का उपयोग कर सकते हैं । डिफ़ॉल्ट मार्गों के साथ बेला करने की कोई आवश्यकता नहीं है।
इंगो

जवाबों:


18

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

  • 3 एनआईसी: eth0 (तार), wlan0 (अंतर्निहित वाईफाई, कमजोर), wlan1 (यूएसबी वाईफाई एडाप्टर, wlan0 की तुलना में मजबूत संकेत)
  • सभी एक ही सबनेट पर, उनमें से प्रत्येक अपने स्वयं के आईपी पते के साथ।
  • eth0 को इनकमिंग और आउटगोइंग ट्रैफ़िक के लिए डिफ़ॉल्ट रूप से उपयोग किया जाना चाहिए।
  • यदि eth0 विफल रहता है तो wlan1 का उपयोग किया जाना चाहिए।
  • यदि wlan1 विफल रहता है तो wlan0 का उपयोग किया जाना चाहिए।

पहला चरण : प्रत्येक इंटरफ़ेस के लिए एक नया मार्ग तालिका बनाएँ /etc/iproute2/rt_tables। चलो उन्हें rt1, rt2 और rt3 कहते हैं

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1  inr.ruhep
1 rt1
2 rt2
3 rt3

दूसरा चरण : नेटवर्क कॉन्फ़िगरेशन में /etc/network/interfaces। यह मुख्य भाग है और मैं जितना हो सके समझाने की कोशिश करूँगा:

auto eth0 wlan0
allow-hotplug wlan1

iface lo inet loopback

iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
    post-up ip route add default via 192.168.178.1 dev eth0 table rt1
    post-up ip rule add from 192.168.178.99/32 table rt1
    post-up ip rule add to 192.168.178.99/32 table rt1
    post-up ip route add default via 192.168.178.1 metric 100 dev eth0
    post-down ip rule del from 0/0 to 0/0 table rt1
    post-down ip rule del from 0/0 to 0/0 table rt1

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
    post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
    post-up ip rule add from 192.168.178.97/32 table rt2
    post-up ip rule add to 192.168.178.97/32 table rt2
    post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
    post-down ip rule del from 0/0 to 0/0 table rt2
    post-down ip rule del from 0/0 to 0/0 table rt2

iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
    post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
    post-up ip rule add from 192.168.178.98/32 table rt3
    post-up ip rule add to 192.168.178.98/32 table rt3
    post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
    post-down ip rule del from 0/0 to 0/0 table rt3
    post-down ip rule del from 0/0 to 0/0 table rt3

यदि आप लिखते हैं ip rule showतो आपको निम्नलिखित देखना चाहिए:

0:  from all lookup local 
32756:  from all to 192.168.178.98 lookup rt3 
32757:  from 192.168.178.98 lookup rt3 
32758:  from all to 192.168.178.99 lookup rt1 
32759:  from 192.168.178.99 lookup rt1 
32762:  from all to 192.168.178.97 lookup rt2 
32763:  from 192.168.178.97 lookup rt2 
32766:  from all lookup main 
32767:  from all lookup default 

यह हमें बताता है कि आईपी पते "192.168.178.99" से आने वाले या जाने वाले ट्रैफ़िक rt1 मार्ग तालिका का उपयोग करेंगे। अब तक सब ठीक है। लेकिन ट्रैफ़िक जो स्थानीय रूप से उत्पन्न होता है (उदाहरण के लिए आप मशीन से कहीं और पिंग या ssh करना चाहते हैं) को विशेष उपचार की आवश्यकता होती है (प्रश्न में बड़ा उद्धरण देखें)।

पहली चार पोस्ट-अप लाइनें /etc/network/interfacesसीधी हैं और स्पष्टीकरण इंटरनेट पर पाए जा सकते हैं, पांचवीं और आखिरी पोस्ट-लाइन वह है जो जादू करती है:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

ध्यान दें कि हमने इस पोस्ट-अप लाइन के लिए मार्ग-तालिका कैसे निर्दिष्ट नहीं की है। यदि आप मार्ग तालिका निर्दिष्ट नहीं करते हैं, तो जानकारी उस mainमार्ग तालिका में सहेजी जाएगी जो हमने देखी थी ip rule show। यह पोस्ट-अप लाइन "मुख्य" रूट तालिका में एक डिफ़ॉल्ट मार्ग डालता है जो स्थानीय रूप से उत्पन्न ट्रैफ़िक के लिए उपयोग किया जाता है जो आने वाले ट्रैफ़िक की प्रतिक्रिया नहीं है। (उदाहरण के लिए अपने सर्वर पर एक एमटीए एक ई-मेल भेजने की कोशिश कर रहा है।)

तीन इंटरफेस सभी मुख्य मार्ग तालिका में एक डिफ़ॉल्ट मार्ग डालते हैं, विभिन्न मैट्रिक्स के साथ। आइए एक नज़र डालते हैं कि mainरूट टेबल किसके साथ है ip route show:

default via 192.168.178.1 dev eth0  metric 100 
default via 192.168.178.1 dev wlan1  metric 101 
default via 192.168.178.1 dev wlan0  metric 102 
192.168.178.0/24 dev wlan0  proto kernel  scope link  src 192.168.178.97 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.99 
192.168.178.0/24 dev wlan1  proto kernel  scope link  src 192.168.178.98

हम देख सकते हैं कि मुख्य मार्ग तालिका में तीन डिफ़ॉल्ट मार्ग हैं, विभिन्न मैट्रिक्स के साथ। सर्वोच्च प्राथमिकता eth0 है, फिर wlan1 और फिर wlan0 है क्योंकि कम मीट्रिक संख्या एक उच्च प्राथमिकता को दर्शाती है। चूंकि eth0सबसे कम मीट्रिक है, यह डिफ़ॉल्ट मार्ग है जो लंबे समय तक उपयोग किया जाने वाला eth0है। यदि eth0नीचे जाता है, तो आउटगोइंग ट्रैफ़िक स्विच हो जाएगा wlan1

इस सेटअप के साथ हम ping 8.8.8.8एक टर्मिनल में और ifdown eth0दूसरे में टाइप कर सकते हैं । pingअभी भी काम करना चाहिए क्योंकि क्योंकि ifdown eth0इससे संबंधित डिफ़ॉल्ट मार्ग निकल eth0जाएगा, आउटगोइंग ट्रैफ़िक स्विच हो जाएगा wlan1

पोस्ट-डाउन लाइनें सुनिश्चित करती हैं कि संबंधित रूट टेबल ip rule showसब कुछ ठीक रखने के लिए, जब इंटरफ़ेस नीचे जाता है तो रूटिंग पॉलिसी डेटाबेस ( ) से हटा दिया जाता है।

जो समस्या शेष है, वह यह है कि जब आप प्लग eth0को डिफ़ॉल्ट मार्ग से खींचते हैं तो eth0अभी भी है और आउटगोइंग ट्रैफ़िक विफल रहता है। हमें अपने इंटरफेस पर नजर रखने और इंटरफ़ेस के ifdown eth0साथ कोई समस्या (यानी एनआईसी विफलता या प्लग खींचने वाले व्यक्ति) को निष्पादित करने के लिए कुछ चाहिए ।

अंतिम चरण : दर्ज करें ifplugdifup/ifdownयदि आप प्लग खींचते हैं या वाईफाई कनेक्शन में कोई समस्या है तो यह एक डेमॉन है जो इंटरफेस और निष्पादन को देखता है /etc/default/ifplugd:

INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

अब आप प्लग को खींच सकते हैं eth0, आउटगोइंग ट्रैफ़िक स्विच हो जाएगा wlan1और यदि आप प्लग को वापस डालते हैं, तो आउटगोइंग ट्रैफ़िक वापस स्विच हो जाएगा eth0आपका सर्वर तब तक ऑनलाइन रहेगा जब तक कि कोई भी तीन इंटरफेस काम नहीं करेगा। अपने सर्वर से कनेक्ट करने के लिए आप eth0 के आईपी पते का उपयोग कर सकते हैं और यदि वह विफल रहता है, तो wlan1 या wlan0 का आईपी पता।


एक कनेक्शन बनाने की कोशिश करें जो अधिक समय लेता है (उदाहरण के लिए एक बड़ी फ़ाइल को स्कैन करना), देखें कि वह किस नेटवर्क इंटरफ़ेस का उपयोग करता है, उस इंटरफ़ेस को अक्षम करें और देखें कि क्या होता है।
दिनांक

scpसत्र टूट जाएगा क्योंकि आईपी पते बदल जाता है। आप withsctpइस तरह के मामले में कनेक्शन को जीवित रखने के लिए उपयोग कर सकते हैं या उस बिंदु से स्थानांतरण को रोकने के rsyncबजाय उपयोग scpकर सकते हैं जहां यह बंद हो गया है।
रसिक्स

बिंदु होने के नाते: यदि यह टूट जाता है, तो बस एक डिफ़ॉल्ट मार्ग होने पर आपके जटिल सेटअप का क्या फायदा है, वर्तमान में सबसे तेज़ नेटवर्क इंटरफ़ेस पर कहें? withsctpसिर्फ एक डिफ़ॉल्ट मार्ग के लिए भी काम करेगा।
dirkt

1
"केवल एक डिफ़ॉल्ट मार्ग होने पर आपके जटिल सेटअप का लाभ क्या है, वर्तमान में सबसे तेज़ नेटवर्क इंटरफ़ेस पर कहें?" >> ठीक यही मेरा सेटअप कर रहा है। डिफ़ॉल्ट रूप से केवल सबसे तेज़ डिफ़ॉल्ट मार्ग (eth0) का उपयोग किया जाता है। आपका स्वागत है।
रोजिक्स

11

लिनक्स आपके स्क्रिप्टेड वर्कअराउंड से बेहतर समाधान प्रदान करता है: सक्रिय-बैकअप बॉन्डिंग।

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

जब मैं डॉकिंग स्टेशन से अपने लैपटॉप को डिस्कनेक्ट करता हूं, तो मैं अपने डेबियन लैपटॉप पर eth0 से wlan0 तक स्वचालित रूप से विफल होने के लिए इस सेटअप का उपयोग कर रहा हूं।

मेरा / etc / नेटवर्क / इंटरफेस:

# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0

# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
        pre-up sleep 5
        wpa-conf /etc/wpa_supplicant.conf
        bond-master bond0
        bond-primary eth0

# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
        bond-slaves eth0 wlan0
        bond-primary eth0
        bond-mode active-backup
        bond-miimon 10
        bond_downdelay 10
        bond_updelay 4000

आप कई wlan उपकरणों को शामिल करने के लिए इस सेटअप को आसानी से बढ़ा सकते हैं। स्थापना primary_reselectकरने का विकल्प better(स्वचालित रूप से सबसे तेजी से लिंक का चयन करें) यहाँ मदद करनी चाहिए।

अधिक जानकारी के लिए देखें https://wiki.linuxfoundation.org/networking/bonding और https://wiki.debian.org/B/C

और (निश्चित रूप से) https://www.kernel.org/doc/Documentation/networking/ndingding.txt पर लिनक्स कर्नेल प्रलेखन

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