Rasul khalighi

فناوری اطلاعات دانشگاه جامع علمی کاربردی مهاباد

Rasul khalighi

فناوری اطلاعات دانشگاه جامع علمی کاربردی مهاباد

NAT چیست و چگونه پیاده سازی میشود

 NAT یا Network Address Translation

تا حالا با ICS کار کردین ؟! اگه کردین که کارتون اینجا خیلی راحته ! ولی اگه نمیدونین که چطوری به صورت پایه ایی اینترنت رو در سیستم عاملهای ویندوز برای بقیه ی کامپیوترها به اشتراک بگذارین، بد نیست که یه نگاه کوچولو  (اینقده !) به مقاله ی قبلی www.CyberLone.com با نام "چگونگی به اشتراک گذاری اینترنت به کمک Port Forwarding + ICS " بندازین تا وقتی که این مقاله رو میخونین درک درستی از چگونگی کارکرد NAT هم بتونین به دست بیارین... اگه نکردین هم که کلاتون پس معرکه ست !

این مقاله به سه قسمت اصلی تقسیم میشه :

1.    توضیحات کلی و اصلی در مورد NAT و انواع آن
2.    چگونگی پیاده سازی عملی NAT در سیستم عاملهای Windows Server
3.    موضوعات متفرقه
NAT Network Address Translation Diagram


قسمت اول : توضیحات کلی و اصلی در مورد NAT و انواع آن

دیدم بد نیست که دوباره اشاره ی کوچیکی به مقوله ایی که دارم درباره ش مینویسم داشته باشم :

ما برای اشتراک گذاری دسترسی به اینترنت به صورت کلی میتونیم از سه راهکار در سیستم عاملهای ویندوز استفاده کنیم که به ترتیب پیچیدگی عبارتند از :

ICS : نیم کیلومتر مقاله با عکس براش نوشتم! اگه اول اونو بخونین به دردتون میخوره...اگه نخوندینشم به... استغفرالله !

NAT : موضوع مقاله ی فعلی...کمی بالاتر از سطح ICS...قابل اجرا فقط در سیستم عاملهای Server و نه Client... موضوعی بسیار فراگیر که در یک و یا چند مقاله نمیگنجد و برای درک کاملش باید حسابی اینترنت رو بالا پایین کنین... باحال و شیرین... 20 ساله... عاشق پیتزا و گذروندن اوقات فراغت در بیرون از خونه... اهل گوشکوب آباد... یه شوهر رومانتیک دوست داره که هر شب بتونه باهاش کازابلانکا نگاه کنه... از فیلمای عشقی و غمگین خوشش میاد و عاشق دوست پسرهایی هست که براش عطر و هدیه میخرن و برای احساساتش ارزش زیادی قائلن!

Proxy : چی داداش ؟! اینم همینجا بگم ؟! اونوقت تکلیف مقاله بعدیه چی میشه ؟! هان ؟! فقط اینطوری تو کف بمونین که این جمله های "دارم از پروکسی استفاده میکنم!" که کلاس هم دارن (!) و اینکه اصلا Proxy چه کوفتی هست و چطوری میشه پیاده سازیش کرد تو مقاله ی بعدی بهش اشاره میشه...پس تا اونموقع برین حسابی روی ICS و NAT کار کنین که یه دفعه دیدین وقتی Proxy Server رو میخونین، شوخی شوخی هیچی بارتون نمیشه (مثل خودم !)

بعد از توضیح موارد بالا، تازه بعد از یک مقاله ی کامل یاد من اسکل افتاده که اصلا توضیح ندادم که ما چرا باید از Internet Connection Sharing استفاده کنیم ! شوخی شوخی چه گندی بالا اومد ! هیـــــــــس ! صداش رو در نیارین !
حالا ما چرا باید از Internet Connection Sharing استفاده کنیم ؟! یه توضیح کوچولو و خلاصه میدم :

کامپیوترها برای اینکه بتونن در دنیای اینترنت حضور داشته باشن باید دارای یک آدرس IP که ثبت شده هستش و بهش Public IP میگن باشن...مشکل همینجاست ! این آدرسها کم هستن !
در حال حاضر نزدیک به 95 درصد کامپیوترها و سرورهای جهان بر اساس پروتکل IPv4 آدرس دهی شده ن که به صورت فرضی و تئوری میتونه به 2 به توان 32 تا کامپیوتر آدرس بده که میشه تقریبا 4,294,967,296 تا کامپیوتر ! ولی به صورت عملی این آدرس الان بین 3,2 میلیون و 3,3 میلیون تا رو بیشتر نمیتونه آدرس دهی کنه و بقیه شون برای مواردی همچون Multicast , ARPANET Research و صد البته Private IP Addresses هستن.
همین باعث میشه که ما مجبور بشیم مثل امسال که سال اصلاح الگوی مصرف هستش، به صرفه جویی در مصرف تعداد IP ها اختصاص داده شده روی بیاریم و نتونیم کیلویی به هر ننه قمری که میرسیم یک IP بدیم.
پس در این موارد تکلیف اون کامپیوترهایی که نمیتونن Public IP داشته باشن چیه ؟! یکی از راه حلها اینه که میتونن برن و از IPv6 استفاده کنن که اینقدر بازه ی آدرسش گنده هستش که میتونه به تمامی موجودات زنده ی کره ی خاکیمون آدرس بده و باز هم کم نیاره !

