منبع اصلی نوشتار زیر در این لینک قرار دارد

آشنایی و پیکربندی NAT در لینوکس – بخش نخست

به دلیل کمبود آدرس های Valid یا Public IP Address ها، نیاز به استفاده از NAT برای دسترسی (اشتراک) به اینترنت از کلاینت های (Host های) شبکه خصوصی می باشد. NAT مخفف Network Address Translation و برای ترجمه یک آدرس به آدرس دیگر است. NAT بعنوان واسطه میان ماشین های شبکه خصوصی (شبکه LAN یا شبکه درون سازمانی) و اینترنت قرار دارد و آدرس های یک یا چند کامپیوتر شبکه خصوصی را به آدرس Valid یا Public IP Address ترجمه می کند. منظور از آدرس های خصوصی آدرس های مورد استفاده در شبکه های درون سازمانی که Invalid IP Address گویند و آدرس های عمومی یا Valid IP Address آن آدرس هایی هستند که بر روی اینترنت شناخته شده (Route شده) هستند و باید آنها را از ISP ها خریداری کرد. در اصل به دلیل اینکه آدرس های خصوصی بر روی اینترنت قابل Route شدن نیستند و آدرس های عمومی کافی هم در دسترس نیستند، از NAT برای انتقال درخواست های شبکه خصوصی به اینترنت استفاده می شود.

همانطور که در شکل بالا مشخص است، کلاینت های Internal Network درخواست های خود را به Linux Router فرستاده و Linux Router آنرا به اینترنت ارسال می کند و سپس جواب را از اینترنت دریافت و آنرا به کلاینت های خصوصی تحویل می دهد. درباره NAT سرور (در کل مطلب های پیش رو منظور از Linux Router همان NAT Server است) موارد زیر :

  • Linux Router یا همان NAT Server دارای دو کارت شبکه که یکی متصل به شبکه خصوصی است (در شکل بالا eth0 به آدرس 192.168.1.1) و دیگری متصل به اینترنت که دارای آدرس عمومی (در شکل بالا eth1 به آدرس عمومی 1.1.1.1) است.
  • شکبه های محلی دارای محدوده آدرس های خصوصی به بطور مثال محدوده شبکه 192.168.1.0/24 هستند. آدرس Gateway آنها، آدرس اینترفیس ماشین LAN که به شبکه داخلی متصل است، می باشد. در شکل بالا آدرس Gateway تمامی کلاینت ها 192.168.1.1 می باشد. برای تنظیم آدرس های استاتیک در توزیع Redhat و توزیع های مبتنی بر آن این مطلب و تنظیم آدرس استاتیک در ابونتو/دبیان این مطلب را بخوانید).

اما ترجمه آدرس ها، چگونه توسط NAT انجام می شود؟

Linux Router باید بداند که کدام بسته ها (Packet ها) ها برای خودش و کدامیک برای کلاینت های شبکه داخلی هستند. نیاز است اطلاعات بسته ها در Linux Router برای بعد نگهداری شوند. Linux Router برای نگهداری اطلاعات و بسته های هر یک از اتصال های TCP/IP از یک جدول استفاده می کند و فرایند نگهداری اطلاعات را Connection Tracking گویند. Connection Tracking به لینوکس (Linux Router) این قابلیت و توانایی را می دهد که اطلاعات وضعیتی از اتصال های TCP و UDP را در یک جدول در حافظه (Memory Table) نگهداری می کند. با استفاده از Connection Tracking ماشین NAT اگر بسته ای از آدرس 192.168.1.3 درخواست صفحه وبی را کرد، اطلاعات را نگه می دارد و پس از دریافت پایخ از اینترنت، با جستجو در آن جدول، پاسخ را به کلاینت درخواست کننده می فرستد.

گونه های پیاده سازی NAT

دو گونه اصلی وجود دارد، یکی SNAT که مخفف Source NAT و دیگری DNAT که مخفف Destination NAT هستند. SNAT یعنی تنها آدرس های خصوصی (شبکه داخلی سازمان) قادر به ارسال درخواست هستند (منظور ارسال درخواست به اینترنت توسط NAT) و از اینترنت نمی توان به ماشین های داخلی دسترسی داشت و DNAT عکس عملکرد SNAT است و NAT به گونه ای تنظیم می شود که تنها از روی اینترنت می توان به ماشین های داخلی درخواست بفرستند  (به واسطه NAT و واگذاری درخواست ها به NAT و دریافت پاسخ ها توسط آن، از کلاینت های شبکه داخلی) و از شبکه داخلی نمی توان به اینترنت درخواست فرستاد. گونه دیگری که می توان گفت، Full NAT یا Cone NAT است که در Linux Route هر دو گونه یعنی SNAT و DNAT پیاده سازی می شوند.

