انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إعداد Port Forwarding و NAT: دليل iptables

مفاهيم NAT، قواعد DNAT/SNAT، توجيه المنافذ مع iptables و nftables، المخفي وحالات الاستخدام: خوادم الألعاب، خوادم الويب خلف NAT.

وقت القراءة: 13 دقيقة الأمان
توجيه المنافذnatiptablesdnatsnatmasqueradelinuxإعداد الشبكة

جدول المحتويات

إعداد Port Forwarding و NAT: دليل iptables

توجيه المنافذ و NAT (ترجمة عناوين الشبكة) أدوات أساسية لإدارة حركة الشبكة. تستخدم هذه التقنيات لفتح الخدمات خلف خادم للخارج، وإعداد خوادم الألعاب، أو إدارة خدمات متعددة عبر IP واحد.

ما هو NAT؟

NAT (Network Address Translation) تقنية شبكية تعدّل عناوين المصدر أو الوجهة لحزم IP. هناك نوعان رئيسيان:

  • SNAT (Source NAT): يغيّر عنوان IP المصدر — للحركة الصادرة
  • DNAT (Destination NAT): يغيّر عنوان IP الوجهة — لتوجيه الحركة الواردة
  • Masquerade: نوع SNAT خاص للـ IPs الديناميكية

تفعيل توجيه IP

hljs bash
# تفعيل مؤقت
sudo sysctl -w net.ipv4.ip_forward=1

# تفعيل دائم
sudo nano /etc/sysctl.conf
# أضف السطر:
# net.ipv4.ip_forward=1

# تطبيق التغييرات
sudo sysctl -p

# التحقق
cat /proc/sys/net/ipv4/ip_forward
# الإخراج: 1

توجيه المنافذ مع iptables (DNAT)

توجيه المنافذ الأساسي

hljs bash
# توجيه المنفذ الخارجي 80 إلى الخادم الداخلي
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

# توجيه المنفذ الخارجي 443 إلى الخادم الداخلي
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443

# التوجيه إلى رقم منفذ مختلف (خارجي 8080 → داخلي 80)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

# السماح بالحركة الموجَّهة
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT

توجيه منافذ UDP

hljs bash
# توجيه منفذ UDP لخادم الألعاب
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT

SNAT و Masquerade

hljs bash
# Masquerade — للـ IP الديناميكي
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# SNAT — للـ IP الثابت (أكثر كفاءة)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1

إعداد NAT الكامل

hljs bash
# 1. مسح القواعد الموجودة
sudo iptables -F
sudo iptables -t nat -F

# 2. السياسات الافتراضية
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 3. Loopback والاتصالات المنشأة
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# 4. وصول SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 5. قواعد توجيه المنافذ
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015

# 6. قواعد FORWARD
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT

# 7. Masquerade
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 8. حفظ القواعد
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

توجيه المنافذ مع nftables

#!/usr/sbin/nft -f

flush ruleset

table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 80 dnat to 192.168.1.10:80
        tcp dport 443 dnat to 192.168.1.10:443
        udp dport 27015 dnat to 192.168.1.30:27015
    }
    
    chain postrouting {
        type nat hook postrouting priority 100;
        oif eth0 masquerade
    }
}

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
    }
    
    chain forward {
        type filter hook forward priority 0; policy drop;
        ct state established,related accept
        ip daddr 192.168.1.10 tcp dport { 80, 443 } accept
        ip daddr 192.168.1.30 udp dport 27015 accept
    }
    
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

حالات الاستخدام

الحالة 1: خادم الألعاب (CS2, Minecraft)

hljs bash
# خادم CS2
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -d 192.168.1.30 -p udp --dport 27015 -j ACCEPT

# خادم Minecraft
sudo iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.31:25565
sudo iptables -A FORWARD -d 192.168.1.31 -p tcp --dport 25565 -j ACCEPT

الحالة 2: خادم الويب خلف NAT

hljs bash
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -A FORWARD -i eth0 -d 192.168.1.10 -p tcp -m multiport --dports 80,443 -j ACCEPT

استكشاف الأخطاء

hljs bash
# عرض جدول NAT
sudo iptables -t nat -L -n -v

# عرض جدول تتبع الاتصالات
sudo conntrack -L

# مراقبة الحركة على منفذ محدد
sudo tcpdump -i eth0 port 80

# فحص توجيه IP
cat /proc/sys/net/ipv4/ip_forward

بعد إضافة قواعد توجيه المنافذ، لا تنسَ إضافة كل من قواعد PREROUTING (DNAT) و FORWARD. إضافة قاعدة DNAT فقط غير كافية — يجب أيضًا السماح بالحركة في سلسلة FORWARD.

الخلاصة

توجيه المنافذ و NAT مكونات أساسية لإدارة شبكة Linux. بإعداد قواعد DNAT و SNAT و masquerade بشكل صحيح مع iptables أو nftables، يمكنك فتح خوادم الألعاب وخدمات الويب والتطبيقات الأخرى من خلف NAT.