و یکی از دیگر راه حلها اینه که برای دسترسی به اینترنت از تکنولوژیهای Internet Connection Sharing استفاده کنن !
NAT هم یکی از این تکنولوژیهاست که توسط شرکت Cisco برای اولین بار برای Router هاش پیاده سازی شده ولی الان حتی سیستم عاملها و پلتفرمهای نرم افزاری هم میتونن اینکار رو انجام بدن.

خب ! برمیگردیم سر موضوع شیرین NAT...گفتم شیرین یاد کلوچه فندقی افتادم ! تا حالا خوردین ؟! بعضی وقتا مزه ش یه کمی گس میشه ولی وقتی که بهش عادت کنین دیگه ترکوندین ! مخصوصا خیلی خوبه برای معده ی کسایی که مثل خودم اسیدش میتونه پیت حلبی آب کنه چه برسه به اینکه کلوچه فندقی باشه ! بعدشم یادتون نره که اون حفره ی روی صورتتون رو با مسواک حسابی تمیز کنین ! کلوچه فندقی حسابی لای دندونا گیر میکنه...

خوب بود ؟! ذهنتون یه کم آروم شد ؟! حالا میتونین تمرکز کنین ؟! خوبه ! خوبه ! ادامه میدیم :

ما یاد گرفتیم که ICS خوب چیزیه ! نه تنها میتونه اینترنت رو برای ما Share کنه بلکه میتونه Port Forwarding رو در سطوح ابتدایی هم پیاده سازی کنه که بدین معنی هستش که ما با یه ICS ساده میتونیم یه Data Center کوچولو توی خونه مون هم راه بندازیم !
پس چرا باید بیخیال ICS بشیم و بریم دنبال چیزای یه کم پیچیده تری مثل NAT، اونم روی سیستم عاملهای Server که خیلیا ندارنش ؟!

اینجاست که اولین خط بین کاربر Client و Admin یک شبکه کشیده میشه : NAT مثل ICS نیست که هر ننه قمری بتونه با یه Windows XP توی شبکه ی خانگی و یا حتی شرکتیش پیاده ش کنه. NAT قسمت کوچکی از سرویس خفن بازاری به نام Routing & Remote Access در سیستم عاملهای Server هستش که وظایف مختلفی از جمله RAS Server , NAT , Gateway 2 Gateway Implementation و صد البته Routing  رو بر عهده داره.
توضیح در مورد تک تک سرویسهای بالا که نام بردم برای مقاله های بعدی چرا که تمرکز ما در این مقاله فقط بر روی سرویس NAT موجود در RRAS هستش.

حتما این سوال براتون پیش اومده که NAT چه چیزهایی رو داره که ICS نمیتونه ارائه بده ؟! اینم یه جواب خلاصه :

•    ما از  مقاله ی قبلی یادمون مونده که ICS فقط در بازه ی 192.168.0.1 میتونه آدرس دهی کنه و آدرسها رو قبول بکنه و با توجه به اینکه Subnet Mask این بازه ی آدرس کلاس C برابر هستش با 255.255.255.0 براحتی نتیجه میگیریم که ICS قدرت آدرس دهی در یک بازه ی 254 تایی رو بیشتر نداره.در سناریوهایی که ما میخوایم به تعداد زیادی از کامپیوترها اینترنت بدیم، ICS به درد لای جرز هم نمیخوره و این غیر قابل انعطاف بودنش گند میزنه به آبرو و حیثیتش !

•    ICS رو میتونیم روی سیستم عاملهای Client هم اجرا کنیم در حالیکه NAT فقط باید بر روی سیستم عاملهای Windows Server اجرا بشه و غالبا این سرویس (NAT) برای پیاده سازی توسط Admin های شبکه مورد استفاده قرار میگیره و میتونه در سطوح Enterprise هم به خوبی فعالیت کنه.

•    NAT میتونه هر آدرس دهی دلخواهی که ما براش در نظر میگیریم رو پیاده سازی کنه و برخلاف ICS فقط محدود به یک بازه ی 254 تایی نیست.

•    شما میتونین روی NAT یک سری Route های Static و یا حتی Routing Protocol های Dynamic پیاده سازی کنین که نه تنها ارتباط کلاینتهای شما رو با اینترنت حفظ میکنه بلکه به کاربرانتون اجازه میده که به کمک این روتر جدید بتونن به Subnet های دیگر شبکه که NetID یکسانی با اونها ندارند هم وصل بشن.

•    در NAT شما قادر به پیاده سازی Packet Filtering و همچنین Stateful Firewall هستین و بدین ترتیب میتونین بسیاری از دسترسیها رو بر اساس IP و پورتهایی که مشخص میکنید بلوکه کرده و ترافیک رو یه طورایی فیلتر کنین !

•    عمل Port Forwarding اینبار برخلاف ICS محدود نیست و اگر میخواهید پورتی را Forward کنید که در لیست NAT موجود نیست، میتونین به راحتی این پورت رو به همراه یه توضیح درست و حسابی به لیست مربوطه اضافه کنین.

