सवाल एक ही नेटवर्क में एक आईपी से दूसरे आईपी तक पोर्ट अग्रेषण कैसे करें?


मुझे कुछ करना है NAT में iptables। तो, सभी पैकेट आ रहे हैं 192.168.12.87 और बंदरगाह 80 को अग्रेषित किया जाएगा 192.168.12.77 बंदरगाह 80

Iptables के साथ यह कैसे करें?

या

इसे प्राप्त करने के किसी भी अन्य तरीके?


62
2018-04-03 17:58


मूल


@Matthewlfe, किसी कारण से, मुझे सभी अपाचे अनुरोध (1 9 2.168.12.87) से (1 9 2.168.12.77) को आगे बढ़ाने की आवश्यकता है। - sat
@ मैथ्यूल्फ़, मेरे पास दो उत्पादन सर्वर हैं। एक सार्वजनिक स्थैतिक आईपी पते से जुड़ा हुआ है। कुछ कनेक्टिविटी मुद्दों के कारण, मैं डीबी और अन्य सिस्टम से कनेक्ट करने में सक्षम नहीं हूं 192.168.12.87। इसलिए, मुझे सभी अनुरोधों को अग्रेषित करने की आवश्यकता है 192.168.12.77। - sat
@ लैन, मैं परिचित नहीं हूँ iptables। और, मैंने कुछ उदाहरण देखा। लेकिन, ऐसा लगता है कि दो ईथरनेट की आवश्यकता है। संपर्क: revsys.com/writings/quicktips/nat.html - sat
आप 192.168.12.87 से 192.168.12.77 को अनुरोध भेजने के लिए अपने वेब सर्वर कॉन्फ़िगरेशन में प्रॉक्सी मोड का भी उपयोग कर सकते हैं (यदि आपका वेबसर्वर इसका समर्थन करता है) - krisFR
askapache.com/htaccess/... - dmourati


जवाब:


इन नियमों को मानते हुए काम करना चाहिए iptables सर्वर पर चल रहा है 192.168.12.87 :

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -t nat -F
iptables -X

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.12.77 --dport 80 -j SNAT --to-source 192.168.12.87

आपको पोर्ट 80 पर आने वाले ट्रैफिक को डीएनएटी करना होगा, लेकिन आपको यातायात को वापस एसएनएटी की भी आवश्यकता होगी।


वैकल्पिक (और सर्वोत्तम दृष्टिकोण आईएमएचओ):

आपके वेब सर्वर (अपाचे, एनजीएनएक्स) के आधार पर आपको अपने फ्रंट-एंड सर्वर (1 9 2.168.12.87) पर एक HTTP प्रॉक्सी पर विचार करना चाहिए:

  • mod_proxy (अमरीका की एक मूल जनजाति)

  • proxy_pass (Nginx)


62
2018-04-03 21:46



यूएफडब्ल्यू अक्षम होने तक काम करता है, भले ही पोर्ट यूएफडब्ल्यू में अनुमति देता है, लेकिन अगर यूएफडब्ल्यू सक्षम है, तो यह अग्रेषण सामग्री काम नहीं करती है, कोई विचार? - Sudhir N
महान उत्तर के साथ महान सवाल। एक अन्य उपयोग-मामले यह उपयोगी है कि यदि आपको एक सेवा में आने वाले सभी ट्रैफ़िक को अस्थायी रूप से रीडायरेक्ट करने की आवश्यकता है, तो स्क्विड कहें, किसी अन्य आईपी / पोर्ट पर ताकि सभी ग्राहकों को पुन: कॉन्फ़िगर करने की आवश्यकता के बिना मूल सेवा पर कुछ रखरखाव करने के लिए! बेहद सुविधाजनक! - PF4Public
"लेकिन आपको यातायात को वापस करने की भी आवश्यकता होगी।" -> आपने मेरा दिन बचाया। धन्यवाद - obayhan
यह समाधान मेरे लिए काम नहीं कर रहा है। मुझे eth0 से वर्चुअल नेटवर्क (virb0) में अग्रेषित करने की आवश्यकता है जिसका उपयोग KVM-Guest द्वारा किया जाता है। मैंने -i और -o विकल्पों को जोड़ने का प्रयास किया लेकिन पूर्ववर्ती करने के लिए अनुमति नहीं है। कोई सुझाव? - lostiniceland


एक स्पष्ट रूप से स्पष्ट कारण 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 पर भेजने के लिए केवल 1 9 2.168.12.77 पर भेजे जाएंगे, लेकिन 1 9 2.168.12.77 फिर सीधे क्लाइंट को जवाब भेज देंगे। वे जवाब होस्ट के माध्यम से नहीं जाएंगे जहां आपके आईपीटीबल नियम एनएटी कर रहे हैं, इसलिए एक दिशा में पैकेट का अनुवाद किया जाता है, लेकिन दूसरी दिशा में पैकेट नहीं हैं।