SNAT or Source NAT

از این رو SNAT می گویند چونکه در این حالت تنها آدرس های مبدا ترجمه می شوند. در این حالت یک یا چند آدرس خصوصی را به یک یا چند آدرس عمومی ترجمه می شود تا به اینترنت دستیابی پیدا کنند، اما اگر درخواستی از اینترنت به NAT برسد، این درخواست ها توسط NAT، از بین خواهند رفت (DROP) خواهند شد. اینگونه تصور کنید که ماشینی با آدرس 192.168.1.3 می خواهد صفحه وبی را از اینترنت ببیند، پس درخواست خود را ( یک بسته IP شامل آدرس های مبدا و مقصد، پورت های مبدا و مقصد) را به NAT می فرستد، NAT درخواست را به اینترنت می دهد (توسط اینترفیس خودش که توسط آدرس عمومی 1.1.1.1 دارد به اینترنت می دهد) و اطلاعات را نگه می دارد. پس از اینکه پاسخ از اینترنت به Linux Router آمد، NAT اطلاعات را نگاه می کند و آنرا با Header بسته آمده مطلبقت می دهد و می فهمد که بسته پاسخ آمده متعلق به آدرس 192.168.1.3 است.

اگر یک یا چند Host پشت NAT تنها به یک آدرس عمومی ترجمه شوند، این فرایند را Static SNAT گویند و اگر آنها به چندین (محدوده ای از) آدرس های عمومی ترجمه شوند، اینر فرایند را Dynamic SNAT گویند. در مورد Dynamic SNAT روتر NAT یک آدرس را از محدوده ای از آدرس ها انتخاب می کند، بنابراین یک کامپیوتر در دسترسی به اینترنت به احتمال زیاد به آدرس های عمومی مختلفی برای دسترسی به اینترنت ترجمه خواهد شد. برای Dynamic SNAT، دستور iptables کمترین آدرس استفاده شده را از محدوده تعیین شده انتخاب می کند. اگر برخی از آدرس های IP در محدوده، بطور کلی استفاده نشده باشند، iptables یکی از آنها را بطور تصادفی انتخاب می کند.

Masquerading یا MASQ به عینه همانند Static SNAT کار می کند، جز اینکه شما نمی توانید آدرس های IP عمومی را که می خواهید استفاده شوند را خودتان تعیین کنید، بلکه در حالت MASQ بطور خودکار از آدرس عمومی اینترفیس Outgoing از Linux Router مانند مودم ADSL متصل به آن استفاده می شود.

با توجه به شکل بالا، در ناحیه 1 یک درخواست وب از سمت ماشین 192.168.1.3 ایجاد می شود. در Header این بسته Source IP=192.168.1.3 و Destination IP=2.2.2 (آدرس Webpage روی اینترنت) می باشد. کلاینت دسترسی مستقیم به اینترنت ندارد، پس درخواستش را به NAT می دهد. طبق شکل بالا NAT درخواست را از کلاینت می گیرد. پس از دریاف چون خودش باید پاسخ را از وب بگیرد، پس آدرس مبدا (SRC IP) را 192.168.1.3 به آدرس عمومی خودش یعنی 1.1.1.1 تغییر می دهد و اطلاعات اتصال را ذخیره می کند. در پاسخ از سمت 2.2.2.2، یک بسته ایجاد می شود که آدرس مبدا آن 2.2.2.2 و آدرس مقصد 1.1.1.1 خواهد بود. بسته به NAT می رسد و در آن محتوای Header بسته با اطلاعات پیشین درون جدول Connection Track مطابقت داده می شود و در می یابد که بسته آمده متعلق به 192.168.1.3 است، پس آدرس مقصد از 1.1.1.1 به 192.168.1.3 تغییر می کند و سپس به ماشین 192.168.1.3 تحویل داده می شود. همانطور که مشاهده می کنید Header بسته تحویل داده شده به 192.168.1.3، دارای آدرس مبدا 2.2.2.2 و آدرس مقصد 192.168.1.3 هستند.