•    به کمک سیستم Address Pooling میتونین NAT رو بین سه حالت Static , Dynamic و Masquerading تغییر بدین (توضیح میدم چیه ! گیر ندین فعلا !)

•    و یک سری چیز خرده ریز دیگه که من نمیدونم و باید خودتون دنبالش بگردین و تازه بعدشم به من حتما بگین (این زکات علمتون میشه !)
بعد از این توضیح مختصر میرسیم به توضیح اینکه چند نوع NAT داریم. اصولا سه نوع NAT به طور کلی وجود داره ولی بعضی سایتا و مقاله نویسها میان و بعضی وقتا اینا رو با هم تلفیق میکنن و یه نوع جدید ازش به وجود میارن که عملا نوع جدیدی محسوب نمیشه بلکه یه کلون دورگه از قبلیا هستش !

من هم به پیروی از اکثر منابع تعداد NAT رو سه تا ذکر میکنم :

1.   Static NAT : در اینحالت انگار نه انگار که من دو صفحه مطلب نوشتم که "بابا جون! IP ها کم هستن!  باید صرفه جویی کرد !" و اینحالت عملا تفی هست تو صورت بنده ! ولی مجبوریم که بگیم چیه دیگه !
اینحالت که بعضیا دوست دارن بهش Address Pooling هم بگن (درسته ! از Pool به عنوان فعل استفاده کرده ! مثل Car Pooling !) برای زمانهایی به درد میخوره که شما یه سری آدرس Public IP دارین ولی نمیخواین که برین روی هر کامپیوتر شبکه تون یکی از اینا رو قرار بدین و میخواین اینا به صورت اتوماتیک به روی کامپیوترهایی که میخوان به کمک NAT Router شما به اینترنت وصل بشن اختصاص داده بشن.
در اینحالت مثلا شما یک بازه ی 5 تایی آدرس ثبت شده دارین و 5 تا کامپیوتر هم درون شبکه تون دارین. میاین و توی یک لیست هر کدوم از این 5 تا آدرس رو به 5 تا کامپیوتری که در شبکه دارین اختصاص میدین، بعدش هر وقت اینا بخوان با آدرس ثبت نشده و Private شون به اینترنت وصل بشن، NAT Router اون آدرس ثبت شده رو بهشون اختصاص میده و درخواستهاشون رو به شبکه میسپره !

یکی دیگه از موارد استفاده ی Static NAT برای اوقاتی هست که شما یک سری کامپیوتر دارین که میخواین نه تنها با یک آدرس همیشگی به اینترنت وصل بشن، بلکه میخواین بقیه هم از اینترنت بتونن با این آدرس همیشگی به کامپیوترتون وصل بشن.

مورد مصرف بعدی اینه که شما 5 تا کامپیوتر دارین و روی هر کدوم از این 5 کامپیوتر فقط یک کارت شبکه دارین و به اون کارت شبکه نیاز دارین تا اون کامپیوترها بتونن با شبکه ی داخلیشون ارتباط برقرار کنن (یعنی آدرس IP شون باید در سطح آدرسهای Private شبکه باشه) و به همین دلیل شما نتونین اون 5 تا آدرس Public رو به صورت دستی به هر کدوم از اونها اختصاص بدین. در اینحالت با تنظیم NAT و Address Pool مربوطه ش کاری میکنیم که این کامپیوترها در شبکه ی داخلیشون همیشه بتونن با Private IP شون ارتباط برقرار کنن و به هنگام دسترسی به اینترنت هم یک Public IP براشون Translate بشه.
حالا این عکسه که این پایینه رو یه نگاه بندازین تا هر چی خوندین مثل هلو سر بخوره بره پایین !

Static NAT



2.    Dynamic NAT : این یکی بهتر از Static NAT و در عین حال بدتر از اونه! در Dynamic NAT شما بچه مایه نیستین و نمیتونین برای هر کدوم از کامپیوترهای شبکه تون یه Public IP بگیرین و پولتون مثلا برای خریدن دو تا Public IP کافی هست در صورتیکه شبکه ی شما مثلا 5 تا کامپیوتر داره. در اینحالت وقتی کسی به اینترنت وصل میشه، NAT Router میاد و اولین آدرس Public یی که دم دست داره رو برمیداره و به اون کامپیوتر اختصاص میده و بعدش هم همینطور ادامه پیدا میکنه.

ولی چی میشه وقتی که مثلا دو تا Public IP بیشتر ندارین و دو تا کامپیوتر هم با اونها به اینترنت وصل هستن و حالا سومی هم هوس کرده Facebook درپیتش رو چک کنه تا ببینه چند تا دختر (یا پسر !) اکانتش رو چک کردن ؟! حالا NAT Router میاد و میبینه که هر دو تا آدرسهاش اشغال هستند و شرمنده ی اخلاق ورزشکاری طرف میشه و یک Error Message باقلوا برای یارو میفرسته که "هوی حاجی ! الان نمیتونی وصل شی ! خط اشغاله !"
این عکسه هم که پایینه یه نگاهی بندازین تا دقیقا بگیرین که چی دارم اینجا مینالم :

 

Dynamic NAT

