सवाल मैं iptables के साथ आगे कैसे पोर्ट कर सकते हैं?


मैं बंदरगाह 8001 पर पीपीपी 0 पर आने वाले कनेक्शन को पोर्ट 8080 पर eth0 पर 192.168.1.200 तक भेजना चाहता हूं।

मुझे इन दो नियम मिल गए हैं

-A PREROUTING  -p tcp -m tcp --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

और यह काम नहीं करता है। मैं क्या खो रहा हूँ?


110
2017-12-05 21:06


मूल


नाट हाउटो - Paul Tomblin
मैं एन-पी-आर टैग के साथ जाने जा रहा हूं (हालांकि यह सकता है प्रोग्रामिंग से संबंधित हो, हालांकि निश्चित रूप से खराब वाक्यांश।) - Mihai Limbăşan
इसके बारे में: मैं एक प्रोग्रामर हूं जो पर्यावरण स्थापित करने की कोशिश कर रहा है, इसलिए मैं अपने सर्वर एप्लिकेशन को ग्रहण में ग्रहण में ग्रहण कर सकता हूं। पर्याप्त नजदीक?
निश्चित रूप से, यही मेरा मतलब है "खराब वाक्यांश" ... क्या आप तदनुसार प्रश्न संपादित कर सकते हैं? - Mihai Limbăşan


जवाब:


सबसे पहले - आपको यह जांचना चाहिए कि अग्रेषण की अनुमति है या नहीं:

cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding 

अगर दोनों रिटर्न 1 यह ठीक है। यदि निम्नलिखित नहीं करते हैं:

echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding

दूसरी बात - DNAT पर लागू किया जा सकता है nat केवल टेबल इसलिए, आपका नियम तालिका विनिर्देश जोड़कर भी बढ़ाया जाना चाहिए (-t nat):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

दोनों नियम केवल टीसीपी यातायात पर लागू होते हैं (यदि आप यूडीपी को भी बदलना चाहते हैं, तो आपको समान नियम प्रदान करना होगा -p udp विकल्प सेट)।

अंतिम, लेकिन कम से कम रूटिंग कॉन्फ़िगरेशन नहीं है। प्रकार:

ip route

और जांचें कि क्या 192.168.1.0/24 वापस लौटने वाली प्रविष्टियों में से एक है।


91
2018-03-24 11:24



मैं व्यक्तिगत रूप से पसंद करता हूं sysctl वाक्यविन्यास की तरह sysctl net.ipv4.conf.eth0.forwarding=1 - Doud
मैं गलत तरीके से दर्ज नियम को कैसे हटा सकता हूं? - Nickolai Leschov
दूसरी पंक्ति: "iptables -A FORWARD -p tcp -d 192.168.1.200 - 8080 -m स्टेट -डेट नई, स्थापित, संबंधित-स्वीकार करें" यदि आपके पास फ़ायरवॉल प्रतिबंध / सुरक्षा नहीं है, तो इसकी आवश्यकता नहीं है, अधिकांश होम लैन के साथ मामला है, अन्यथा सावधान रहें- ए, कारणों से यह प्रतिबंध / सुरक्षा के बाद इसे जोड़ देगा और काम नहीं कर सकता है (इसलिए इसके बजाय चेक-आई, जो iptables नियमों के सामने जोड़ रहा है) - THESorcerer
@ ÁronLőrincz, संख्या Iptables नियम अस्थिर हैं जब तक कि बूट पर स्पष्ट रूप से लोड नहीं किया जाता है। - sherrellbc
@ निकोलाई लेस्चोव, एक ही जगह बदलना -A साथ में -D - Alexei Martianov


मुझे लगता है कि आप क्या चाहते हैं:

iptables -A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state 
    NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 8001 -j DNAT --to-destination
    192.168.1.200:8080

14
2017-12-05 21:43



उम ... वह है जो मैंने पहले से ही किया है। मैं iptables- इसे लोड करने के लिए पुनर्स्थापित करता हूं ताकि प्रत्येक अपने स्वयं के खंड में हो, लेकिन मैंने ऊपर लिखा है।
ठीक है, वाक्यविन्यास मूल में बुरा लग रहा था। क्या आपने नियमों में पीआईपी 0 कोशिश की? वास्तव में समस्या क्या है? - Robert Gamble


आप सोर्सिंग स्रोत पते पोस्टरउटिंग भूल जाते हैं:

