एक ही सबनेट पर आईपी के साथ कई भौतिक इंटरफेस


13

मेरे पास 9 एनआईसी के साथ एक लिनक्स बॉक्स है, और मैं चाहता हूं कि उनमें से आठ एक ही सबनेट पर अद्वितीय पते हों, जैसे:

ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

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

इसलिए मैंने चारों ओर अफवाह फैला दी और इस तरह sysctl में कुछ बदलाव करना समाप्त कर दिया:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

कि eth1सभी अन्य लोगों को लागू करने से रोका गया, लेकिन मैं अभी भी eth1सफलतापूर्वक पते के अलावा कुछ भी नहीं कर सकता । (एक ही स्विच पर एक दूसरे कंप्यूटर से, केवल 192.168.123.1पिंग के लिए प्रतिक्रिया करता है)

मैं अनुमान लगा रहा हूं कि मुझे आर्प्टेबल्स या आईपीरूट या सोमेथिंग के साथ कुछ करने की जरूरत है, लेकिन मैं इस क्षेत्र में समुद्र में खो गया हूं।

बोनस अंक: समाधान लिनक्स 2.6.27.27 के साथ संगत होना चाहिए। (अधिक विशेष रूप से, स्लैक्स 6.1.2)


क्या आप रूटिंग टेबल पोस्ट कर सकते हैं?
ponsfonze

2
इस कॉन्फ़िगरेशन को बनाने में आपका उद्देश्य क्या है? आप क्या खत्म करने की कोशिश कर रहे हैं?
डेविड श्वार्ट्ज

इस तरह पागलपन है।
3

यदि आप इन इंटरफेस को बांड करना चाहते हैं, तो आपको वास्तव में उन्हें बांड देना होगा।
resmon6

1
@DavidSchwartz नहीं, मशीन को एक स्विच (या राउटर) की तरह काम नहीं करना चाहिए। प्रत्येक वीएम के लिए समर्पित भौतिक एनआईसी के साथ 8 आभासी मशीनों को चलाने के बारे में अधिक सोचें ( नोट: मैं वीएमएस नहीं चला रहा हूं , यह सिर्फ एक सादृश्य है )। उसी नेटवर्क पर एक और बॉक्स के दृष्टिकोण से, मेरे सिंगल पीसी को आठ असतत पीसी से पूरी तरह से अप्रभेद्य होना चाहिए।
frustrated_tester

जवाबों:


17

आपको एक मजबूत एंड सिस्टम मॉडल की जरूरत है । लिनक्स मूल रूप से एक कमजोर भेजने वाले सिस्टम मॉडल के आसपास बनाया गया है, इसलिए यह वास्तव में इस एप्लिकेशन के लिए एक अच्छा ओएस विकल्प नहीं है।

आपको एआरपी से पॉलिसी रूटिंग से लेकर सोर्स एड्रेस सेलेक्शन तक, आपके द्वारा आवश्यक व्यवहार के हर टुकड़े को नकली करना होगा। पैकेट को गलत इंटरफ़ेस पर आने से स्वीकार करने से रोकने के लिए आपको फिल्टर की भी आवश्यकता होगी।

निश्चित रूप से आवश्यक कदम हैं:

  1. सभी इंटरफेस पर arp_filter = 1 और arp_ignore = 2 कॉन्फ़िगर करें।

  2. आउटगोइंग ट्रैफ़िक के लिए प्रति-इंटरफ़ेस, स्रोत-आधारित रूटिंग जोड़ें। (गंतव्य इंटरफ़ेस स्रोत पते के आधार पर चुना जाना चाहिए।)

  3. गलत इंटरफ़ेस पर प्राप्त पैकेट को चुपचाप छोड़ने के लिए प्रति-इंटरफ़ेस इंप्रेसिंग फ़िल्टरिंग जोड़ें। (एक गंतव्य पते के साथ पैकेट जो अन्य इंटरफ़ेस को सौंपा गया है।)

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

यह स्पष्ट नहीं है कि आप प्रसारण के लिए आउटपुट इंटरफ़ेस कैसे चुनेंगे, उदाहरण के लिए। क्या यह उन सभी को बाहर जाना चाहिए? शायद। यदि स्टोक एक स्रोत पते के साथ एक आउटबाउंड प्रसारण हो जाता है तो सही व्यवहार क्या है जो किसी एक इंटरफेस को नहीं सौंपा गया है?