3.    Masquerading NAT : یه سری پارتیهایی در گذشته (و حتی امروز) در اروپا بودن که بهشون میگفتن "Masquerade Party". در این پارتیها هر کسی که حضور پیدا میکرد باید یک ماسک میداشت که در تمام مدت بر روی صورتش قرار میداد و بدین ترتیب به صورت یک شخص ناشناس در این مهمانی حضور پیدا میکرد. برای اطلاع عمومی هم بگم که این نوع پارتی در طول زمان دچار تغییرات مختلفی شده که یه نوعش رو در فیلم Eyes Wide Shut و یا حتی شبهای برره هم میبینیم ! در اینجا منظور از Masquerading همون ناشناخته بودن و ناشناس موندن هستش.

برگردیم به درس ! تکنیک Masquerading الان و در حال حاضر بهترین و بهینه ترین نوع NAT هستش که در اغلب شبکه ها مورد استفاده قرار میگیره. الان شما به اینترنت وصل هستین و دارین این مطلب رو روی سایت www.CyberLone.com و یا فروم iLearn.ir میخونین دیگه ؟! احتمال بسیار بالایی هست (بیشتر از 90 درصد !) که شما الان به کمک تکنیک Masquerading قادر به ارتباط با اینترنت هستین ! دیدین چقدر مهمه ! پس حسابی حواستون رو جمع کنین !

در این تکنیک ما فقط یک Public IP داریم ولی میتونیم هر چقدر کامپیوتر که در شبکه مون داریم رو به اینترنت وصل کنیم ! البته این  "هر چقدر" یی که گفتم واقعا هر چقدر نیست و عددش با توجه به تعداد پورتهای آزاد یک کامپیوتر مشخص میشه (توضیح میدم چرا پورت در اینجا دخیله ! دندون روی جیگر فشار بدین !)

الان این سواله تو ذهنتون حک شده که "آخه چطوری ؟!" پس خوب بخونین :

•    کامپیوتر Client درخواستش رو Generate میکنه و سپس بر روی یک Port که به صورت اتفاقی و شانسی باز کرده، این درخواست رو به NAT Router ارسال میکنه.

•    NAT Router این درخواست رو دریافت میکنه و سپس چک میکنه و میبینه که قادر به انجام تکنیک  Masquerading هستش.

•    NAT Router میاد و با ایجاد یک جدول، نام پورتی که Client به طور شانسی باز کرده بود رو درون اون قرار میده و خودش درخواست Client رو یا با اون پورت اولی و تنها Public IP ارسال میکنه و یا اینکه یه پورت جدید خودش باز میکنه و این پورت جدید اتفاقی خودش رو کنار پورت اتفاقی که Client اول کار باز کرد درون جدولش قرار میده تا یادش بمونه که کدوم پورت برای کیه !

•    حالا درخواست ارسال میشه و جوابش بالاخره باید به همون پورت ارسالی خود NAT Router برگرده.

•    وقتی که جوابش برمیگرده، NAT Router جدولش رو چک میکنه و میبینه که این درخواست که با این پورت برگشته برای کامپیوتر مثلا A هستش و سپس این درخواست رو به کامپیوتر A ارسال میکنه.

تکنیک ذکر شده در بالا به کمک یکی از پروتکلهای زیر مجموعه ی TCP/IP انجام میشه و MultiPlexing نام دارد که اجازه میدهد یک کامپیوتر با یک آدرس مشخص چندین ارتباط جداگانه با یک سیستم راه دور بر اساس پورتهای UDP و یا TCP برقرار کند. نمونه ی مشخصش رو هم مطمئنا توی Download Accelerator ها دیدین که یه دفعه میبینین 16 تا Connection به طور همزمان برای دریافت فایلی که میخواستین ایجاد شده و داره دهن جناب Web Server طرف مقابل رو سرویس میکنه !

بدین ترتیب NAT Router با اختصاص دادن پورتها به Client ها و سپس فرستادن درخواستهای همه ی کاربران با یک IP ثابت و یک پورت متفاوت (که هر کدوم مختص به یک Client هستش) میتونه فقط با یک آدرس به تمامی کاربران اینترنت بده. بد نیست اشاره کنم که به این تکنیک PAT و یا Port Address Translation هم میگن که اشاره به استفاده ی همه جانبه از پورتها داره.

اینم عکسش که نگاه کنین و اگه چیزی از زرت و پرت های من حالیتون نشد، شاید این عکسه بتونه کمکی بکنه :

Masquerading NAT

 

حالا هستش که متوجه میشین چرا من اینقده تاکید داشتم که مطلب ICS رو اول بخونین و بعدش بیاین سراغ NAT. همونطور که مطمئنا تا حالا متوجه شدین، ICS دقیقا با تکنیک Masquerading اقدام به ارسال درخواستهای ما به کمک یک IP Address میکنه و تفاوتش در ساختار ساده ش و سیستم آدرس دهی محدودش هستش.

اگر بخوایم دیاگرامی از پیاده سازی NAT در شبکه ارائه بدیم، احتمالا دیاگرامش باید چیزی شبیه به اینی که من پایین قرارش میدم باشه : (اینم مثل هلو قورتش بدین !)

NAT Network Address Translation Diagram

قسمت دوم : چگونگی پیاده سازی عملی NAT در سیستم عاملهای Windows Server