sysctl net.ipv4.ip_forward=1
yours_wan_ip=101.23.3.1
-A PREROUTING  -p tcp -m tcp -d $yours_wan_ip --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip

और अपने लिनक्स फ़ायरवॉल को कंप्यूटर पर डिफ़ॉल्ट गेटवे के रूप में 192.168.1.200 पते के साथ सेट करना न भूलें।


12
2018-06-09 11:09



आप इसे पीछे की ओर मिला POSTROUNTING कदम। इस बिंदु पर वार्तालाप अभी भी है --destination बजाय --source। - sherrellbc


मैंने अपने लिनक्स राउटर पर ऐसा करने के लिए निम्न बैश स्क्रिप्ट बनाई है। यह स्वचालित रूप से WAN आईपी का अनुमान लगाता है और आगे बढ़ने से पहले आपके चयन की पुष्टि करता है।

#!/bin/bash

# decide which action to use
action="add"
if [[ "-r" == "$1" ]]; then
  action="remove"
  shift
fi

# break out components
dest_addr_lan="$1"
dest_port_wan="$2"
dest_port_lan="$3"

# figure out our WAN ip
wan_addr=`curl -4 -s icanhazip.com`

# auto fill our dest lan port if we need to
if [ -z $dest_port_lan ]; then
  dest_port_lan="$dest_port_wan"
fi

# print info for review
echo "Destination LAN Address: $dest_addr_lan"
echo "Destination Port WAN: $dest_port_wan"
echo "Destination Port LAN: $dest_port_lan"
echo "WAN Address: $wan_addr"

# confirm with user
read -p "Does everything look correct? " -n 1 -r
echo    # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
  if [[ "remove" == "$action" ]]; then
    iptables -t nat -D PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -D FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -D POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport     $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule removed"
  else
    iptables -t nat -A PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -A FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -A POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule added"
  fi
else
  echo "Info not confirmed, exiting..."
fi

स्क्रिप्ट का उपयोग सरल है बस इसे कॉपी करें और इसे एक फ़ाइल में चिपकाएं और फिर।

# chmod +x port_forward.sh
# ./port_forward.sh 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule added

एक ही नियम को हटाने के लिए

# ./port_forward.sh -r 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule removed

मैंने सोचा कि यह किसी को अपने संबंधित राउटर पर समय बचा सकता है।


5
2017-12-14 22:02





प्रयत्न

echo "1" > /proc/sys/net/ipv4/conf/ppp0/forwarding
echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding

ये फ़ाइलें कर्नेल को बताती हैं कि इसे इंटरफेस के बीच पैकेट अग्रेषित करने की अनुमति है।


1
2017-12-10 02:58





मेरे पास MACHINE_A को यह सोचने का काम था कि सेवा MACHINE_B पर भौतिक रूप से चल रही है, लेकिन पारदर्शी रूप से सभी अनुरोधों को MACHINE_C पर फिर से रूट करें।

यह चाल मास्कराइड का उपयोग करना था।

sysctl net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp -d MACHINE_B --dport 443 -j DNAT --to-destination MACHINE_C

iptables -t nat -A POSTROUTING -s MACHINE_A -o INTERFACE_NAME -j MASQUERADE

कृपया ध्यान दें कि आप आदेशों को ट्विक करना चाहते हैं:

  1. केवल एक विशिष्ट इंटरफ़ेस पर पैकेट अग्रेषण की अनुमति देने के लिए। उदाहरण के लिए:

    sysctl net.ipv4.conf.eth0.forwarding=1
    
  2. केवल MACHINE_A को अनुमति देने के लिए, लेकिन अन्य सभी पोर्ट अग्रेषण का उपयोग करने के लिए, हटाएं:

    -s MACHINE_A
    

1
2018-03-17 09:02





यह आदेश मेरे लिए काम नहीं करता है:

-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip

जब मैं लिखूंगा तो मेरे पास 2 लैन इंटरफेस और फॉरवर्ड काम हैं:

iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
  • LAN_IF - लैन इंटरफ़ेस (उदाहरण के लिए eth1, br0 ...)
  • FW_PORD - अग्रेषित बंदरगाह (पहचान मेजबान पर)
  • LAN_IP - लैन इंटरफ़ेस पर आईपी पता (राउटर पर)

पूछताछ और फॉरवर्ड भी ज़रूरी है :)


0
2018-05-24 12:04