स्पष्ट रूप iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
से काम नहीं करने का कारण यह है कि रिटर्न पैकेट कैसे रूट किया जाएगा।
आप ऐसे नियम स्थापित कर सकते हैं जो पैकेट को 192.168.12.87 पर भेजेंगे और केवल 192.168.12.77 पर नैटेड होंगे, लेकिन 192.168.12.77 ग्राहक को सीधे जवाब भेज देंगे। वे उत्तर होस्ट के माध्यम से नहीं जाएंगे जहां आपके iptables नियम NAT कर रहे हैं, इसलिए एक दिशा में पैकेट का अनुवाद किया जाता है, लेकिन दूसरी दिशा में पैकेट नहीं हैं।
इस समस्या को हल करने के लिए तीन दृष्टिकोण हैं।
- पहले मेजबान पर सिर्फ डीएनएटी नहीं करते हैं, लेकिन यह भी एसएनएटी ऐसा करते हैं कि वापसी यातायात पहले मेजबान के माध्यम से वापस भेज दिया जाएगा। नियम कुछ ऐसा दिख सकता था
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
- DSR लोड बैलेंसिंग से प्रेरणा लें और IP लेयर की बजाय ईथरनेट लेयर में पैकेट्स को डीएनएटी से लें। 192.168.12.77 के मैक के साथ पैकेट के गंतव्य मैक को बदलकर और आईपी परत को छूने के बिना ईथरनेट पर भेजना, फिर 192.168.12.77 एक डमी इंटरफ़ेस पर 192.168.12.87 कॉन्फ़िगर हो सकता है और इस तरह टीसीपी कनेक्शन को समाप्त करने में सक्षम हो सकता है। क्लाइंट के लिए ज्ञात सर्वर आईपी के साथ।
- पहले मेजबान पर भोले (लेकिन काम नहीं) समाधान का उपयोग करें। फिर रिटर्न ट्रैफिक पर एक SNAT कर दूसरे होस्ट पर रिटर्न पैकेट संभालें। एक नियम की तरह लग सकता है
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
उन तीन समाधानों में से प्रत्येक में कमियां हैं, इसलिए आपको सावधानीपूर्वक विचार करने की आवश्यकता है, अगर आपको वास्तव में इस विशेष अग्रेषण को करने की आवश्यकता है।
- SNAT का उपयोग करने से क्लाइंट IP खो जाएगा, इसलिए होस्ट नंबर 2 को लगेगा कि सभी कनेक्शन 192.168.12.87 से आए थे। इसके अतिरिक्त आप सभी उत्तर पैकेटों के लिए होस्ट नंबर 1 के माध्यम से बैंडविड्थ का उपयोग करेंगे, जो अन्य तरीकों के साथ अधिक सीधा मार्ग लेगा।
- डीएसआर दृष्टिकोण दोनों नोड्स के बीच अन्य सभी संचार को तोड़ देगा। डीएसआर दृष्टिकोण वास्तव में केवल तभी उपयुक्त होता है जब सर्वर एड्रेस किसी भी होस्ट का प्राथमिक आईपी नहीं होता है। प्रत्येक मेजबान के पास एक प्राथमिक आईपी होना चाहिए, जो डीएसआर आईपी नहीं है।
- एक दिशा में अनुवाद करने के लिए एक होस्ट पर कनेक्शन ट्रैकिंग का उपयोग करना और दूसरी दिशा में अनुवाद करने के लिए दूसरे होस्ट पर कनेक्शन ट्रैकिंग सादे बदसूरत है, और विभिन्न तरीके हैं जो इसे तोड़ सकते हैं। उदाहरण के लिए यदि पोर्ट नंबर NAT द्वारा होस्ट पर संशोधित किए गए हैं, तो उन को फिर से संगठित करने का कोई तरीका नहीं है। यह भी एक दिया नहीं है, कि कनेक्शन ट्रैकिंग सही ढंग से काम करेगा, अगर यह पहला पैकेट देखता है तो ACK के बजाय SYN-ACK है।
तीन दृष्टिकोणों में से, मुझे लगता है कि पहला वह है, जो काम करने की सबसे अधिक संभावना है। इसलिए यदि आपको क्लाइंट आईपी पते को जानने की आवश्यकता नहीं है, तो वह वही है जो मैं सुझाऊंगा।
आप NAT के बारे में पूरी तरह से भूल सकते हैं और MAC या IP लेयर पर समस्या को हल करने का प्रयास नहीं कर सकते। आप HTTP लेयर तक सभी तरह से जा सकते हैं और वहां एक समाधान की तलाश कर सकते हैं। उस स्थिति में आपको जो समाधान मिलेगा वह एक HTTP प्रॉक्सी है। यदि आप 192.168.12.87 पर HTTP प्रॉक्सी स्थापित करते हैं और इसे उचित रूप से कॉन्फ़िगर करते हैं, तो आप इसे अनुरोधों को 192.168.12.77 पर अग्रेषित कर सकते हैं और उत्तरों को आगे भेज सकते हैं। इसके अतिरिक्त यह मूल क्लाइंट IP को संरक्षित करने वाले X- फ़ॉर्वर्ड-फॉर हेडर डाल सकता है। 192.168.12.77 पर सर्वर को 192.168.12.17 से X- फॉरवर्डेड-फॉर हेडर पर भरोसा करने के लिए कॉन्फ़िगर करने की आवश्यकता है।