سؤال كيف يمكنني تشغيل المنفذ مع iptables؟


أريد أن يتم توجيه الاتصالات الواردة على ppp0 على المنفذ 8001 إلى 192.168.1.200 على eth0 على المنفذ 8080.

لقد حصلت على هذين النظامين

-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


الأصل


NAT HOWTO - Paul Tomblin
انا ذاهب للذهاب مع علامة n-p-r (على الرغم من هذا استطاع أن تكون مرتبطة بالبرمجة ، على الرغم من سوء صياغة هذه الدورة بالطبع.) - 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

يتم تطبيق كلا القواعد فقط على حركة مرور TCP (إذا كنت تريد تغيير UDP أيضًا ، فأنت بحاجة إلى تقديم قواعد مماثلة ولكن مع -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 - dport 8080 -m state -state NEW، ESTABLISHED، RELATED -j ACCEPT" غير مطلوب إذا لم يكن لديك قيود جدار الحماية / الأمان ، والتي هي الحالة مع معظم الشبكات المحلية ، وإلا توخ الحذر مع -A ، فستكون السبب في أنها ستضيفها بعد / قيود الأمان وقد لا تعمل (لذا تحقق من -I بدلاً من ذلك ، وهذا يضيف قاعدة من قواعد iptables) - THESorcerer
@ ÁronLőrincz ، لا. قواعد Iptables متقلبة ما لم يتم تحميلها بشكل واضح في التمهيد. - sherrellbc
@ نيكولاي Leschov ، أدخل نفس الاستبدال -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



ummm ... هذا هو ما لدي بالفعل. أستخدم iptables-restore لتحميله بحيث يكون كل جزء في قسمه الخاص ، ولكن هذا ما كتبته أعلاه.
حسنًا ، بدت البنية سيئة في النص الأصلي. هل حاولت -i ppp0 في القواعد؟ ما هي المشكلة بالضبط؟ - Robert Gamble


نسيت عنوان مصدر postoutout snat 'ing:

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

ولا تنسى تعيين جدار حماية linux كجهاز افتراضي على جهاز الكمبيوتر بعنوان 192.168.1.200.


12
2018-06-09 11:09



كنت حصلت عليه إلى الوراء على POSTROUNTING خطوة. في هذه المرحلة لا تزال المحادثة حول --destination عوضا عن --source. - sherrellbc


لقد قمت بإنشاء البرنامج النصي bash التالي للقيام بذلك على جهاز التوجيه الخاص بي. فإنه ينتشر تلقائيا WAN IP ويؤكد اختياراتك قبل المتابعة.

#!/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 بشفافية.

كانت الخدعة لاستخدام MASQUERADE.

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

لديّ واجهات LAN 2 وعمل FORWARD عند كتابة:

iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
  • LAN_IF - واجهة LAN (على سبيل المثال ، eth1 ، br0 ...)
  • FW_PORD - منفذ إعادة التوجيه (على مضيف الكشف)
  • LAN_IP - عنوان IP على واجهة LAN (على جهاز التوجيه)

PROREUTING و FORWARD ضروريان أيضًا ، بالطبع :)


0
2018-05-24 12:04