DNAT or Destination NAT

DNAT عکس SNAT است، یعنی آدرس عمومی را به یک آدرس خصوصی ترجمه می کند. یعنی اجازه ایجاد درخواست از روی اینترنت را بر روی ماشین های شبکه داخلی (آدرس های خصوصی) می دهد. بنابراین اگر SNAT یک آدرس خصوصی را به یک آدرس عمومی و DNAT همان آدرس عمومی را به همان آدرس خوصی همزمان ترجمه کند، به این حالت Full NAT گویند. DNAT معمولا زمانی استفاده می شود که شما سروری را پشت NAT در شبکه خصوصی داشته باشید (مانند وب سرور) بنابراین امکان دسترسی به وب سرور از روی اینترنت با ترجمه آدرس عمومی به آدرس خصوصی ممکن خواهد بود. این کار به این صورت انجام می شود که درخواست از روی اینترنت به آدرس عمومی NAT فرستاده می شود و سپس NAT درخواست را به شبکه خصوصی (ماشین و آدرس مورد نظر) می فرستد و خودش پاسخ را دریاف و به اینترنت می دهد. اگر ترجمه آدرس عمومی بسته به شماره پورت ها و پروتکل ها انجام شود، به این حالت Port Forwarding می گویند.

مطابق شکل بالا یک درخواست از روی اینترنت با SRC IP=2.2.2.2 و DST IP=1.1.1.1 ایجاد میشود و به سمت ماشین Linux Router می رود، در Linux Router آدرس مقصد یا DST IP از آدرس 1.1.1.1 به آدرس 192.168.1.3 (وب سرور محلی سازمان) تغییر می کند و اطلاع های اتصال ذخیره می شود. بسته پاسخ از سمت Linux Router در ماشین 192.168.1.3 بصورت SRC IP=192.168.1.3 و DST IP=2.2.2.2 ایجاد و به سمت Linux Router می رود. در Linux Router،اطلاع ها (Header) بسته آمده با اطلاع های ذخیره شده مطابقت داده می شود و معلوم می شود بسته متعلق به 2.2.2.2 است، پس SRC IP از آدرس 192.168.1.3 به 1.1.1.1 تغییر خواهد کرد و سپس به سمت 2.2.2.2 فرستاده می شود.

PAT or NAPT

PAT مخفف Port Address Translation است که همچنن با نام NPAT که مخفف Network Address and Port است، شناخته می شود. ایده PAT به اینصورت است که، به جز ترجمه آدرس عمومی به آدرس خصوصیف پورتی از روی اینترنت به پورتی بر روی شبکه داخلی (آدرس خصوصی و شماره پورت آن) ترجمه خواهد شد. فرض کنید سازمانی دارای یک وب سرور بر روی شبکه داخلی خود به آدرس 192.168.1.100 است. کاربران زمانی که در سازمان هستند به راحتی با نوشتن این آدرس یا نام دامنه ثبت شده برای آن در Local DNS سازمان و بصورت زیر به آن دسترسی پیدا می کنند

192.168.1.100

or

http://www.localwebserver_domainname.com

اما می خواهید کاربران از منزل به این وب سرور دسترسی داشته باشند. یک راهکار اینکه یک host و domain ثبت کنید. اما می خواهید که کاربران توسط NAT به خود وب سرور دسترسی دشاته باشند. نخستین کار اینکه برای امنیت بیشتر شماره پورت پیشفرض وب سرور را از 80 به شماره پورت آزاد دیگری بر روی شبکه سازمان مانند 2143 تغییر دهید. سپس یک NAT را طوری تنظیم کنید که درخواست ها برای آدرس خصوصی (وب سرور) را به همراه شماره پورت محلی وب سرور از اینترنت دریافت کند و عمل ترجمه را انجام دهد. اگر آدرس اینترفیس متصل به اینترنت NAT (آدرس عمومی) 1.1.1.1 باشد، پس کاربران از منزل باید آدرس زیر را در مررورگر خود بنویسند

1.1.1.1:2143

این کار باعث ترجمه آدرس عمومی و پورت از روی اینترنت به آدرس خصوصی و پورت بر روی شبکه داخلی می شود.



برچسب ها : , , , , , ,