بعد از این همه تلاش خستگی ناپذیر به قسمت عملی داستان رسیدیم. از اونایی که تا اینجاش با من بودن متشکرم و اونایی که وسط راه ول کردن و رفتن هم به درک اسفل السافلین ! اونایی هم که اصلا از اولش با ما نبودن به... استغفرالله !
پس تا اینجاش موندین تا ببینین چطور میشه این سرویس پرکاربرد رو راه اندازی کرد ؟ سرویسی که اکثر ISP های موجود ازش بهره میبرن تا بتونن به کاربرانشون اینترنت بدن...

قبل از اینکه طرز پیاده سازی عملی NAT نرم افزاری مایکروسافت رو توضیح بدم باید اشاره کنم که ما در پیاده سازیهای عملی به دو مقوله برمیخوریم : سخت افزار یا نرم افزار ؟!

میشه با اطمینان خوبی گفت که پیاده سازیهای سخت افزاری چه به کمک مودمهای ADSL و چه به کمک Router ها و Access Point ها بسیار بهینه تر و پرکاربردتر از پیاده سازیهای نرم افزاری هستش که یکی از عللش این هست که در پیاده سازیهای نرم افزاری، پلتفرم ما مجبوره که بسته های  اطلاعاتی رو تا لایه ی هفتم برای Inspection بالا بیاره و سپس اقدام به Route کردن اون بکنه در حالیکه سرویس NAT یک سرویس لایه ی Network (لایه ی سوم) هستش که اگر یک Router سخت افزاری داشته باشیم میتونه بسته ها رو فقط تا سه تا لایه بالا بیاره و سپس اونها رو هدایت کنه که بالطبعش بسیار پر سرعت تر و کم هزینه تر هستش.

در مورد برتریهای سخت افزاری به نرم افزاری میشه مقالات چند صفحه ایی نوشت که فعلا در حوصله ی این مقاله نمیگنجه و اگه بخوام زیاد کشش بدم بروبکس میریزن صورت مورت ما رو تغییر حالت میدن پس تا همینجاش رو قبول داشته باشین !
خب ! سوال اینجاست که "پس اصلا چرا پیاده سازی نرم افزاری ؟!"

و جواب اینجاست که "هوی ! بچه مایه ! همه ی ما به مایه داری بابای تو نیستیم که پول Router خریدن داشته باشیم ! ولی همه ی ما میتونیم 500 تا تک تومنی بدیم و یه Windows Server 2003 Enterprise Edition بخریم !"

البته این رو هم بگم که جمله ی بالا در کشورهای جهان سومی مثل ایران خودمون که قانون Copyright توش از فضله ی کبوتر هم بی ارزش تر هستش صدق میکنه !

مزه پرونی بیمزه دیگه بسه و میریم سراغ مراحل پیاده سازی نرم افزاری NAT در Windows Server 2003

1.    از داخل Start Menu به منوی Administrative Tools برین و بعدش روی گزینه ی Routing & Remote Access کلیک کنین تا داخل کنسول RRAS بشین.


2.    بر روی گزینه ایی که نام سرورتون رو در بر داره کلیک راست کرده و سپس گزینه ی Configure & Enable Routing & Remote Access رو انتخاب کنین.



3.    از بین گزینه های مختلف منو، گزینه ی Network Address Translation رو انتخاب کنین.


4.    در این قسمت باید Adapter یی رو که به اینترنت وصل هستش و قراره ازش اینترنت بگیرین رو انتخاب کنین. همونطوری که در عکس میبینین من دو تا Adapter با نامهای Public (اونی که به اینترنت وصل میشه) و Private (اونی که منو به شبکه ی داخلیم متصل کرده) دارم که طبیعتا باید Public رو انتخاب کنم. گزینه ی بعدی برای به وجود آوردن Demand Dial Interface هستش که به درد وقتی میخوره که شما با مودم به اینترنت وصل میشین و هر وقت هر کی خواست به اینترنت وصل بشه، این تنظیم باعث بشه که سیستم به طور خودکار شروع به شماره گیری ISP  بکنه. در گزینه ی  بعدی هم میتونیم Enable Security رو روشن بکنیم که باعث میشه که NAT Server ما تبدیل به یک Stateful Firewall هم بشه که توضیح میدم چه کوفتیه !


5.    اگر شما بیش از دو کارت شبکه داشته باشین، در صفحه ی بعد باید کارت شبکه ایی که میخواین سرور شما اینترنت رو از طریق اون به اشتراک بگذاره رو مشخص کنین ولی اگر فقط دو کارت شبکه دارین در صفحه ی بعد باید مشخص کنین که وظایف آدرس دهی و تحلیل نام رو چه کسی باید بر عهده بگیره.

پیشنهاد میکنم که یک DNS Server و DHCP Server روی شبکه تون داشته باشین. این دیگه ICS نیست که کشکی کشکی بخواین همه چیز رو جلو ببرین و هیچکی هم چیزی بهتون نگه ! ولی اگه خدا نکرده دو تا سرور بالا رو نداشتین، دو گزینه دارین که در بالاییه میتونین NAT Server تون رو تبدیل به یک DHCP Allocator و DNS Proxy کنین (در مورد دو موردی که نام بردم به طور کامل در مقاله ی قبلی با موضوع ICS توضیح دادم و اینجا دیگه حسش نیست !) و یا با انتخاب گزینه ی پایینی، انتخاب سیستم آدرس دهی و تحلیل نام رو به بعد موکول کنین.