इस समस्या को हल करने के तीन दृष्टिकोण हैं।

  1. पहले मेजबान पर न केवल डीएनएटी करें, बल्कि एसएनएटी भी करें कि वापसी यातायात पहले मेजबान के माध्यम से वापस भेजा जाएगा। नियम कुछ ऐसा दिख सकता है iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
  2. आईपी ​​परत की बजाय ईथरनेट परत पर डीएसआर लोड संतुलन और डीएनएटी पैकेट से प्रेरणा लें। 1 9 2.168.12.77 के मैक के साथ पैकेट के गंतव्य मैक को प्रतिस्थापित करके और आईपी परत को छूए बिना ईथरनेट पर भेजकर, 1 9 2.168.12.77 में डमी इंटरफ़ेस पर कॉन्फ़िगर किया गया 192.168.12.87 हो सकता है और इस प्रकार टीसीपी कनेक्शन को समाप्त करने में सक्षम हो सकता है क्लाइंट को ज्ञात सर्वर आईपी के साथ।
  3. पहले होस्ट पर बेवकूफ (लेकिन काम नहीं कर रहा) समाधान का प्रयोग करें। फिर रिटर्न ट्रैफिक पर एसएनएटी करके दूसरे होस्ट पर रिटर्न पैकेट को संभालें। एक नियम दिख सकता है iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87

उन तीनों समाधानों में से प्रत्येक में कमी है, इसलिए आपको सावधानीपूर्वक विचार करने की आवश्यकता है, अगर आपको वास्तव में यह विशेष अग्रेषण करने की आवश्यकता है।

  1. एसएनएटी का उपयोग क्लाइंट आईपी खो देगा, इसलिए मेजबान नंबर 2 सोचेंगे कि सभी कनेक्शन 1 9 2.168.12.87 से आए हैं। इसके अतिरिक्त आप सभी उत्तर पैकेट्स के लिए होस्ट नंबर 1 के माध्यम से बैंडविड्थ का उपयोग करेंगे, जो अन्य दृष्टिकोणों के साथ एक और सीधा मार्ग लेगा।
  2. डीएसआर दृष्टिकोण दो नोड्स के बीच अन्य सभी संचार तोड़ देगा। डीएसआर दृष्टिकोण वास्तव में केवल तभी उचित होता है जब सर्वर का पता किसी भी मेजबान का प्राथमिक आईपी नहीं होता है। प्रत्येक मेजबान को प्राथमिक आईपी होना चाहिए, जो डीएसआर आईपी नहीं है।
  3. एक दिशा में अनुवाद करने के लिए एक मेजबान पर कनेक्शन ट्रैकिंग का उपयोग करना और दूसरी दिशा में अनुवाद करने के लिए किसी अन्य होस्ट पर कनेक्शन ट्रैकिंग सादा बदसूरत है, और इसके कई तरीके टूट सकते हैं। उदाहरण के लिए यदि पोर्ट होस्ट को किसी भी होस्ट पर एनएटी द्वारा संशोधित किया गया है, तो उनको पुनर्निर्माण करने का कोई तरीका नहीं है। यह भी दिया गया नहीं है, कि कनेक्शन ट्रैकिंग सही ढंग से काम करेगी, अगर यह पहला पैकेट एसीके की बजाय एक एसईएन-एसीके है।

तीन दृष्टिकोणों में से मुझे लगता है कि पहला वह है, जो काम करने की सबसे अधिक संभावना है। इसलिए यदि आपको क्लाइंट आईपी पते जानने की आवश्यकता नहीं है, तो वह वही है जिसे मैं अनुशंसा करता हूं।

आप एनएटी के बारे में पूरी तरह से भूलना चुन सकते हैं और मैक या आईपी परत पर समस्या को हल करने का प्रयास नहीं कर सकते हैं। आप HTTP परत तक सभी तरह से जा सकते हैं और वहां एक समाधान की तलाश कर सकते हैं। उस स्थिति में जो समाधान आपको मिलेगा वह एक HTTP प्रॉक्सी है। यदि आप 1 9 2.168.12.87 पर एक HTTP प्रॉक्सी स्थापित करते हैं और इसे उचित रूप से कॉन्फ़िगर करते हैं, तो आप इसे अनुरोधों को 192.168.12.77 पर अग्रेषित कर सकते हैं और उत्तर वापस भेज सकते हैं। इसके अतिरिक्त यह मूल क्लाइंट आईपी को संरक्षित करने के लिए एक एक्स-फॉरवर्ड-हेडर के लिए सम्मिलित कर सकता है। 1 9 2.168.12.77 पर सर्वर को एक्स-फॉरवर्डेड-हेडर के लिए 192.168.12.87 से भरोसा करने के लिए कॉन्फ़िगर करने की आवश्यकता है।


26
2018-04-03 21:44



मैं आश्चर्यचकित हूँ -j MASQUERADE यहां उल्लेख नहीं किया गया है; क्या यह डीएनएटी के साथ सामान्य दृष्टिकोण नहीं है? - remram
@remram मैंने उल्लेख किया SNAT के बजाय MASQUERADE, क्योंकि दस्तावेज कहता है। दस्तावेज़ीकरण में सटीक शब्द है: It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target. - kasperd