अगर मेरे कई नेटवर्क इंटरफेस ठीक काम कर रहे हैं तो मैं कैसे बता सकता हूं?


3

Ubuntu 14.04 x86-64 पर मेरे पास एक वायरलेस ब्रॉडबैंड कनेक्शन है और एक यूएसबी टेथर एक (यह 4 जी पर है, उतना ही वायरलेस नहीं):

मार्ग-एन
कर्नेल आईपी रूटिंग टेबल
डेस्टिनेशन गेटवे जेनमस्क फ्लैग्स मेट्रिक रेफरी इफ़ेक्ट
0.0.0.0 192.168.42.129 0.0.0.0 UG 0 0 0 usb0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan1
192.168.42.0 0.0.0.0 255.255.255.0 U 1 0 0 usb0

मेरे पास फिर निम्नलिखित भी हैं:

ifconfig

...

usb0 लिंक एनकैप: ईथरनेट HWaddr 02: 36: 2c: 04: 05: 7c  
          inet addr: 192.168.42.248 Bcast: 192.168.42.255 मुखौटा: 255.2.2.2.2.0
          inet6 addr: fe80 :: 36: 2cff: fe04: 57c / 64 स्कोप: लिंक
          UP BROADCAST RUNNING MULTICAST MTU: 1500 मीट्रिक: 1
          आरएक्स पैकेट: 3367 त्रुटियां: 1 गिरा: 0 ओवररन: 0 फ्रेम: 1
          TX पैकेट: 3669 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
          टकराव: 0 txqueuelen: 1000 
          आरएक्स बाइट्स: 2434689 (2.4 एमबी) TX बाइट्स: 637911 (637.9 KB)

wlan1 लिंक एनकैप: ईथरनेट HWaddr 14: cc: 20: 75: e1: 8d  
          inet addr: 192.168.0.4 Bcast: 192.168.0.255 मास्क: 255.255.255.0
          inet6 addr: fe80 :: 16cc: 20ff: fe75: e18d / 64 स्कोप: लिंक
          UP BROADCAST RUNNING MULTICAST MTU: 1500 मीट्रिक: 1
          आरएक्स पैकेट: 3806 त्रुटियां: 0 गिरा: 0 ओवररन: 0 फ्रेम: 0
          TX पैकेट: 4110 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
          टकराव: 0 txqueuelen: 1000 
          RX बाइट्स: 2283536 (2.2 एमबी) TX बाइट्स: 583794 (583.7 KB)

यह सब कुछ ऐसा लगता है जैसे यह काम करने वाला है (जैसा कि दोनों नेटवर्क कनेक्शन ऊपर हैं, मेरी मशीन को 2 आईपी मिले, ...)।
तब मैं एक कनेक्शन (या किसी अन्य) पर प्रक्रियाओं को बाध्य करने के लिए बाइंड शिम का उपयोग करना चाहता था और वे केवल तब काम करते हैं जब मैं डिफ़ॉल्ट कनेक्शन / गेटवे के आईपी को निर्दिष्ट करता हूं ।
निम्नलिखित कार्य (कृपया ध्यान दें कि यह टेथर USB - 4G पर है):

BIND_ADDR = "192.168.42.248" LD_PRELOAD = / bind.so.ium- ब्राउज़र

और यह (मेरा ब्रॉडबैंड) नहीं है:

BIND_ADDR = "192.168.0.4" LD_PRELOAD = / bind.so क्रोमियम-ब्राउज़र

बेशक, जब मैं USB फोन को अनप्लग करता हूं , wlan0 जादुई रूप से फिर से काम करना शुरू कर देता है ...

मैं क्या गलत कर रहा हूं? कोई उपाय?


इसके लुक से, आपका .0.0 रूट तब काम नहीं करता है जब आप 42.0 नेटवर्क से बंधे होते हैं क्योंकि आपका डिफ़ॉल्ट रूट 42.129 पर गेटवे की ओर इशारा करता है, जिसे आप दूसरे नेटवर्क पर एक्सेस नहीं कर सकते। आपको 192.168.0.0/24 पर 0.0.0.0/0 मार्ग की आवश्यकता है, शायद आपका राउटर जो भी हो।
Xyon

@ Xyon मैं इसे कैसे सत्यापित कर सकता हूं? भले ही मैं बाँध शिम का उपयोग करता हूं ? माना जाता है कि LD_PRELOAD ट्रिक सभी बाइंड्स को बाध्य करने और 192.168.0.4 से कनेक्ट करने के लिए है?
इमानुएल

खैर यह बाहरी साइटों खींच नहीं चलता है कि यह है , काम कर रहे क्योंकि अन्यथा आप अन्य लिंक के माध्यम से कनेक्टिविटी मिल चाहते हैं। आपका ब्रॉडबैंड नेटवर्क पूरी तरह से सेट नहीं है, मैं नहीं जानता कि कैसे बाँध को उस स्थिति को संभालने के लिए माना जाता है, लेकिन कर्नेल को यह नहीं पता कि आपके पैकेट कहाँ भेजे जाएँ।
Xyon

@ Xyon मुझे लगता है कि टीसीपी / यूडीपी कनेक्शन बनाते समय कर्नेल क्या वापसी कर रहा है, यह देखने के लिए मुझे एक साधारण परीक्षण निष्पादन योग्य लिखना होगा।
इमानुएल

नहीं, मैं इतनी दूर नहीं जाऊंगा। आप अपने दूसरे इंटरफ़ेस से बंधे एक दूसरे रूट टेबल की आवश्यकता के लिए क्या कर रहे हैं, इसलिए सिस्टम समझता है कि प्रत्येक इंटरफ़ेस से अनुरोधों को कैसे संभालना है। अवधारणा पर एक अच्छे संसाधन के लिए thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System देखें ।
Xyon

जवाबों:


3

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

लिनक्स कई गेटवे (एक प्रति इंटरफ़ेस, आभासी या नहीं) के अस्तित्व की अनुमति देता है, के तहत policy-based routing। आपको जो करने की आवश्यकता है, वह है दो अलग-अलग राउटिंग टेबल, एक के लिए usb0और एक के लिए wlan0, और एक नियम जो कर्नेल का उपयोग करने के लिए कहता है; तब bindingइंटरफ़ेस के लिए एक आवेदन आपको WAN साइटों तक पहुंचने की अनुमति देगा।

आप दो रूटिंग टेबल को निम्नानुसार संभालते हैं: सबसे पहले, दो टेबल बनाएं (आईपी 1, डीईवी 1, और इसी तरह से, समझदार नामों के साथ,):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

प्रत्येक रूटिंग टेबल में एक गेटवे जोड़ें (यदि आवश्यक हो):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

फिर एक डिफ़ॉल्ट मार्ग:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

फिर स्रोत पते के आधार पर मार्ग तालिका का चयन करने के लिए नियम:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

अब आप या तो इंटरफ़ेस से एप्लिकेशन को बांध सकते हैं।


धन्यवाद, यह उस उत्तर की तरह लग रहा है जिसकी मुझे तलाश थी। क्या आपको पता है कि क्या प्रोग्रामेटिकली ऐसा करने का कोई तरीका है? क्या परिवर्तन लगातार हैं?
इमानुएल

@Emanuele नहीं, ये परिवर्तन लगातार नहीं हैं। सबसे आसान बात यह है कि उपरोक्त सभी को एक निष्पादन योग्य फ़ाइल में रखना, इसे कॉल करना my_config, फिर, में /etc/network/interfaces, उपयोग करना auto usb0; interface usb0 inet dhcp; post-up /path/to/my_config, और इंटरफेस को उठाना ifup/ifdown usb0/wlan0
MariusMatutiae

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

@Emanuele उपरोक्त कमांड को एक निष्पादन योग्य फ़ाइल में रखें, आपके पास अपना एक लाइनर है; पिछली स्थिति में वापस जाने के लिए, दो इंटरफेस लाएँ, फिर बैक अप करें, और /etc/iproute2/rt_tablesफ़ाइल में दो पंक्तियों को मिटा दें ।
MariusMatutiae

उस गेटवे के माध्यम से इस सबनेट के लिए अस्थायी रूप से सभी पैकेटों को रूट करने की ट्रिक करेंगे ip route add 192.168.0.0/24 dev wlan1या ip route add 192.168.0.0/24 dev 192.168.0.1नहीं?
Emanuele
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.