6.    حالا سیستم آدرس دهی به شما نشون میده که بر اساس تنظیمات شبکه تون چه بازه ی آدرسی رو براتون در نظر گرفته. در اینجا چون Private Adapter من در بازه ی 192.168.1.x آدرس داشت، خود NAT هم میفهمه و سیستم آدرس دهی رو برابر 192.168.1.x قرار میده.


7.    همه چی به پایان رسید ! الان اگر روی کامپیوترهای شبکه تون Default Gateway رو برابر آدرس NAT Server قرار بدین، همه چی درست میشه ! با تموم شدن Wizard میبینین که منوی سمت راست کنسول تغییر کرده. اینجا تمرکز ما فقط روی گزینه ی NAT/Basic Firewall هستش و بقیه ی گزینه ها برای Routing و یا Remote Access هستند که فعلا مد نظر ما نیستند.


8.    حالا میرسیم به تنظیمات دیگر NAT. برای اینکار بعد از کلیک بر روی گزینه ی NAT/Basic Firewall کارت شبکه ایی رو که شما رو به اینترنت وصل میکنه انتخاب کنین.


9.    قسمت تنظیمات از چهار Tab اصلی تشکیل شده. در تب اول نوع Interface مشخص میشه که "آیا این کارت برای شبکه ی داخلی است ؟! یا اینکه این کارت همان کارت شبکه ایی است که ما را به اینترنت وصل میکند ؟!" و میبینیم که Wizard یی که انجام دادیم خودش اغلب این تنظیمات رو انجام داده. در گزینه ی Enable NAT on this Interface میبینیم که همه ی مقوله ی NAT در این گزینه معنی میشود ! و سپس به گزینه ی Enable Basic Firewall میرسیم که در قسمت سوم این متن درباره ش توضیح میدم. شما همچنین میتونین که Static Packet Filtering هم اعمال کنین که کار سختی نیست و بر اساس پورتها صورت میگیره و اگه یه نگاه سریع هم بهش بندازین متوجهش میشین.


10.    در تب بعدی به Address Pool میرسیم. اگر چندین Public IP دارین و میخواین که وقتی یک کامپیوتر به NAT Server وصل میشه به جای Private IP درپیتش یک Public IP توپ بگیره (فقط برای اتصالات اینترنتی) از این تب استفاده میکنین. این تب پیاده سازی عملی تکنیک Static NAT هستش. اولش باید با دکمه ی Add یک بازه ی آدرس Public IP که براتون Register شده هم هستند رو در Pool (استخر) یی که دارین ذکر کنین و بعدش با زدن روی دکمه ی Reservation اقدام به ذکر IP کامپیوترهایی که میخواین از این آدرسهای ثبت شده استفاده کنن، میکنین.


11.    در این قسمت جدید با کلیک دوباره بر روی Add باید آدرسی رو که میخواین رزرو کنین و آدرس کامپیوتر داخلی تون رو وارد کنین. با زدن Allow Incoming Sessions to this Address شما میتونین جلوی Stateful Firewall خود NAT رو برای پس زدن درخواستهایی که به این Public IP میان بگیرین و بدین ترتیب یه طورایی انگار کامپیوتر درون شبکه ی داخلیتون رو واقعا بر روی اینترنت Publish کردین و در عین حال از  Port Forwarding هم استفاده نکردین.


12.    به تب بعدی سفر میکنیم و به مقوله ایی آشنا میخوریم : Port Forwarding ! من در مورد مقوله ی Port Forwarding به طور خلاصه ولی جامع در مقاله ی قبلیم با نام "به اشتراک گذاری اینترنت – ICS" توضیح دادم و دیگه اینجا دوباره نمیارمش.
با زدن بر روی هر کدام از سرویسهای فوق و یا زدن دکمه ی Edit صفحه ی جدیدی باز میشه که درش باید آدرس کامپیوتری رو که میخواین درخواستهای مثلا پورت 80 بهش Forward بشه رو ذکر کنین. اگر هم Address Pool یی دارین میتونین اون رو به سرور مورد نظرتون اختصاص بدین.


13.    به عکس شماره ی 11 یه نگاه دوباره بندازین ! دکمه ی Add رو میبینین ؟! ممکنه شما پورتی رو بخواین Forward کنین که در لیست بالا موجود نیست (مثل پورتهای 67 و 68 برای پروتکلهای DHCP و Boot Strap). در اینحالت شما میتونین پورتهای دلخواهتون رو خودتون اضافه کنین ! با زدن روی دکمه ی Add وارد صفحه ایی میشین که باید پورت جدیدی رو اضافه کنین.
همونطور که میبینین من خودم پورت 67 مربوط به DHCP و BOOTP رو اضافه کردم که از نوع UDP هستش و سپس آدرس کامپیوتری رو که میخوام درخواستهای مربوط به پورت 67 بهش Forward بشه رو ذکر کردم (احتمالا این کامپیوتر یا DHCP Server هست یا BOOTP Server). برای امتحان شما هم پورت 68 رو به پورتهای فوق اضافه کنین که یک پورت Outgoing باید باشه و مربوط به DHCP Client و BOOTP Client میشه.


