IPTables - पोर्ट से दूसरे IP और पोर्ट (अंदर से)


10

वर्तमान में मेरे पास एक NAS बॉक्स है जो पोर्ट 80 के नीचे चल रहा है। NAS को बाहर से एक्सेस करने के लिए, मैंने NAS पर पोर्ट 8080 को पोर्ट 80 पर मैप किया।

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

यह एक आकर्षण की तरह काम कर रहा है। हालाँकि, यह तभी काम कर रहा है जब मैं नेटवर्क के बाहर से वेबसाइट का उपयोग कर रहा हूं (काम पर, अलग घर में, आदि)। इसलिए जब मैं टाइप करता हूं mywebsite.com:8080, तो IPTables सही तरीके से काम करता है और सब कुछ ठीक चल रहा है।

अब, मेरे पास जो समस्या है, मैं इस पोर्ट को नेटवर्क के अंदर से रीडायरेक्ट कैसे कर सकता हूं? मेरा डोमेन नाम mywebsite.comमेरे राउटर (मेरा लिनक्स सर्वर) को अंदर से (10.32.25.1) तक इंगित करता है, लेकिन मैं अंदर से 10.32.25.2 पर पोर्ट 8080 को पोर्ट 80 पर पुनर्निर्देशित करना चाहता हूं।

कोई सुराग?

# 1 संपादित करें

इस प्रश्न को सुविधाजनक बनाने में मदद करने का प्रयास मैंने इस आरेख को एक साथ रखा। कृपया गलत होने पर अपडेट करने के लिए स्वतंत्र महसूस करें या आप जो खोज रहे हैं उसे गलत तरीके से प्रस्तुत करें।

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@ एस एल एम बिल्कुल। 10.32.25.2:8080 पर कुछ भी नहीं होता है क्योंकि सर्वर 80 पोर्ट पर है। बाहर से, NAT 8080 से पोर्ट 80 पर पोर्ट निर्दिष्ट आईपी (10.32.25.2) पर पोर्ट करता है। नेट -> नेट: 8080 -> 10.32.25.2:80। मुझे अंदर से नियम की जरूरत है और मुझे नहीं पता कि वहां क्या रखा जाए।
डेविड बेलांगेर

@ एसएलएम हाँ। मुझे नहीं पता कि मैं ऐसा कुछ कैसे हासिल कर सकता हूं। मैं 10.32.25.1:8080अनुप्रेषित कहना चाहता हूं 10.32.25.2:80। ऊपर मेरा नियम बाहर से काम कर रहा है, लेकिन मेरे नेटवर्क के अंदर से नहीं। इसलिए यदि मैं कार्यालय में हूं, तो मैं वेबसाइट NAS: 8080 से अपने NAS तक पहुंच सकता हूं और यह पूरी तरह से पारदर्शी है। मेरे घर से, website.com:8080 बिंदु से 10.32.25.1 पर क्योंकि यह मेरा राउटर उर्फ ​​लिनक्स सर्वर है। मैं पोर्ट 8080 को NAS पर पोर्ट 80 पर भी फिर से पारदर्शी तरीके से पुनर्निर्देशित करना चाहता हूं।
डेविड बेलांगेर

@ एसएलएम हां, सब कुछ ठीक है और काम कर रहा है। मैं सिर्फ आंतरिक नेटवर्क से पोर्ट 10.32.25.1:8080 से 10.32.25.2:80 पर पुनर्निर्देशित करना चाहता हूं।
डेविड बेलांगेर

इन्टरफेस का भी उल्लेख करें eth0 10.32.25.2, ताकि हम इनबाउंड इंटरफ़ेस के आधार पर iptables के उपयोग को लिखने में सक्षम हो सकें
राहुल पाटिल

माफ करना, मैंने अभी देखा .. आपने पहले ही मुद्दे को हल कर लिया है ..
राहुल पाटिल

जवाबों:


13

मैंने आखिरकार कैसे-कैसे पाया। सबसे पहले, मुझे -i eth1अपने "बाहर" नियम से जोड़ना था (eth1 मेरा WAN कनेक्शन है)। मुझे दो अन्य नियमों को जोड़ने की भी आवश्यकता थी। यहाँ अंत में मैं क्या लेकर आया:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

2
दूसरा नियम आवश्यक नहीं है, क्योंकि पहले नियम में पहले से ही शामिल है कि ...
machineaddict

1
पहला नियम प्रीरूट को केवल तभी प्रतिबंधित करता है जब वह इंटरफ़ेस eth1 पर आ रहा हो। दूसरा नियम अधिक सामान्य है क्योंकि यह सभी इंटरफेस पर लागू होता है। छोरों खबरदार!
tu-Reinstate Monica-dor duh

4

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

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

इसके लिए बहुत-बहुत धन्यवाद, मैं घंटों तक अपने बाल खींचता रहा!
कॉलिनम

3

पहले साथ देने की अनुमति दें

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

फिर के साथ iptable नियम सेट करें

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

आप इन पंक्तियों को /etc/rc.localउदाहरण के लिए रख सकते हैं । नोट: चूंकि डेबियन जेसी इसे निष्पादन योग्य बनाते हैं और इसके माध्यम से r.local सेवा को सक्षम करते हैं

systemctl enable rc-local.service

0

पहले आपको यह सत्यापित करने की आवश्यकता है कि आपके पास अग्रेषण सक्रिय है:

cat /proc/sys/net/ipv4/ip_forward

यदि नहीं 1, तो दौड़ें echo 1 > /proc/sys/net/ipv4/ip_forward

अगर आप चाहते हैं कि पोर्ट 80 और 443 पर 10.32.25.1 से टकराने वाले ट्रैफिक को 10.32.25.2 के 80पोर्ट पर भेजा जाए तो आपको नीचे दिए गए नियम का उपयोग करना चाहिए:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.