इसे खुद हल किया। नेटवर्किंग सामान के बारे में बहुत कम जानकारी है जो आप लिनक्स के साथ कर सकते हैं, इसलिए मैंने अपने समाधान के बारे में विस्तार से बताया और समझाया। यह मेरा अंतिम सेटअप है:
- 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
साथ कोई समस्या (यानी एनआईसी विफलता या प्लग खींचने वाले व्यक्ति) को निष्पादित करने के लिए कुछ चाहिए ।
अंतिम चरण : दर्ज करें ifplugd
। ifup/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 का आईपी पता।