14.    در تب بعدی ما به پروتکل ICMP میرسیم که برای خودش عجایبی هستش ! ICMP تنها پروتکلی هستش که پورت نداره و نمیتونیم با اعمالی مثل Port Forwarding اونرو از یک کامپیوتر به دیگری Forward بکنیم و همچنین نمیشه در Firewall ها جلوش رو گرفت و یا اینکه ترافیکش رو باز کرد و علت حضور این تب در اینجا هم همینه : اینکه بتونین تنظیمات ICMP مثل Ping رو برای NAT دستکاری کنین.
اگر بخواین NAT Server تون رو Ping کنین، نمیتونین مگر اینکه بیاین و در تب ICMP تیک مربوط به گزینه ی Incoming Echo Request رو بزنین تا سرور بتونه به درخواستهای Ping جواب بده. بقیه ی گزینه ها رو هم خودتون کشف کنین که من نمیدونم ! وقتی فهمیدین هم حتما به من بگینشون !

قسمت سوم : موضوعات متفرقه

قبل از هر چیز به اونایی که زبون انگلیسی شون خوبه پیشنهاد میکنم که یه سری به RFC 1631 بزنن (روی گوگل Search ش کنین تا سریع پیداش کنین) که این توضیح توسط خود IETF نوشته شده و کاملتر و جامعتر از هر مقاله ایی هست که کسی بتونه بنویسه و تقریبا بهش میشه مرجع NAT گفت... برین و حالشو ببرین !

بعد هم میرسیم به موضوع Firewall در NAT : اگر از کنار تقسیم بندیهای عجیب و غریب Firewall ها در دنیای امروز بگذریم میتونیم بگیم که ما در کل سه نوع فایروال داریم :

1.    Packet Filtering Firewall : این نوع فایروال، اطلاعات رو در سطح بسته ها (Data Link Layer) فیلتر میکنه بدین معنی که میتونه بر اساس IP و Port اطلاعات رو بازبینی کنه و جلوی اونها رو بگیره و یا اینکه به اونها اجازه ی رد شدن بده. مثلا ما آدرس IP شبکه ایی رو داریم که نمیخوایم به وب سرور ما دسترسی داشته باشند و بهمین دلیل میایم و آدرس IP اون شبکه رو در داخل Firewall مون ذکر میکنیم تا هر وقتی که به ما وصل شدن، Firewall جلوشون رو بگیره.

مثال اینکار هم یه گروه هکر بودش که چند وقت پیش یه سایتی رو هک کرد (سایته هم برای یک گروه امنیتی بودش) و بعدش هر کی از ایران میخواست بره و سایت این گروه هکره رو ببینه متوجه میشد که اونا به دلیل خاصی کاری کردن که ایرانیها نتونن به سایتشون وصل بشن ! این یه طورایی مثل پاک کردن صورت مسئله برای من به نظر میرسید برای اینکه اگر گروه هکری اینقده خوف هستش که ادعای شاخی میکنه، دیگه نباید از ترس دیگر گروههای هکری که در ایران هستند آدرسهای مربوط به ایران رو فیلتر کنه ! بیشتر هم انتقاد نمیکنم برای اینکه همین سایت من نماد ضعف و آسیب پذیری امنیتی هستش و فقط اینو کم داره که یه هکر بیاد و زیر و روش کنه !


2.    Stateful Firewall : این نوع فایروالها اجازه ی برقراری ارتباط رو به اطلاعاتی میدن که قبلا از درون شبکه ی داخلی درخواستی براشون ارسال شده باشه. بذارین مثل  پروژکتور روشنتون کنم : اگر شما بیاین و از درون شبکه ی داخلیتون یه درخواست برای صفحه ی اول سایت www.CyberLone.com بفرستین، چون این درخواست از طرف شما ارسال شده، فایروال مورد نظر نه تنها اجازه ی عبور بهش میده بلکه وقتی جوابش هم برگشت چونکه میدونه این جواب برای درخواستی داخلی بوده، بهش اجازه ی عبور میده.

ولی اگه یه دفعه www.CyberLone.com به سرش زد و کشکی کشکی بدون اینکه درخواستی براش اومده باشه، شروع به فرستادن جواب به کلاینتی در شبکه ی داخلی بکنه، Stateful Firewall داستان ما جلوش رو میگیره ! چرا ؟! برای اینکه برای بسته ی اطلاعاتی که زرتی دریافت کرده، هیچ درخواستی از داخل ارسال نشده و این حالت مثل یک حمله ی امنیتی هستش که باید جلوش گرفته بشه.
مثال برای Stateful Firewall ها همون Windows Firewall خودمون هستش که از Windows XP Service Pack 2 کاراییش شروع به بهتر شدن کرد و در Windows Vista هم حضور یکپارچه ش رو اعلام کرده ! یه مثال دیگه میخواین ؟!
NAT ! در واقع اون Basic Firewall یی که زرت و زرت ازش در بالا نام بردم، یک Stateful Firewall هستش که میتونه یک سری از حملات امنیتی رو شناسایی کنه و در برابرشون مقاومت و پایداری از خودش نشون بده !

