ترجمه آدرس ها یا Address Translation در ابتدا به دو منظور مورد استفاده قرار می گرفت. یکی جبران کمبود آدرسهای IP و دیگری مخفی سازی پیکربندی کلی شبکه یا Scheme. به دلیل رشد فزاینده اینترنت در اوایل دهه 90، قابل پیش بینی بود که سیستم آدرس دهی موجود برای تخصیص آدرسهای عمومی یا public کافی به تمامی دستگاههای متصل به شبکه اینترنت با مشکل مواجه خواهد شد.سرانجام راه حل جامعی برای این مشکل پیشنهاد و تائید گردید که به نام IPV6 خوانده می شود، که در مقالات قبلی خود به شرح آن پرداختم. اما مشکلی که در این بین وجود دارد این است که هنوز برای تبدیل شدن IPv6 به عنوان یک استاندارد عمومی در محیط
اینترنت زمان باقی است و حتی ISPها به عنوان یکی از اجزای ستون فقرات شبکه و بسیاری از شرکت های بزرگ هنوز از IPv4 استفاده می نمایند.یکی از دلایل مهمی که باعث ماندگاری IPv4 شده است، دو خصوصیت عمده آن می باشد: استفاده از آدرسهای خصوصی در شبکه های LAN یا Private address و دیگری قابلیت تبدیل این آدرس ها به آدرسهای عمومی یا public در محیط اینترنت.
استاندراد RFC 1918 که توسط سازمان IETF ایجاد شده است برای حل مشکل کمبود آدرسهای IP تعدادی فضای آدرس دهی را تعیین کرده است که شرکت ها می توانند از آنها برای آدرس دهی دستگاههای داخلی خود استفاده نمایند. جدول زیر لیست این آدرس ها را که به نام آدرسهای خصوصی یا Private address نیز خوانده می شوند نشان می دهد. همانطوریکه شما هم در این جدول می بینید، تعداد 1 کلاس A و 16کلاس B و 256 کلاس C را می توان به کار برد که فقط یک کلاس آدرس A ارائه شده، یعنی 10.0.0.0 تعداد 17 میلیون آدرس IP در اختیار شما قرار می دهد؛ یعنی خیلی بیشتر از مقداری که لازم دارید. یکی از مشخصاتی که آدرسهای فوق دارند این است که فقط می تونید از آنها در داخل شبکه خود استفاده نمایید. یعنی نمی توان از آن آدرسها در هنگام اتصال به اینترنت استفاده کرد. برای همین هم این آدرسها را به نام آدرسهای خصوصی یا Private address می نامیم. اگر دستگاهها اطلاعاتی را با آدرسهای خصوصی (private) به اینترنت، مثلا به ISP بفرستند، این اطلاعات یا فیلتر شده و یا اینکه ISP نمی تواند عمل مسیریابی را در مورد این ترافیک ها انجام دهد. بنابراین این عمل باعث ایجاد مشکلات عدم دسترسی خواهد شد.
استاندارد دوم، RFC 1631، برای حل این مشکل ایجاد گردید. به وسیله این استاندارد می توان عمل ترجمه آدرسهای داخل بسته ها را به آدرسهای دیگر انجام داد که به نام NATنیز نامیده می شود.برای اینکه دستگاههای شما قادر به ارسال اطلاعات به محیط اینترنت باشند باید از آدرسهای عمومی یا public به عنوان آدرس منبع استفاده کنند. به وسیله سیستم ترجمه آدرسها یا Address translation عمل تبدیل آدرسهای داخلی شبکه به آدرسهای عمومی یا public قبل از ارسال اطلاعات به محیط اینترنت انجام می شود.
استاندراد RFC 1631 لزوما عمل ترجمه آدرسهای خصوصی یا Private را به آدرسهای عمومی یا public انجام نمی دهد و ما توانایی استفاده از آدرسهای عمومی را نیز داریم که باز این آدرسها در هنگام اتصال به محیط اینترنت به آدرسهای عمومی دیگر ترجمه خواهند شد. مزیتی که این کار دارد آنست که پیکربندی کلی شبکه را از دید کاربران بیرونی شبکه مخفی نگه داشته می شود. زیرا کاربران بیرونی، آدرسهای IP واقعی مربوط به دستگاه های درونی شبکه را نخواهند دید و در عوض آدرسی را مشاهده خواهند کرد که توسط ISP به شبکه ما تخصیص یافته است. به طور کلی دلایلی را که می توان برای استفاده از سیستم آدرسها یا Address Translation مطرح نمود به شکل زیرند :
- به خاطر کمبود آدرسهای عمومی یا public که ISP در اختیار ما قرار داده است، مجبور به استفاده از آدرسهای خصوصی یا Private هستیم.
- آدرسهای بکار رفته در داخل شبکه ما از نوع آدرسهای عمومی بوده، اما به دلیل تغییر ISP، آدرسهای ما توسط آن شرکت پشتیبانی نمی شوند.
- دو کمپانی با آدرسهای یکسان در یکدیگر ادغام شده اند که این شرایط باعث به وجود آمدن مشکلات عدم دسترسی خواهد شد.
- یک آدرس یکسان به چند دستگاه بطور همزمان تخصیص داده ایم و کاربرانی که به این آدرس متصل می گردند، چند ماشین موجود را به صورت یک ماشین خواهند دید.
انواع سیستم ترجمه آدرس ها یا Address Translation
انواع مختلفی جود دارد که شامل موارد زیر است :
- NAT
- PAT
- ترجمه آدرسها به صورت دینامیک
- ترجمه آدرسها به صورت استاتیک
NAT یا Network Address Translation
NAT عمل ترجمه یک آدرس IP به آدرسی دیگر را انجام می دهد. آدرس مربوطه می تواند هم آدرس گیرنده و هم آدرس فرستنده باشد. همچنین NAT نیز به دو نوع می تواند انجام گیرد: استاتیک و دینامیک
NAT استاتیک یا Static NAT
در این نوع، عمل ترجمه آدرس از یک آدرس به دیگری به صورت دستی در روی دستگاه مربوطه تنظیم می شود. عموما NAT استاتیک عمل ترجمه آدرسهای گیرنده موجود در داخل بسته هایی که وارد شبکه می شوند را انجام خواهد داد.اما می توان آدرسهای فرستنده را نیز به وسیله آن ترجمه نمود.شکل زیر مثال ساده ای را نشان می دهد که کاربران خارجی می خواهند به یک سرور داخلی شبکه دسترسی داشته باشند. اما این سرور دارای یک آدرس از نوع آدرسهای خصوصی یا Private به صورت 10.0.0.1 است. این مسئله کاربران خاری را دچار مشکل می نماید. زیرا که اگر آدرس 10.0.0.1 را به عنوان آدرس گیرنده پیام در داخل بسته های ارسالی قرار دهند، روترهای میانی، پیام فوق را فیلتر خواهند نمود. بنابراین کاربران بیرونی قادر به برقراری تماس با سرور داخلی شبکه نخواهند بود.بتابراین باید آدرس دهی سرور را طوری انجام دهیم که از دید کاربران خارجی، این سرور دارای یک آدرس public یا عمومی باشد. این وظیفه فوق را دستگاه مسئول که در اینجا یک دستگاه روتر سیسکو می باشد انجام خواهد داد.
سرور داخلی موجود در شبکه دارای آدرس 200.200.200.1 می باشد که یک آدرس Inside Global (آدرس عمومی یا public اختصاص یافته به یک دستگاه موجود در شبکه داخلی) بوده و همین آدرس توسط سرور DNS به کاربران خارجی نمایش داده می شود. وقتی کاربران خارجی اطلاعاتی را با آدرس گیرنده 200.200.20.1 به شبکه داخلی می فرستند، روتر با دریافت این پیام آدرس گیرنده پیام را بررسی کرده و در داخل جدولی که حاوی آدرسهای ترجمه شده می باشد دنبال یک آدرس متناظر با آن می گردد. در این مثال معادل آدرس 200.200.200.1 را آدرس 10.1.1.1 تشکیل می دهد. در مرحله بعدی، روتر آدرس گیرنده پیام را از 200.200.200.1 به آدرس 10.1.1.1 تغیر داده و سپس پیام را به سوی سرور ارسال می کند. اما در صورتیکه هیچ متناظری برای آدرس در داخل جدول یافت نشود، روتر مقصد پیام را تشخیص نخواهد داد. همچنین اگر سرور داخلی قصد ارسال اطلاعاتی را به اینترنت داشته باشد، ادرس فرستنده پیام که یک آدرس خصوصی یا Private می باشد توسط روتر به یک آدرس عمومی یا Public ترجمه شده و سپس به محیط اینترنت فرستاده می شود.
NAT دینامیک یا Dynamic NAT
اگر در شبکه ای از NAT استاتیک استفاده می کنیم، باید به صورت دستی جدول حاوی آدرسهای دستگاهها و نیز آدرسهای متناظر آنها را نیز ایجاد نمائیم.اگر برای مثال شبکه ما دارای 1000 عدد دستگاه باشد برای هر یک از این دستگاهها باید به طور جداگانه آدرسهای متناظر را در داخل جدول ایجاد نمموده که مار زیادی را می طلبد. معمولا این نوع NAT هنگامیکه که کاربران خارجی می خواهند به دستگاههای داخلی اتصال داشته باشند به کار می رود. اما عموما وقتی که کاربران داخلی اقدام به دسترسی به محیط اینترنت می کنند، از نوع دینامیک بهره می بریم.در این شرایط آدرس IP کاربران داخلی برای کاربران خارجی اهمیت خاصی ندارد. زیرا آنها مستقیما با دستگاههای داخلی در تماس نبوده و فقط ترافیکی را به شبکه داخلی ارسال می کنند که کاربران داخلی آن را درخواست کرده باشند.
در NAT دینامیک، دو دسته از آدرسها را باید به صورت دستی مشخص نمائیم. یک دسته را برای مشخص کردن دستگاههایی که از NAT استفاده خواهند کرد و دیگری تعیین کردن آدرسهایی است که آدرسهای داخلی به آن آدرسها ترجمه واهند شد. هنگامیکه یک دستگاه داخلی ترافیکی را به محیط بیرونی از طریق یک دستگاه روتر ارسال می کند، روتر آدرس فرستنده پیام را با لیست آدرسهای Inside Local (آدرس private تخصیص یافته به دستگاه موجود در شبکه داخلی) خود مقایسه کرده و در صورتیکه مشابه آن را یافت، ادرس متناظری را از بین آدرسهای Inside Global خود که به دستگاههای دیگر اختصاص نداده، انتخاب کرده و سپس پیام را به کاربران خارجی ارسال خواهد کرد. اما در صورتیکه آدرس مشابه آدرس فرستنده در داخل جدول Inside global وجود داشت، این پیام ترجمه نشده و به صورت دست نخورده به محیط اینترنت ارسال خواهد شد. به همین ترتیب هنگامیکه ترافیکی از بیرون وراد شبکه داخلی می شود، روتر آدرس گیرنده را بررسی کرده و دوباره به دنبال یافتن آدرس متناظری برای آن می گردد تا آدرس گیرنده موجود در داخل پیام رسیده را که یک آدرس عمومی یا Public می باشد، به یک آدرس خصوصی یا Private ترجمه نماید. در واقع در این شرایط عمل ترجمه آدرس Inside global به آدرس Inside Local انجام می شود.
PAT یا Port Address Translation
یکی از محدودیتهای موجود در NAT این است که در این سیستم عمل تبدیل یک آدرس به یک آدرس دیگر انجام می شود. بنابراین اگر در شبکه ای تعداد 5000 دستگاه داشته باشیم که هرکدام دارای یک آدرس خصوصی یا Private مخصوص به خود باشند، باید 5000 عدد آدرس عمومی یا Public نیز در اختیار داشته باشیم تا همه دستگاههای داخلی در صورتیکه بخواهند همزمان به اینترنت متصل گردند، آدرس کافی برای ترجمه آدرسهای آنها وجود داشته باشد.اما اگر فقط 1000 عدد آدرس عمومی در اختیار داشته باشیم، فقط 1000 دستگاه اول قادر به دسترسی به اینترنت بوده و 4000 دستگاه باقی مانده توانایی اینکار را نخواهند داشت. در این مواقع از پروسه ای به نام Address Overloading برای حل این مشکل استفاده می گردد که شامل مباحث PAT و NPAT می شوند. در صورت کمبود آدرسهای عمومی یا Public که در اختیار ما قرار گرفته است، می توان با استفاده از PAT همین آدرس را به دستگاههای مختلف شبکه بطور همزمان اختصاص داد. بدین صورت که یک آدرس عمومی یا Public را در جدول Network Translation معادل تمامی دستگاههای شبکه (که دارای آدرسهای خصوصی مخصوص به خود هستند) قرار می دهیم؛ با این تفاوت که هر یک از آنها از شماره پورت جداگانه ای استفاده خواهند کرد.اگر دو دستگاه دارای شماره پورت فرستنده یکسانی باشند، روتر شماره یکی از آنها را بطور اتوماتیک تغییر خواهد داد.
به طور کلی جدول Translation حاوی موارد زیر می باشد:
- آدرس inside local (آدرس خصوصی یا private مربوط به دستگاه داخلی)
- شماره پورت inside local (شماره پورت مربوط به دستگاه داخلی)
- آدرس inside global (یک آدرس عمومی یا public که آدرس خصوصی دستگاه داخلی به آن ترجمه می شود.)
- شماره پورت inside global (شماره پورت آدرس جدید)
- آدرس outside global (آدرس عمومی مربوط به گیرنده پیام)
- شماره پورت outside global (شماره پورت مربوط به گیرنده پیام)
یکی از مزایایی که NAT نسبت به PAT دارد این است که NAT را می توان با بسیاری از پروتکل های IP بکار برد. اما از آنجائیکه فقط پروتکلهای TCP/UDP از شماره پورت استفاده می کنند، PAT فقط با این دو پروتکل سازگار می باشد. اما بسیاری از تولیدکنندگان، مثل سیسکو، کاربرد PAT در ICMP را نیز گسترش داده اند.برای درک بهتر عملکرد PAT به مثال زیر توجه نمائید.در این مثال دو دستگاه کامپیوتر یک ارتباط Telnet را بطور همزمان با دستگاه 199.199.199.1 برقرار کرده اند و هر دو نیز از شماره 11000 به عنوان شماره پورت فرستنده استفاده نموده اند. وقتی که دستگاه روتر این دو ارتباط را دریافت می کند، در صورتیکه وظیفه ترجمه آدرسها را بطریق PAT داشته باشد،روتر آدرس دستگاه اول را به آدرس 200.200.200.7 ترجمه می کند. شماره پورت دستگاه A نیز به دلیل اینکه تا به حال تداخلی با هیچ دستگاهی پیدا نکرده است به همان صورت اولیه نگه داشته می شود. اما هنگامیکه کامپیوتر B ارتباط telnet خود را با دستگاهی برقرار می کند و از آنجائیکه از شماره پورتی استفاده می کند که دستگاه A از آن برای ایجاد ارتباط telnet دیگر استفاده کرده بود و حالا در داخل translation وجود دارد، روتر، شماره پورت B را از 11000 به 11001 تغیر می دهد. بنابراین وقتی که دستگاه بیرونی بخواهد ترافیکی را بین این دو کامپیوتر ارسال نماید، روتر می تواند بین این دو ارتباط تمایز قائل شده و عمل ترجمه بین آدرسها را با توجه به آدرسها و شماره های پورت مربوط به کامپیوتر A و B بطور صحیح انجام دهد. به دلیل اینکه شماره پورت به صورت 16 بیتی در پیامهای TCP/UDP بین می گردد،بطور تئوریکی می توان تعداد 65536 عدد آدرس را به وسیله فقط یک آدرس عمومی و با شماره های پورت متفاوت آدرس دهی نمود. اکا در عمل اینکار مقدور نبوده و ما فقط قادر به آدرس دهی 4000 دستگاه با این روش می باشیم. در ضمن به یاد داشته باشید که مجبور به استفاده از یک نوع خاص از سیستم ترجمه آدرسها نبوده و می توانید مثلا برای دسترسی کاربران به خارج از سیستم NAT استاتیک و برای ارتباطات خارج به داخل از سیستم PAT استفاده نمائید.
مزایای استفاده از سیستم ترجمه آدرسها یا Address Translation
همانطور که گفته شد، به وسیله این سیستم می توان علاوه بر اینکه پیکربندی کل شبکه داخلی را از دید کاربران خارجی مخفی نگه داشت، میتوان تعداد زیادی از آدرسها را نیز برای آدرس دهی شبکه داخلی مورد استفاده قرار داده و در صورتی که حتی قصد اتصال به اینترنت را داشته باشیم بدون اعمال هیچ تغیری از همین سیستم آدرس دهی استفاده کرد. این همه تغیرات را می توان فقط در روی دستگاه ترجمه کننده، که در اینجا روتر می باشد، انجام داد. این خصوصیت باعث آسانتر شدن مدیریت شبکه خواهد شد.یکی دیگر از مزایای این سیستم این است که می توان بر روی تمامی ترافیک های ورودی به شبکه و خروجی از آن کنترل کاملی را اعمال نمود. از آنجائیکه در هنگام دسترسی به اینترنت همه ترافیک LAN از طریق یک دستگاه، یعنی روتر، صورت می گیرد، برای همین هم می توان استراتژی های امنیتی را هرچه بیشتر و بهتر مدیریت کرد.
معایب استفاده از سیستم ترجمه آدرسها یا NAT Translation
با وجود مزایای این سیستم، یکسری معایب هم در این بین وجود دارد که سه عیب مهم آن :
- ایجاد تاخیر در برقراری هر ارتباط
- مشکل تر شدن عیب یابی شبکه
- پشتیبانی نکردن تمامی نرم افزارها از این سیستم
از آنجائیکه در هنگام ترجمه آدرسها، محتویات بسته ها و اکثرا قسمت Header تغییر می کند، بنابراین بار پردازش کلی دستگاه بالا رفته و دلیل تاخیر ایجاد شده در برقراری ارتباط نیز همین است. هرچقدر تعداد اتصال همزمان از طریق دستگاهی که عمل ترجمه آدرسها را انجام می دهد زیاد باشد، این تاخیر بیشتر خواهد شد. بنابراین انتخاب دستگاهی با ظرفیت کافی برای شبکه از اهمیت زیادی برخوردار است.اما در هنگام بروز اشکال در برقراری ارتباط عیب یابی، شناسایی منبغ و مقصد یک ارتباط مشکل می باشد. یعنی ما مجبور به وروذ به دستگاه روتر و مشاهده جدول Translation هستیم و مخصوصا در مواقعی مه عمل ترجمه آدرسها در چند لایه صورت گرفته باشد، کار بسیار مشکل تر خواهد شد. مشکل بعدی نیز در زمینه مسایل امنیتی شبکه بروز می کند. اگر به یاد داشته باشید گفتیم که می توان پیکربندی کلی شبکه را از دید کاربران خارجی مخفی نمود. همین مسئله از جهتی دیگر باعث بروز مشکل می گردد. زیرا هکرهای بیرونی با مخفی کردن آدرس خود از دید کاربران داخلی می توانند اقدام به خرابکاری نمایند.
مشکل بعدی موجود این است که برخی از نرم افزارها را نمی توان با وجود این سیستم در شبکه بکار برد. برای مثال برخی برنامه ها، آدرسهای IP و بقیه اطلاعات را در داخل خود پیام جایگذاری می کند و برخی دیگر در قسمت سر یا Header آن. این مسئله باعث بروز مشکل در در دستگاه ترجمه کننده آدرسها یعنی روتر، می شود. زیرا هنگام اینکار فقط قسمت سر یا header بررسی می شود و نه دیگر محتویات پیام. برنامه های مولتی مدیا و NetBIOS از برنامه هایی هستند که اطلاعات را در قسمت داخلی پیام یا payload قرار می دهند.
دستگاههای برخی از کمپانی های سازنده تجهیزات شبکه، مثل سیسکو، که عمل ترجمه آدرسها را انجام می دهند توانایی شناسایی این نوع ترافیکها را داشته و عکس العمل خاصی را در مورد آنها از خود نشان می دهند. مثلا روترهای سیسکو و PIX firewall پروسه ای را برای تشخیص و انجام عمل ترجمه آدرسها در مورد پیامهای NetBIOS و مولتی مدیا پشتیبانی می نمایند. اما در صورتیکه دستگاه ما از این خصوصیت استفاده نمی کند، باید خصوصیت ترجمه آدرسها را در روی آن دستگاه غیرفعال سازیم. در آموزش راه اندازی NAT و PAT در روترهای سیسکو و آموزش تنظیمات NAT در میکروتیک به نحوه پیکربندی NAT و PAT خواهم پرداخت.
موفق باشید