दो इंटरफेस, दो पते, दो गेटवे?


15

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

समस्या यह है कि अभी, अगर मैं दूसरे इंटरफ़ेस पर पते को पिंग करने की कोशिश करता हूं, तो डिफ़ॉल्ट मार्ग पहले इंटरफ़ेस के माध्यम से इंगित करता है - और कभी भी ठीक से नहीं आता है।

क्या यह सुनिश्चित करना संभव है कि प्रतिक्रियाएं हमेशा एक ही नेटवर्क इंटरफ़ेस (और एक ही स्रोत आईपी के साथ) पर बाहर जाती हैं, क्योंकि वे अंदर आए थे? और यदि हां, तो कैसे?


1
संभवतः इस पर कुछ संस्करण: unix.stackexchange.com/questions/4420/…
Shawn J. Goff

जवाबों:


17

आप समस्या को गलत समझ रहे हैं। प्रत्येक पैकेट एक प्रतिक्रिया नहीं है और हर पैकेट को किसी अन्य पैकेट से मिलान नहीं किया जा सकता है जैसे कि "समान नेटवर्क इंटरफ़ेस जो वे अंदर आए थे" समझ में आता है। आप क्या करना चाहते हैं, इसके स्रोत आईपी पते के आधार पर एक पैकेट के लिए प्रवेश द्वार का चयन करें।

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

सबसे पहले, दो तालिकाओं को बनाएँ (बदलें <NAME1> और <NAME2> अपने दो प्रदाताओं के लिए समझदार नामों के साथ, समान IP1, DEV1, और इसी तरह):

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>

अधिक जानकारी के लिए कई अपलिंक / प्रदाताओं के लिए रूटिंग देखें ।


आपने लिखा: 'हर पैकेट एक प्रतिक्रिया नहीं है और हर पैकेट को किसी दूसरे पैकेट से नहीं मिलाया जा सकता है, जैसे कि "वही नेटवर्क इंटरफेस, जैसा कि वे आते हैं" समझ में आता है। 'क्या आप इसे आगे बता सकते हैं? मैं समझता हूं, कि हर पैकेट एक प्रतिक्रिया नहीं है और हर पैकेट दूसरे "स्रोत" पैकेट से मेल नहीं खा सकता है। यदि हम इन पैकेटों को विचार से बाहर कर देते हैं, क्योंकि वे किसी भी समस्या का कारण नहीं बनते हैं और इसलिए हमें चिंता न करें, तो बचे हुए पैकेटों को "उसी नेटवर्क इंटरफ़ेस पर रूट नहीं किया जा सकता, जैसा कि वे अंदर आए थे"?
एंड्रयू साविनिख जूल

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

डेविड, मैं ओपी जैसी ही चीज हासिल करना चाहता हूं लेकिन मैं असमर्थ हूं। मैंने यहाँ एक प्रश्न पोस्ट किया है: serverfault.com/questions/992624/… , अगर आप एक नज़र
डाल

6

डेविड शवार्ट्ज का उत्तर उत्कृष्ट है, लेकिन आप केवल एक अतिरिक्त तालिका होने से रूटिंग नियमों को थोड़ा सरल कर सकते हैं, और दूसरे के लिए अपने डिफ़ॉल्ट मार्ग का उपयोग कर सकते हैं। मेरे पास एक सर्वर है जो दो NAT गेटवे के पीछे है, और मैं हाल ही में VMs के एक समूह के बीच उस परिदृश्य को फिर से बनाने की प्रक्रिया से गुजरा। मेरा /etc/network/interfacesऐसा दिखता है:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(यह एक सेटअप के लिए है जहां दो आईएसपी ऑप्टस और आईनेट हैं, इसलिए 'ऑप्टस' का तालिका नाम)

यह, प्लस /etc/iproute2/rt_tablesतालिका बनाने में लाइन , आप सभी की जरूरत होनी चाहिए। आपके दो आईपी पते होंगे; 192.168.13.13 से ट्रैफ़िक 192.168.13.11 से होकर जाएगा, और 192.168.13.213 से ट्रैफ़िक 192.168.13.10 से बाहर जाएगा। उन दोनों गेटवे को अपने पोर्ट फ़ॉरवर्ड करने के लिए उचित रूप से कॉन्फ़िगर करें (192.168.13.11 फॉरवर्ड सामान को 192.168.13.13, और 192.168.13.10 फॉरवर्ड सामान को 192.168.13.213) और बाकी को खुद का ख्याल रखना चाहिए।

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


1

दोहरी नेटवर्क उदाहरण

यह उदाहरण दिखा रहा है कि नेटमास्क और गेटवे के eth1साथ एक अतिरिक्त कैसे10.130.0.2255.255.255.25510.130.0.1 सेवाओं के लिए उपलब्ध कराया जा सकता है जो इसे पसंद करते हैंping -I eth1 8.8.8.8

तकनीकी रूप से हम हैं:

  • अधिक से अधिक मीट्रिक के साथ एक अन्य प्रवेश द्वार जोड़ना
  • तालिका 100 का उपयोग / जोड़ना और इसे स्थापित करना
  • इसके माध्यम से eth1 से / से मार्ग यातायात के लिए एक नियम जोड़ना
ip addr add 10.130.0.2/32 broadcast 10.130.0.2 dev eth1
ip link set eth1 up
ip route add 10.130.0.1 src 10.130.0.2 dev eth1
ip route add 10.130.0.1 src 10.130.0.2 dev eth1 table 100
ip route add default via 10.130.0.1 dev eth1 metric 10
ip route add default via 10.130.0.1 dev eth1 table 100
ip rule add from 10.130.0.2/32 table 100
ip rule add to 10.130.0.2/32 table 100
curl --interface eth1 ifconfig.co
curl --interface eth0 ifconfig.co
ping -I eth1 8.8.8.8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.