3.    Application Layer Firewall : فایروالهای سگ خفن و آخر کار که میتونه تا درون بسته های اطلاعاتی شما رو باز کنه و تک تک جمله های عاشقانه ایی که توی Chat یا Email به دوست دخترتون نوشتین رو بخونه و اگر توش زر زر سیاسی کرده باشین ثبت کنه و بعدا مامور بفرسته دم در خونه ! حالا از شوخی گذشته، این نوع فایروال میتونه درون بسته های اطلاعاتی رو بخونه و از این طریق اونها رو فیلتر کنه. مثلا اگر در Email تون کلمه ایی نوشته باشین که در لیست سیاه این فایروال باشه، نه تنها میتونه جلوی اونرو بگیره بلکه میتونه از این Email آماری هم ارائه بده. از طرفی این نوع فایروال میتونه جلوی انواع و اقسام نرم افزارهای اینترنتی (نه همه شون رو ! حتی این نوعش هم نمیتونه اینکار رو بکنه !) رو بگیره و دسترسی به سایتها رو بر اساس نوع نام سایت، محتواش، لیست سیاهی که داره و راههای دیگر محدود کنه.
در واقع همین فایروالها هستند که پدر سرعت اینترنت و خود اینترنت رو در ایران در آوردن !
شایعترین مثالی هم که دم دستم دارم Microsoft Internet Security & Acceleration و یا همون ISA Server هستش که واقعا چیز خوفی محسوب میشه !

حالا که این مقاله رو خوب خوندین و حفظ کردین و یا حتی به صورت عملی پیاده ش کردین، فکر نکنین که NAT دیگه بهترین چیز دنیاست ! این سرویس دارای نقاط قوت و ضعف مخصوص به خودش هست.

از جمله ی اونها میشه به این اشاره کرد که این سرویس نمیتونه با IPSec کنار بیاد ! چرا ؟! IPSec با به رمز در آوردن Header های بسته های اطلاعاتی Integrity اونها رو حفظ میکنه در حالیکه NAT برای اینکه بتونه از تکنیک Masquerading ش استفاده بکنه، مجبور هست که Header ها رو مطابق تنظیمات خودش دستکاری بکنه و از اونجاییکه با اینکار Header ها به هم میریزن و NAT هم نمیتونه اونها رو به طور درست تغییر بده، بسته ها به محض رسیدن به دست طرف مقابل Discard میشن.

برای درست کردن این مشکل از سرویس NAT Traversal استفاده میشه که توضیح در موردش یک مقاله ی دیگه رو میطلبه و فقط اینو نوشتم تا شما خر خونها و خوره های شبکه برین دنبالش و خودتون قبل از اینکه من بگم از توی Wikipedia و هر سایت دیگه ایی بکشینش بیرون !
از طرفی سیستم فایروال NAT با وجود اینکه Stateful هستش ولی باز هم میشه با استفاده از زرنگ بازیهایی اونرو پیچوند که مثال بارزش طرز پیاده سازی نرم افزار Skype هستش که به کمک پروتکل UDP و یک سرور میتونه ارتباطات دو طرفه و Peer-To-Peer ایجاد کنه. و این نرم افزار در حالی اینکار رو انجام میده که NAT Server اجازه نمیده کسی از بیرون بتونه بدون درخواست داخلی به کامپیوتری وصل بشه ! پس Skype که مثل تماس گرفتن با تلفن عمل میکنه چطور موفق به انجام اینکار میشه ؟!

اگر خدا خواست و اگر یادم موند، این تکنیک موذیانه و در عین حال جالب رو براتون در مقاله ایی کوتاه خواهم نوشت، و اگر هم یادم رفت، خب یادم بندازین !

این هم پایانی بر مقوله ی ناپایان NAT. مطمئن باشین که NAT با مقاله های اینجوری هیچوقت به پایان نمیرسه و خودتون باید بلند بشین و برین دنبالش. یکی از دلایل اصلی به تاخیر افتادن فراگیر شدن IPv6 همین NAT هستش که اینقدر  تکنولوژی قابل اتکا و اعتمادی بوده که در طول چند سال اخیر تونسته درصد عظیمی از تکنیکهای به اشتراک گذاری اینترنت رو به خودش تخصیص بده که امری قابل توجه هستش.

هدف من از این مقاله، گردآوری مطالبی جامع و قابل درک از مقوله ی NAT بود بطوریکه نه تنها شما رو با ایده ها و تئوریهاش آشنا کنه بلکه چگونگی پیاده سازی عملی اونرو هم بتونه به شما نشون بده و این هدف CyberLone.com هستش که بتونه آموزش عملی رو با شناخت تئوری همراه کنه تا دانشجو بتونه یک موضوع رو کامل درک کنه.

امیدوارم که مقاله ی فوق بهتون حسابی حال داده باشه و شما رو برای مقاله های بعدی آماده کنه.

این یکی یک روز کامل رو برای گردآوری اطلاعات، نوشتن اونها، گرفتن Screenshot از صفحه و قرار دادن اونها در کنار متن از من گرفت ! موندم برای Proxy Server باید چه خاکی تو سرم کنم !

 

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد