NAT يكي از ابزارهاي قدرتمند دنياي IT است كه دقيقا همان كاري را انجام مي دهد كه از اسم آن بر مي آيد,به وسيله NAT مي توانيم آدرس هاي يك شبكه را به يك شبكه ديگر ترجمه كنيم.NAT تقريبا در تمامي سيستم عامل ها و روتر ها قابل انجام است كه هر كدام شيوه و روش خود را دارند.براي همه متخصصين واضح است كه قوي ترين روتر هاي دنيا Cisco هستند و تقريبا 80 درصد از بستر اينترنت بر روي دستگاه هاي Cisco بنا شده اند. در اين آموزش به توضيح مراحل انجام NAT به صورت عملي بر روي سخت افزارهاي سيسكو مي پردازيم.
از كاربردهاي NAT مي توان به موارد زير اشاره كرد:
از كاربردهاي NAT مي توان به موارد زير اشاره كرد:
* ترجمه IP هاي Private به Public يا برعكس
* تغيير مركز سرويس دهنده اينترنت بدون نياز به تغيير IP ها داخلي
* حفاظت از يك شبكه حساس در مقابل برخي حملات خارجي
* تغيير پورت مقصد پكتها براي كاربران داخلي به صورت transparent
* تغيير مركز سرويس دهنده اينترنت بدون نياز به تغيير IP ها داخلي
* حفاظت از يك شبكه حساس در مقابل برخي حملات خارجي
* تغيير پورت مقصد پكتها براي كاربران داخلي به صورت transparent
تعريف برخي اصطلاحات:
* Inside Local : به آدرس (هايي) اتلاق ميشود كه بر روي كلاينتهاي شبكه داخلي تنظيم شده اند.
* Inside Global : به آدرسي اتلاق ميشود كه به اينترفيس داخلي روتر كه به شبكه داخلي متصل است داده شده است.
* Outside Local : به آدرس هايي كه درون اينترنت يا شبكه Public ما قرار دارد گفته مي شود.
* Outside Global : به آدرس (هايي) كه بر روي اينترفيس خارجي روتر كه به شبكه Public متصل است گفته مي شود.
با يك مثال تصويري با اصطلاحات فوق بيشتر آشنا خواهيم شد.
* Inside Local : به آدرس (هايي) اتلاق ميشود كه بر روي كلاينتهاي شبكه داخلي تنظيم شده اند.
* Inside Global : به آدرسي اتلاق ميشود كه به اينترفيس داخلي روتر كه به شبكه داخلي متصل است داده شده است.
* Outside Local : به آدرس هايي كه درون اينترنت يا شبكه Public ما قرار دارد گفته مي شود.
* Outside Global : به آدرس (هايي) كه بر روي اينترفيس خارجي روتر كه به شبكه Public متصل است گفته مي شود.
با يك مثال تصويري با اصطلاحات فوق بيشتر آشنا خواهيم شد.

Static NAT
اين نوع NAT به صورت يك به يك عمل مي كند. بدين معني كه يك عدد inside-localرا به يك outside-global ترجمه مي كند. كاربرد اين نوع NAT وقتي است كه ميخواهيم يك private ip را به يك public ip تبديل كنيم.با مثالي عملي آن را بيشتر توضيح مي دهيم.

