जब आईपी एलियासिंग करता है, तो ओएस कैसे निर्धारित करता है कि आउटबाउंड टीसीपी / आईपी कनेक्शन के स्रोत के रूप में किस आईपी पते का उपयोग किया जाएगा?


15

मेरे पास एक सर्वर है जो एक एकल एनआईसी पर चार आईपी पते के साथ उबंटू सर्वर चला रहा है।

eth0       192.168.1.100
eth0:0     192.168.1.101
eth0:1     192.168.1.102
eth0:2     192.168.1.103

(उदाहरण के लिए 192.168.xx का उपयोग करते हुए, मान लें कि ये सार्वजनिक आईपी पते की एक श्रृंखला के लिए NAT-ed हैं)

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

यह देखते हुए कि मेरे सर्वर में तार्किक रूप से एक एकल एडेप्टर पर चार आईपी पते हैं, ऑपरेटिंग सिस्टम यह कैसे निर्धारित करता है कि आउटबाउंड टीसीपी / आईपी कनेक्शन के स्रोत के रूप में किस आईपी पते का उपयोग किया जाता है?

मान लीजिए कि मैं 192.168.1.101 को अपने सर्वर में ssh और FTP को संवादात्मक रूप से चलाता हूं। क्या आउटबाउंड टीसीपी / आईपी कनेक्शन 192.168.1.101 का उपयोग करेगा क्योंकि ओएस जानता है कि वह इंटरफ़ेस है जिस पर मेरा शेल जुड़ा हुआ है?

अगर कोई शेल न हो तो एफ़टीपी कार्य गैर-अंतःक्रियात्मक रूप से क्रॉन जॉब के माध्यम से कैसे चलाया जाता है?

जैसा कि आप शायद बता सकते हैं, यह मुझे काफी उलझन में है, इसलिए मुझे उम्मीद है कि मेरे सवालों में कम से कम समझ है।

संपादित करें

यह स्पष्ट करने के लिए कि मैं क्यों पूछ रहा हूं - मैंने रूटिंग टेबल में कोई बदलाव नहीं किया है और यह वास्तव में 0.0.0.0 मार्गों के लिए why eth0 ’को IFace के रूप में सूचीबद्ध करता है। हालांकि, सभी संकेत हैं कि यह वास्तव में स्रोत के रूप में eth0: 0 का उपयोग कर रहा है।

Destination    Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0        192.168.1.1     0.0.0.0         UG    100    0        0 eth0

मैं रूटिंग टेबल के साथ फील कर सकता हूं या हमारे क्लाइंट को मेरे व्यवहार को प्राप्त करने के लिए अपने फ़ायरवॉल नियमों को बदल सकते हैं, लेकिन मैं थोड़ा अंतर्दृष्टि हासिल करने की कोशिश कर रहा हूं कि यह कैसे पता चलेगा कि ओएस में बग है या सिर्फ मेरी भोली समझ। कैसे सभी टुकड़े एक साथ फिट होते हैं।

धन्यवाद

जवाबों:


12

डिफ़ॉल्ट रूप से, लिनक्स पर, यदि एक इंटरफ़ेस में कई पते हैं जो अलग-अलग सबनेट पर हैं, तो संबंधित सबनेट के लिए नियत ट्रैफ़िक में उचित स्रोत आईपी होगा। यही है, अगर eth0 के दो पते 192.168.1.1/24 और 10.1.1.1/8 हैं, तो 10.0.0.0 सबनेट पर किसी भी चीज़ के लिए ट्रैफ़िक का स्रोत 10.1.1.1 होगा, और 192.168.1.0 सबनेट पर किसी भी चीज़ का ट्रैफ़िक होगा। 192.168.1.1। आप "आईपी मार्ग" के लिए "src 1.2.3.4" विकल्प का उपयोग करके इस मामले में स्पष्ट रूप से स्रोत पते निर्दिष्ट कर सकते हैं।

आपके मामले में, हालांकि, आपके सभी पते एक ही सबनेट पर हैं, इसलिए "प्राथमिक" एक (जैसा कि "आईपी एड्र लिस्ट देव एथ0" से पता चला है) का उपयोग उस इंटरफ़ेस पर ट्रैफ़िक से बाहर निकलने के लिए स्रोत आईपी के रूप में किया जाता है। मुझे लगता है कि इस मामले में केवल "आईपी मार्ग" का उपयोग करके स्रोत आईपी को नियंत्रित करना संभव है, लेकिन मुझे रुचि के ट्रैफ़िक के लिए स्रोत पते को फिर से लिखने के लिए iptables का उपयोग करना आसान लगा है।

यदि आप किसी विशिष्ट स्रोत पते को विशिष्ट गंतव्यों के लिए उपयोग करने के लिए बाध्य करना चाहते हैं, तो आप इसे SNAT नियम के साथ कर सकते हैं:

iptables -t nat -I POSTROUTING -o eth0 -d dest-IP-or-net/mask -s primary-IP-of-eth0 -j SNAT --to-source desired-source-IP

इसलिए यदि आपका "प्राथमिक" eth0 IP 192.168.100.1 है, लेकिन आप 19.3.168.100.2 के स्रोत के लिए 1.2.3.4 पर ट्रैफ़िक चाहते हैं, तो यह करें:

iptables -t nat -I POSTROUTING -o eth0 -d 1.2.3.4/0 -s 192.168.100.1 -j SNAT --to-source 192.168.100.2

ध्यान दें कि "-s 192.168.100.1" महत्वपूर्ण है: यह इस नियम द्वारा अग्रेषित ट्रैफ़िक के स्रोत पते को फिर से लिखे जाने से रोकता है ।

यदि आप लिनक्स पर जटिल नेटवर्क विन्यास को लागू करने जा रहे हैं, तो आपको लिनक्स उन्नत रूटिंग और ट्रैफिक कंट्रोल प्रलेखन, http://lart.org.org को पढ़ना चाहिए।


नमूने में, शायद "-d 1.2.3.4/0" को "-d 1.2.3.4/332" या "-d 1.2.3.4" के साथ बदलें
क्रिश्चियन

5

मैं आपके उदाहरण में देखता हूं कि सभी ips बहुत पास हैं जो एक ही नेटवर्क में नहीं हैं

क्या आपको यकीन है कि आप वास्तव में मल्टीहोमिंग हैं और केवल 4 आईपी उपनाम नहीं हैं?

यदि बाद का मामला है, तो आप इस तरह से कुछ के साथ एक मार्ग पर स्रोत आईपी सेट कर सकते हैं

/ sbin / ip रूट शो 192.168.222.0/24 देव eth0 प्रोटो कर्नेल स्कोप लिंक src 192.168.222.178 169.254.0.0/16 देव eth0 स्कोप लिंक डिफ़ॉल्ट 192.168.222.1 eth0 के माध्यम से

sudo / sbin / ip मार्ग डिफ़ॉल्ट रूप से 192.168.222.1 src 192.168.222.178 के माध्यम से प्रतिस्थापित करता है

/ sbin / ip रूट शो
192.168.222.0/24 देव eth0 प्रोटो कर्नेल स्कोप लिंक src 192.168.222.178 169.254.0.0/16 देव eth0 स्कोप लिंक डिफ़ॉल्ट माध्यम से 192.168.222.1.1 eth0 src 192.168.222.178

देखें कि आदमी रिबूट के बीच इसे कैसे बनाये रखता है


तुम सही हो। शायद मैं मल्टी-होमिंग शब्द का दुरुपयोग कर रहा हूं। हमारा डेटा सेंटर हमें एक ही सबनेट पर चार आईपी पते देता है।
जो होलोवे

आप जानते हैं कि आप अपने प्रश्न को संपादित कर सकते हैं, है ना?
हयालसी

5

यह रूट गेट में जो भी डिफ़ॉल्ट गेटवे है, उसका उपयोग करता है, जब तक कि एक विशिष्ट मार्ग यह न बताए कि वह किसी अन्य का उपयोग करने के लिए है: route -n

संपादित करें: मैं आपके प्रश्न को बहुत जल्दी पढ़ता हूँ ऐसा लगता है ...

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

मुझे पूरी तरह से यकीन नहीं है कि, मैं tcpdump को चलाऊंगा और देखूंगा कि यह src IP के रूप में क्या देखता है।

EDIT2: ठीक है, मैंने उपर्युक्त दृष्टिकोण से लिखा है कि आप सर्वर चला रहे थे, इसलिए जब से आप ग्राहक हैं और कनेक्शन शुरू कर रहे हैं, मुझे लगता है कि यह हमेशा प्राथमिक आईपी पते से आता दिखाई देगा, लेकिन फिर से इसे देखें और देखें tcpdump के साथ।


रूटिंग टेबल बस डिफ़ॉल्ट है और केवल एक सबनेट है। एक अन्य पोस्टर ने संकेत दिया कि मैंने मल्टीहोमिंग शब्द का दुरुपयोग किया है। हालाँकि, मैं अभी भी यह eth0 उपनाम का उपयोग करने की उम्मीद करूँगा। मैंने whatsmyip.net डाउनलोड करने के लिए wget का उपयोग किया है और यह दिखाता है कि मैं eth0: 0 के बजाय किसी तरह का उपयोग कर रहा हूं।
जो होलोवे

यह वास्तव में मेरे लिए मायने नहीं रखता है, whatsmyip.net को आपका सार्वजनिक आईपी दिखाना चाहिए ...
काइल ब्रांट

अधिक स्पष्ट होने के लिए, यह सार्वजनिक आईपी पता दिखाता है जो कि NAT-ed से निजी IP से संबंधित है eth0: 0, जबकि मैं यह अपेक्षा करूंगा कि यह सार्वजनिक IP पता दिखाए जो कि NAT-ed है, जो कि eth0 से संबंधित निजी IP से है
जो होलोवे

1
यहाँ इस उत्तर को बहुत अधिक उकेरा गया है और इसमें कई संपादन हैं और कई चीजों को भ्रमित करता है और मदद नहीं करता है। Tbman और jknapka के उत्तर बेहतरीन हैं और इससे मुझे बहुत मदद मिली।
क्रिश्चियन

4

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

सिस्टम पर केवल एक ही भौतिक इंटरफ़ेस है (eth0) और चार वर्चुअल / उपनाम (eth0: 0 के माध्यम से eth0: 2) एक ही सबनेट पर, आउटबाउंड ट्रैफ़िक eth0 IP पते का उपयोग स्रोत के रूप में करेगा जब तक कि एप्लिकेशन स्मार्ट न हो। एक आउटबाउंड इंटरफ़ेस घोषित करने के लिए।


2
यह मेरी धारणा थी, लेकिन मेरे सभी परीक्षणों से संकेत मिलता है कि यह स्रोत के रूप में eth0: 0 का उपयोग कर रहा है।
जो होलोवे

तब शायद eth0: 0 इंटरफ़ेस का उपयोग करने के लिए डिफ़ॉल्ट मार्ग कॉन्फ़िगर किया गया है। मेरे पास एक इंस्टॉल है जो एक ईथरनेट ब्रिज का उपयोग करता है, और इसे डिफ़ॉल्ट मार्ग के लिए वर्चुअल ब्रिज इंटरफेस का उपयोग करने के लिए कॉन्फ़िगर किया गया था।
sysadmin1138

मैंने आईपी को प्रिंट करने के लिए एक अन्य मशीन पर एक तुच्छ कार्यक्रम स्थापित किया, जिससे इसे एक कनेक्शन प्राप्त हुआ। इसके साथ जुड़ना nc -s <ip of eth0:2>या जो कुछ भी हमेशा स्रोत पता दिखाता है वह वास्तव में eth0: 0 का आईपी है, भले ही netcat ने bind(2)पहले किया हो connect(2)। तो ऐसा लगता है जैसे उपनाम एक मशीन को कई स्रोत पते से कनेक्शन बनाने की क्षमता देने के लिए काम नहीं करता है।
पीटर कॉर्डेस

4

आप देख सकते हैं कि आईपी मार्ग द्वारा किस डिवाइस और src आईपी पते का उपयोग किया जाएगा नीचे की तरह कमांड प्राप्त करें:

$ /sbin/ip route get 1.1.1.1
1.1.1.1 via 2.2.2.2 dev eth0  src 2.2.2.2 
    cache  mtu 1500 advmss 1460 hoplimit 64

मैंने अलियास वातावरण में यह कोशिश नहीं की है, लेकिन आशा है कि यह मदद करता है।


1

आउटबाउंड कनेक्शन स्थापित करते समय, आपका सर्वर इसकी रूटिंग तालिका में यह निर्धारित करेगा कि आपके चार इंटरफेस में से कौन सा उपयोग करना है; आपके TCP कनेक्शन में आपके निकास इंटरफ़ेस का स्रोत IP होगा।

netstat -rn

आपको अपनी रूटिंग टेबल का आउटपुट देगा; आप जिस ग्राहक आईपी से जुड़ने की कोशिश कर रहे हैं, उससे मेल खाने वाली विशिष्ट प्रविष्टियों की तलाश करें। यदि कोई भी मौजूद नहीं है, तो आप एक डिफ़ॉल्ट मार्ग (0.0.0.0, मुखौटा 0.0.0.0) का उपयोग कर रहे होंगे। यदि आपके पास कई डिफ़ॉल्ट मार्ग हैं, तो सबसे कम लागत वाला एक उपयोग किया जाएगा।

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