تبليغاتX
Notes On Computer Networks - Network Address Translation

برای فعال کردن قابلیت NAT  در کرنل باید از دستور modprobe iptables_nat  استفاده کنید . البته در کرنل های سری 2.6 و بسیاری از نسخه های سری 2.4 نیازی به این کار نیست . و اگر کرنل شما از nat  به عنوان ماژول حمایت می کنید از دستور insmode ip_tables استفاده کنید .

 

قبل از هر چیز بهتر است با MASQUERADING  آشنا شوید .

 

MASQUERADE : بسیاری از افراد به دستورات پیچیده iptables  برای NAT  کردن نیاز ندارند . به عنوان مثال وقتی با یک اتصال dial up به اینترنت متصل می شوید و می خواهید آنرا به اشتراک بگذارید . در این گونه موارد معمولا به کامپیوتر شما آدرس آی پی ثابت اختصاص داده نمی شود . برای به اشتراک گذاری این ارتباط باید از MASQUERADING  استفاده کنید که نوع ساده ای SNAT  است .

 

مثال : به اشتراک گذاری اتصال dial up

 

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 

با اجرای این دستور ،  در جدول نت ) –t  nat) بعد از عمل مسیریابی (POSTROUTING  ) یک قانون اضافه می شود ) –Append ) که بر روی تمامی پکت هایی که از واسط ppp0 خارج می شوند عمل MASQUERADING  انجام گیرد .

 

البته باید IP Forwarding  را نیز فعال کنید :

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

 

خوب اگر چیزی بیشتر از یک MASQUERADING  ساده می خواهید ادامه مطلب را مطالعه کنید :

NAT در لینوکس به دو نوع SNAT و DNAT  تقسیم بندی می شود .

 

SNAT ( Source NAT ) : زمانی رخ می دهد   که آدرس مبدا پکت را تغییر دهید . این عمل همیشه بعد از مسیر یابی (POSTROUTING  ) رخ می دهد . برای درک بهتر SNAT  را درست زمان قبل از خروج پکت از سیم  در نظر بگیرید .

 

DNAT (Destination NAT  ) : زمانی رخ می دهد که آدرس مقصد پکت را تغییر دهید . در واقع شما جایی را که پکت می رود تغییر می دهید . DNAT  همیشه قبل از عمل مسیریابی و زمانی که پکت به سیم وارد می شود صورت می گیرد .

 

برای درک بهتر این موضوع به شکل زیر توجه کنید :

 

      _____                                     _____

     /     \                                   /     \

   PREROUTING -->[Routing ]----------------->POSTROUTING----->

     \D-NAT/     [Decision]                    \S-NAT/

                     |                            ^

                     |                            | 

                     |                            |

                     |                            |

                     |                            |

                     |                            |

                     |                            |

                                      > Local Process-------------------------        

برای راحتی کار با دستورات iptables  جهت نت کردن به نکات زیر توجه کنید :

1- در عمل نت کردن باید جدول نت را برای اعمال قوانین انتخاب کنید: –t nat  

2- برای اضافه کردن یک قانون به انتهای زنجیره از –A  و در ابتدای زنجیره از –I  استفاده کنید .

3- آدرس مبدا  پکت ها را با –s  یا –source  و آدرس مقصد را با –d یا –destination  مشخص کنید . به دنبال این گزینه ها یا یک ip   ، یا یک نام دامنه مثلا www.linux-notes.com  یا یک آدرس شبکه قرار می گیرد. مثلا 192.168.0.1/24  یا 192.168.0.1/255.255.255.0  

4- واسطی که پکت ها از آن وارد می شوند را می توانید با –i  و واسطی که پکت ها از آن خارج می شوند را با –o  مشخص کنید . البته انتخاب واسط ورودی و خروجی بستگی به زنجیری که انتخاب کرده اید دارد . اگر زنجیر PREROUTING  را انتخاب کرده اید فقط می توانید از –i  و اگر زنجیر POSTROUTING  را انتخاب کنید فقط می توانید از –o  استفاده کنید .

5- اگر مبدا و مقصد را مشخص نکنید به صورت پیش فرض قوانین بر روی همه مبدا و مقصد ها اعمال می گردد .

6- شما می توانید باپارامتر –p  یا –protocol  اعمال قواننی را به پروتوکل خاصی ( مثلا UDP  یا TCP ) محدود کنید . دلیل اصلی برای چنین کاری این است که اگر پروتوکل را مشخص کنید آنگاه می توانید از پارامتر های اضافی  مثلا –dport  ( برای مشخص کردن پورت مقصد  ) یا –sport  ( برای مشخص کردن پورت مبدا )  نیز استفاده کنید . این چنین پارا متر هایی برای اعمال محدودیت های ویژه ای بر پکت های دریافتی و ارسالی الزامی است .

 

خوب حالا مثال های از استفاده از SNAT  :  برای مشخص کردن عمل SNAT  از پارامتر –j SNAT  استفاده می کنیم .

مثال 1 : تغییر آدرس مبدا پکت ها به 1.2.3.4

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
 

مثال2 : تغییر آدرس مبدا پکت ها به 1.2.3.4 و 1.2.3.5 و 1.2.3.6

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
 
مثال3 : تغییر آدرس مبدا پکت ها به 1.2.3.4 و به پورت های 1 تا 1023 
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
 
و مثال هایی از DNAT  که با –j DNAT  مشخص می شوند .
 
مثال 1 : تغییر آدرس مقصد پکت ها به 5.6.7.8 :
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8

 

مثال 2 : تغییر آدرس مقصد پکت ها به 5.6.7.8   و 5.6.7.9  و 5.6.7.10

# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8-5.6.7.10

 

مثال3 : تغییر آدرس مقصد ترافیک وب به آدرس 5.6.7.8 و  پورت 8080

 

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT     --to 5.6.7.8:8080

 

و بالاخره هدف اصلی من از نوشتن این آموزش یعنی دستورات لازم برای شفاف کردن اسکویید :

 

  Redirection :  نوع خاصی از DNAT  که برای شفاف (transparent )   کردن اسکویید استفاده می شود به redirection  یا تغییر مسیر معروف است .  در این عمل ترافیک وب از  پورت 80 به اسکویید که برای حالت شفاف تنظیم شده است و برروی پورت 3128 در حال اجرا است ارسال می شود .

  # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128   
+ نوشته شده توسط امید مهاجرانی در شنبه بیست و نهم اردیبهشت 1386 و ساعت 14:18 |