iptables 127.0.0.1 के बाहर अनुरोधों को पुनर्निर्देशित करता है


41

मुझे लगता है मैं 192.168.2.2:2222 (आईपी के बाहर) करने के लिए सभी अनुरोधों को अग्रेषित करने के लिए जरूरत है एक सेवा बंदरगाह 2222. साथ 127.0.0.1 पर चल रहे हैं केवल से 127.0.0.1:2222 को सबनेट 192.168.1.0/24।

मैं इसका उपयोग करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं कर रहा है।

$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222

में इससे कैसे चला सकता हूँ?

UPD: पता योजना संपादित करें।


हमें कुछ स्पष्टीकरण की आवश्यकता है। ट्रैफिक कहां से आ रहा है? यातायात मूल रूप से कहां जा रहा है? ट्रैफ़िक कहाँ तक जाना चाहिए? जैसा कि मैंने इसे पढ़ा है, आप चाहते हैं कि 192.168.1.0/24 से 127.0.0.1:2222 ट्रैफ़िक को 12.23.34.45:2222 पर रीडायरेक्ट किया जाए। लेकिन वॉरेन का जवाब है कि आप ट्रैफिक को 192.168.1.0/24 से 12.23.34.45:2222 तक 127.0.0.1:222 पर भेजना चाहते हैं
पैट्रिक

1
ट्रैफ़िक 192.168.1.0/24 सबनेट से 192.168.2.2:2222 तक आता है और इसे 127.0.0.1:2222 पर सेवा में अनुवाद किया जाना चाहिए। मुझे पता योजना सही है।
सिमवित

1
आप एक नियम चाहते हैं जो ट्रैफ़िक को 2222सबनेट से लूपबैक इंटरफ़ेस पर पोर्ट करने की अनुमति देता है 192.168.1.0/24? यह सेटअप का केवल एक नियम प्रकार नहीं है। यहाँ देखें: debuntu.org/...
SLM

हाँ। जैसा कि मैं समझता हूं कि मुझे masq नियम जोड़ने की आवश्यकता है? IP अग्रेषण पहले से ही सक्षम है।
सिमहाइट

इसे "वास्तविक" आईपी पर क्यों न चलाएं, और अवांछित स्रोतों से आने वाले ट्रैफ़िक को फ़िल्टर करें? यह है कि फ़ायरवॉल अनिवार्य रूप से ...
vonbrand

जवाबों:


60

आपके द्वारा उपयोग किया जाने वाला iptables नियम काम करेगा, लेकिन एक अतिरिक्त बदलाव है जिसे आपको करने की आवश्यकता है:

sysctl -w net.ipv4.conf.eth0.route_localnet=1

( eth0निक के साथ की जगह 192.168.2.2पर रहता है)

डिफ़ॉल्ट रूप से यह मान है 0, जो कर्नेल को बाहरी ट्रैफ़िक को रूट नहीं करने का निर्देश देता है 127.0.0.0/8। यह सिर्फ सुरक्षा के लिए है क्योंकि ऐसा यातायात सामान्य नहीं है।


अतिरिक्त नोट: आपका वर्तमान iptables नियम बहुत व्यापक है। आपका नियम -d 192.168.1.0/24 --dport 2222गंतव्य मिलान के रूप में निर्दिष्ट करता है, जिसका अर्थ है कि यदि आपकी मशीन किसी अन्य होस्ट से पोर्ट 2222 (यानी आउटबाउंड ट्रैफ़िक) पर बात करने की कोशिश करती है, तो यह पुनर्निर्देशित हो जाएगा। आपको या तो -dमैच को बदलना होगा -d 192.168.2.2, या जोड़ना होगा -i eth0(या जो भी आपके निक है)।


8
यह जानकारी आश्चर्यजनक रूप से कठिन है।
व्रेन टी।