در مثال فوق يك روتر سيسكو داريم كه 2 عدد اينترفيس دارد. يكي سريال كه به اينترنت متصل و دومي اترنت كه به شبكه داخلي ما وصل شده است.
ما ميخواهيم آدرس 10.1.1.1را به 11.11.11.254ترجمه كنيم.
بر روي روتر سيسكو چنين عمل مي كنيم:
وارد محيط config مي شويم
config terminal
با اين دستور يك NAT استاتيك مي سازيم
ip nat inside source static 10.1.1.1 11.11.11.254
وارد اينترفيس سريال مي شويم
interface serial0
اين اينترفيس را به عنوان خروجي NAT مشخص مي كنيم
ip nat outside
از اينترفيس خارج مي شويم
exit
وارد اينترفيس اترنت مي شويم
interface Ethernet0
اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
ip nat inside
از اينترفيس و مد Config خارج مي شويم
هم اكنون با تنظيم كردن آدرس 10.1.1.1و گيت وي 10.10.10.10روي كلاينت مي توانيم به اينترنت دسترسي داشته باشيم.
Dynamic NAT
Dynamic NAT نيز همانند Static NAT است اما با اين تفاوت كه در NAT به صورت Dynamic مي توانيم يك يا چندين IP با به چندين IP ترجمه كنيم.
اما چرا چندين IP به چندين IP؟
فرض كنيد شما Admin يك ISP هستيد و به دليل كمبود IP نياز به NAT داريد. بر فرض مثال شما داراي 10 Valid IP و 100 Invalid IP كه بايد به آنها ترجمه كنيد. ممكن است تا كنون براي شما پيش آمده باشد كه كاربري تماس گرفته و اعلام نا رضايتي كند از اينكه مدتهاي طولاني براي دانلود يك فايل از سايت Rapidshare.com بايد انتظار بكشد. اين به دليل اين است كه سايت Rapidshare.com تمامي كاربرهاي شما را به چشم يك كاربر مي بيند. براي رفع اين مشكل مي توانيم 10 آدرس معتبر را به 100 آدرس غير معتبر ترجمه كنيم كه تا حدود زيادي مشكل را حل خواهد كرد.
در Dynamic NAT معمولا آدرس هاي معتبر را به وسيله IP nat pool مشخص و آدرس هاي غير معتبر را توسط يك access-list مشخص مي كنيم. دليل استفاده از access-list ايجاد امنيت بيشتر است.
حال با يك مثال به نحوه ايجاد يك Dynamic NAT واقف مي شويم:
يك روتر سيسكو داريم كه از يك سو توسط اينترفيس سريال به اينترنت متصل گرديده كه داراي رنج IP 217.219.109.128/25 و از سوي ديگر توسط اينترفيس اترنت به شبكه داخلي با رنج 172.16.0.0/24 متصل شده است.
آدرس اينترفيس سريال را 217.219.109.129 و آدرس اينترفيس اترنت را 172.16.0.1 قرار ميدهيم.
config terminal
ابتدا براي آدرسهاي Valid خود يك Pool تهيه مي كنيم
ip nat pool pool1 217.219.109.130 217.219.109.254 prefix-length 25
Prefix-length در مثال بالا همان subnet mask آدرس هاي ما مي باشد
حال access-list مربوط به آدرس هاي داخلي را مي نويسيم
access-list 8 permit 172.16.0.0 0.0.0.255
دستور اصلي NAT را مي نويسيم
ip nat inside source list 8 pool pool1
كه در دستور فوق عدد 8 بيانگر آدرسهاي داخلي و pool1 مشخص كننده آدرس هاي خارجي است
interface serial0
اينترفيس را به عنوان خروجي NAT مشخص مي كنيم
ip nat outside
از اينترفيس خارج مي شويم
exit
وارد اينترفيس اترنت مي شويم
interface ethernet0
اينترفيس را به عنوان ورودي NAT معرفي مي كنيم
ip nat inside
Dynamic NAT به صورت Overload
ممكن است ما به شرايطي بر بخوريم كه تنها 1 عدد آدرس Valid در اختيار داريم و اجبار به NAT كردن آدرس مذكور به چندين آدرس را داريم. در چنين شرايطي بايد از قابليت Overload استفاده كنيم.
در اين حالت روتر براي ورود و خروج هر آدرس Invalid يك پورت مجزا در نظر مي گيرد كه تمامي آنها را در جدولي كه درون خود تشكيل مي دهد به ثبت مي رساند. به اين ترتيب هر بسته كه از روتر به مقصد اينترنت خارج مي شود دقيقا در هنگام بازگشت به همان آدرس Invalid كه صادر كننده آن است باز مي گردد. هر يك خط در جدول مذكور يك كانكشن به حساب مي آيد. اگر دقت كنيد بر روي كاتالوگ بعضي سخت افزارها محدوديتي براي تعداد اين كانكشن ها قائل مي شوند.
در مثال زير نحوه تنظيم يك روتر به صورت Overload را توضيح مي دهيم :
دياگرام خود را مقداري تغيير مي دهيم. در اين مثال ما روتر خود را كه داراي 3 اينترفيس است به 3 شبكه متصل مي كنيم. پورت سريال كه به اينترنت متصل و داراي آدرس 80.191.120.8/26 است . اينترفيس ethernet0 به شبكه داخلي اول ما متصل و داراي آدرس 172.16.100.1/24 ميباشد و در آخر اينترفيس ethernet1 را داريم كه داراي آدرس 192.168.30.1/24 است.
مي خواهيم آدرس 80.191.120.8 را به دو subnet داخلي NAT كنيم:
وارد مد كانفيگ مي شويم
config terminal
يك pool براي آدرس Valid تهيه مي كنيم كه تنها 1 آدرس در آن وجود دارد
ip nat pool ovrld 80.191.120.8 80.191.120.8 netmask 255.255.255.192
با access-list زير آدرس هاي دو رنج داخلي خود را به access-list شماره 3 نسبت مي دهيم
access-list 3 permit 172.16.100.0 0.0.0.255
access-list 3 permit 192.168.30.0 0.0.0.255
دستور اصلي NAT را مي نويسيم كه كلمه Overload مي بايست در آخر آن اضافه شود
ip nat inside source list 3 pool ovrld overload
اينترفيس خروجي NAT را مشخص مي كنيم
interface serial0
ip nat outside
exit
اين اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
interface ethernet0
ip nat inside
exit
ip nat inside
exit
اين اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
interface ethernet1
ip nat inside
exit
ip nat inside
exit
هم اكنون آدرس 80.191.120.8 عمل NAT را براي هر دو سابنت ما انجام مي دهد.
Destination NAT
dstNAT يا outside source address translation بدين معني است كه ما عمل NAT را براي شبكه Public خود انجام دهيم. با يك مثال قضيه را روشن ميكنم:
فرض كنيد آدرس IP يكي از مشتركين شما NAT شده است. يعني مشترك به صورت دستي آدرس را در كامپيوتر خود وارد كرده و default gateway را آدرس اينترفيس داخلي روتر شما قرار داره است. شما قبلا عمل NAT را براي وي انجام داده ايد و او را به اينترنت متصل نموده ايد. حال مشترك نياز دارد كه كاربري در اينترنت به كامپيوترش وصل شود يا اينكه قصد هاست كردن يك وبسايت بر روي كامپيوتر حود را دارد. با شرايط فعلي اين امر امكان پذير نيست زيرا كه آدرس معتبري ير روي آن تنظيم نشده و از اينترنت قابل رويت نيست.ما براي رفع مشكل اين يوزر مي بايست عمل dstNAT را انجام دهيم. يعني به روتر خود بگوئيم هر گاه پكتي با درخواست اتصال به آدرس X را داشت آن را به كامپيوتري در شبكه داخلي با آدرس Y بفرست. بدين ترتيب با داشتن آن آدرس valid ميتوانيم به هاست لوكال خود دسترسي پيدا كنيم. اين امر نيز به دو صورت static و dynamic قابل اجراست كه در مثالهاي زير توضيح داده شده است.
Static dstNAT
ابتدا همانند قبل يك static nat ميان 2 آدرس 10.1.1.1 و 11.11.11.254 ايجاد مي كنيم سپس اين خط را به تنظيمات خود اضافه ميكنيم
ip nat outside source static 11.11.11.254 10.1.1.1
Dynamic dstNAT
در اين مثال نيز ابتدا تمامي تنظيمات Dynamic NAT را كه قبلا گفته شده انجام مي دهيم سپس اين خط را به آخر آن اضافه مي كنيم
ip nat outside source list 8 pool pool1
بدين ترتيب عمل reverse را نيز براي NAT خود انجام مي دهيم.
Redirect in NAT
در بعضي مواقع نياز داريم كه يك پورت يا IP را به صورت transparent براي يوزرهاي خود عوض كنيم. به عنوان مثال ما در شبكه خود يك وب سرور داريم. اين سرور قبلا بر روي پورت 80 كار كرده است اما اكنون به دلايلي مجبور به تعويض پورت آن به 8080 شده ايم. ممكن است آگاه سازي يوزرهاي ما برايمان مشكل ساز باشد و بخواهيم بدون هيچ تغييري براي آنها اين پورت را عوض كنيم. در چنين مواقعي Redirect به كمك ما مي شتابد.
در مثال زير با چگونگي تنظيمات اين نوع NAT آشنا مي شويم:
در اين مثال ما يك روتر سيسكو داريم كه 2 اينترفيس سريال و اترنت دارد. كه آدرس سريال را 100.100.100.5 و آدرس اترنت را 10.20.30.1 قرار داده ايم.
آدرس وب سرور ما 10.20.30.55 مي باشد كه در شبكه داخلي ما قرار دارد.
براي Redirect كردن پورت 80 به 8080 بدين صورت عمل ميكنيم:
config terminal
ip nat inside source static tcp 10.20.30.55 8080 10.20.30.55 80
اينترفيس خروجي NAT را مشخص مي كنيم
interface serial0
ip nat outside
exit
ip nat outside
exit
اين اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
interface ethernet0
ip nat inside
exit
ip nat inside
exit
حال يك سولوشن ديگر پياده مي كنيم.
در شبكه ما يك روتر وجود دارد كه داراي 3 اينترفيس است. اينترفيس سريال كه آدرس 200.200.200.43 و اينترفيس ethernet0 كه آدرس 172.16.10.1 و اينترفيس ethernet1 كه آدرس 192.168.0.1 را داراست.
ما در شبكه اي كه به اينترفيس ethernet1 متصل شده يك سرور داريم كه آدرس آن 192.168.0.6 است. به دلايلي مجبور به تعويض آدرس آن به 192.168.0.12 شده ايم. به دليل اينكه اين سرور مربوط به اتوماسيون اداري ما بوده بسيار كار دشواريست كه بر روي 176 كلاينت خود كه با اين سرور كار ميكنند و در شبكه اي كه به اينترفيس ethernet0 وصل است آدرس سرور را عوض كنيم.
براي همين به سراغ روتر قدرتمند خود مي آئيم و تمامي درخواستهايي را كه به مقصد 192.168.0.6 مي روند را به 192.168.0.12 هدايت ميكنيم.
در زير نحوه انجام اين كار توضيح داده شده است.
config terminal
ip nat inside source static 192.168.0.12 192.168.0.6
ip nat inside source static 192.168.0.12 192.168.0.6
اينترفيس خروجي NAT را مشخص مي كنيم
interface serial0
ip nat outside
exit
ip nat outside
exit
اين اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
interface ethernet0
ip nat inside
exit
ip nat inside
exit
اين اينترفيس را به عنوان ورودي NAT مشخص مي كنيم
interface ethernet1
ip nat inside
exit
Change Translation Timeouts
ip nat inside
exit
Change Translation Timeouts
وقتي كه ما از Dynamic NAT استفاده مي كنيم يك IP به يك IP ديگر نسبت داده مي شود. فرضا اگر كلاينت ما 1 ساعت از اين IP استفاده كند تا يك مدت بعد اين IP خارجي براي وي به صورت رزرو مي ماند. اگر بعد از يك پريود زماني كلاينت ما از آن استفاده نكند به كلاينت ديگري اختصاص داده مي شود.
زمان اين تاخير را ميتوانيم مشخص كنيم كه در حالت Dynamic NAT بدون Overload اين زمان به صورت پيش فرض 24 ساعت است.
با دستور زير اين امر محقق مي شود:
config terminal
ip nat translation timeout 21600
ip nat translation timeout 21600
عدد فوق بر اساس ثانيه بوده كه در مثال بالا ما اين زمان تاخير را بر روي 6 ساعت تنظيم كرده ايم.
همانطور كه گفتيم مثال بالا براي حالت Dynamic NAT بدون Overload هست. در حالت Overload چون براي هر يوزر يه آدرس خارجي نداريم مقدار اين زمان اصلا مشخص نيست.
در حالت Overload تنها ميتوانيم زمان براي پروتكلهاي خاص مشخص كنيم:
در مثال زير پروتكلها آورده شده اند:
config terminal
ip nat translation udp-timeout 120
ip nat translation dns-timeout 100
ip nat translation tcp-timeout 480
exit
ip nat translation udp-timeout 120
ip nat translation dns-timeout 100
ip nat translation tcp-timeout 480
exit
مانيتور كردن NAT درون Router
show ip nat translations
show ip nat statistics
*با تشكر از وب سايت cisco.parsfa.com بابت اين مقاله خوب و كامل