फिर, आपने नौकरी के लिए गलत टूल चुना है।


7

आप अधिक संभावना 8/9 इंटरफेस के साथ एक पुल बनाना चाहते हैं और फिर उस पुल (पुल-बर्तन पैकेट, कमांड 'brctl add') के लिए एक आईपी पता असाइन करें।

इस तरह पुल एक स्विच की तरह काम करेगा और आपके सबनेट में एक आईपी एड्रेस हो सकता है।


AFAIK, यह वास्तव में लिनक्स के लिए सही उत्तर होना चाहिए। लिनक्स उपकरणों का उपयोग करके डेविड के जवाब में वर्णित कई समस्याओं के आसपास लिनक्स मिलता है (उर्फ एक बेहतर एल 2 तार्किक निर्माण करके एल 3 समस्याओं से बचें)।
डेव

4

मैं भौतिक इंटरफेस को फिर से जोड़ने की सलाह दूंगा, फिर एकल बंधुआ इंटरफ़ेस पर सभी पतों को कॉन्फ़िगर करें।

आपको स्विच पर भी समर्थन की आवश्यकता होगी।

यहां एक मिनी ट्यूटोरियल है जिसे आप आरंभ करने के लिए उपयोग कर सकते हैं।


4

ऐसा लगता है कि आप 9 अलग-अलग मशीनों के बराबर एक परीक्षण वातावरण चाहते हैं, और यह मानते थे कि एक मशीन पर 9 इंटरफेस उस का अनुकरण कर सकते हैं। लिनक्स में यह केवल डेविड शवार्ट्ज द्वारा वर्णित कारणों के लिए एक स्टैक के माध्यम से ऐसा नहीं कर सकता है। BTDT और निशान हैं। यह 2 इंटरफेस के साथ काफी खराब था।

एक बेहतर समाधान हो सकता है कि आप अपने एक होस्ट में 8 या 9 असतत वर्चुअल मशीन चलाएं, और इन वर्चुअल मशीनों के लिए 8 या 9 इंटरफेस को ब्रिज करें।


पढ़ना संसाधन: यूनिक्स नेटवर्क प्रोग्रामिंग: स्टीवंस, फेनर और रूडॉफ द्वारा सॉकेट नेटवर्किंग एपीआई। इसके अलावा RFC1122 और RFC4907 देखें।
1

0

हाँ यह डेविड श्वार्ट्ज के सुझाव के बाद संभव है:

echo -ne 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter

// उपयुक्त कार्यक्षमता के लिए यानी ARP, eth1 से उत्पन्न होता है, जब eth0 और eth1 दोनों एक ही सबनेट में होते हैं

echo -ne 0 > /proc/sys/net/ipv4/conf/all/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth1/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth1/arp_ignore

//Create a table called "new_rt_table" and create a routing rule that says any packet with a mark equal to '1' gets routed according to the "new_rt_table"(can name it whatever you want) table. The file /etc/iproute2/rt_tables is the only source of table names on the system. Internally, routing tables have integer identifiers.

echo 1 new_rt_table >> /etc/iproute2/rt_tables
ip rule add from all fwmark 1 table new_rt_table

// eth1 के माध्यम से पैकेट को रूट करने के लिए "new_rt_table" तालिका सेटअप करें

ip route add default dev eth1 table new_rt_table
ip route show table new_rt_table

// मार्क पैकेट ताकि 'आईपी मार्ग' इसे eth1 के माध्यम से रूट कर सके

iptables -F -t mangle
iptables -t mangle -I OUTPUT -s <ip addr of eth1> -o eth0 -j MARK --set-mark 1

// कर्नेल कॉन्फ़िगरेशन में कई रूटिंग तालिकाओं के लिए समर्थन सक्षम करें।

कर्नेल विन्यास

→ नेटवर्किंग समर्थन → नेटवर्किंग विकल्प

[*] आईपी: उन्नत राउटर

[*] आईपी: नीति मार्ग

CONFIG_IP_ADVANCED_ROUTER

CONFIG_IP_MULTIPLE_TABLES

// उपरोक्त चरणों का मतलब है कि eth0 से सही तरीके से बाहर निकलने के लिए eth0 से पैकेट को फिर से तैयार करना।

अगर किसी को यह काम आता है तो कृपया किसी अन्य तरीके का सुझाव दें।

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