हाँ, बहुत मूल्यवान हार्ड-टू-फाइंड जानकारी! धन्यवाद! लेकिन मेरे पास नहीं है route_localnet। क्या इसके लिए कोई अन्य नाम हैं? (linux 2.6.30 में) ls /proc/sys/net/ipv4/conf/lan/: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm अग्रेषण mc_forwarding promote_secondaries rp_filter send_redirects टैग
IMZ - इवान Zakharyaschev

मैं देख रहा हूं, मेरे कर्नेल (2.6.30-std-def-alt15 # 1 SMP Mon 14 दिसंबर 08:45:48 UTC 2009) की तुलना में पैचroute_localnet हाल ही में (7 जून, 2012) है। ठीक है, मैं बस वांछित अग्रेषण (जैसे अंदर से) को अग्रेषित करने की प्रक्रिया netcat( nc) xinetd, या पोर्ट-फ़ॉरवर्डिंग विकल्पों के साथ ssh(बाद वाला अप्रभावी और बेवकूफ, निश्चित रूप से, लेकिन मैं इसका उल्लेख करता हूं, प्राप्त करूंगा) क्योंकि, ठीक है, यह संभावना है)।
इम्ज़ - इवान ज़खरीशेव

2
मेरे 2 सेंट: आप इस पैरामीटर को सभी इंटरफेस के लिए सक्षम कर सकते हैंsysctl -w net.ipv4.conf.all.route_localnet=1
दिमित्रिअसन

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

3

आप लोकलहोस्ट पर पुनर्निर्देशित कर सकते हैं लेकिन लूपबैक (127.0.0.0/8) पर नहीं। लूपबैक एक खामी है। आपको अपने वास्तविक इंटरफेस में से एक पर पुनर्निर्देशित करना होगा। REDIRECT का उपयोग करके देखें।

iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222


यह शायद sysctl वूडो के बिना सबसे अच्छा जवाब है ...
लेस्टर चेउंग

अभी भी मदद नहीं करता है अगर पोर्ट 222 को केवल लोकलहोस्ट पर सुना जा रहा है (नियम गंतव्य पता नहीं बदलेगा)
sanmai

उस स्थिति में, उपयोग करें-j DNAT --to-destination w.x.y.z:222
dresende

2

क्या होगा अगर सही जवाब के साथ route_localnetकाम नहीं करता है?

यदि आपका कर्नेल पैच कोroute_localnet शामिल नहीं करता है , तो ... कर्नेल को अपग्रेड करें!

या दूसरे इंटरफ़ेस पर (विशेष रूप से, लोकलहोस्ट के लिए) एक पोर्ट पर आने वाले ट्रैफ़िक को अग्रेषित करने के अन्य तरीके हैं, एक प्रक्रिया चलाकर जो बाहरी इंटरफ़ेस पर सुने और ट्रैफ़िक को आगे बढ़ाएगा।

netcat( nc), xinetdऔर ssh(और शायद अधिक) कार्यक्रमों के सभी उदाहरण ऐसा करने में सक्षम हैं (हालांकि चुनना sshअजीब और अप्रभावी होगा)।

मैंने इसके लिए एक विन्यास लिखा है xinetd। अब इस सेवा को स्वचालित रूप से लाया जाता है:

# cat /etc/xinetd.d/z-from-outside 
# default: off
# description: Forward connections to the z port.
service z-from-outside
{
    disable         = no
    socket_type     = stream
    type        = UNLISTED
    wait            = no
    user            = nobody
    bind        = vaio.ob
    port        = 7070
    redirect    = localhost 7070
}
# 

( vaio.obबाहरी नेटवर्क इंटरफेस पर इस होस्ट का नाम है।)

एक के बाद service xinetd reload, आइए देखें कि यह सुन रहा है:

# lsof -i -P | fgrep 7070
xinetd    556      root    6u  IPv4 1797906      0t0  TCP vaio.ob:7070 (LISTEN)
sshd    27438 tun_zzoom    4u  IPv4 1059100      0t0  TCP localhost.localdomain:7070 (LISTEN)
# 

और वास्तव में, कनेक्शन के माध्यम से जाना!

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