معرفی NAT

هدف اولیه NAT بدین صورت تعریف شده است که کاربران داخلی سازمان با آدرس غیر اینترنتی صرفا با تعداد محدودی آدرس اینترنتی بتوانند با شبکه اینترنت ارتباط برقرار نمایند بدون اینکه مجبور به استفاده از آدرس های Public باشند. بدین صورت که کاربران شبکه از آدرس های محدوده اختصاصی برای ارتباطات داخلی خود استفاده می کنند و در صورتی که بخواهند با اینترنت ارتباط برقرار کنند، تعداد زیادی کاربر صرفا از یک یا چند آدرس محدود اینترنتی به صورت اشتراکی برای اتصال به اینترنت بهره می برند. بدین ترتیب محدودیت تعداد آدرس IPV4 از بین خواهد رفت.

امروزه NAT دیگر به همین یک کاربرد منتهی نمی شود و هدف آن نیز صرفا رفع محدودیت تعداد آدرس نیست. اینکه کاربران اینترنتی بتوانند با سرور سازمان، که آدرس غیر اینترنتی به آن تخصیص داده شده است، ارتباط برقرار نمایند از دیگر کاربردهای NAT است که هدف از قرار دادن آدرس غیر اینترنتی روی سرور ایجاد امنیت بیشتر برای سرور است. اینکه به کاربران و سرورها آدرس اینترنتی اختصاص داده نمی شود، بدین معنی است که از روی اینترنت دیده نخواهند شد و این یک مزیت امنیتی است.

Dynamic NAT

در Dynamic NAT هر بسته ای که از شبکه inside دریافت شود و آدرس مبدا آن در رنج شبکه inside باشد و مقصد آن باعث شود که در اینترفیس outside ارسال شود مبدا بسته به یک ip از pool تعریف شده تغییر می کند . برای هر ترجمه مبدا آدرس یک نشست جدید ایجاد می شود و state آن نگه داشته می شود بنابراین بسته هایی که از شبکه global دریافت می شوند در نشست مربوط به خود قرار گرفته و طبق آن ترجمه می شوند.

soodar(config)# ip nat pool PNAT44 A.B.C.D [ A.B.C.D ]

می توانید یک ip یا در صورت لزوم با استفاده از ip دوم ، یک رنج ip را به عنوان pool اضافه کنید نام رول اضافه شده هم در این مثال PNAT44 تنظیم شده است .

برای توضیح بهتر در مثال زیر یک نمونه Dynamic NAT را تنظیم می کنیم:

در شکل زیر دو کاربر مختلف با آدرس های غیر اینترنتی 192.168.1.10 و 192.168.10.20 قصد دارند به سروری که در اینترنت قرار دارد وصل شوند . با استفاده از Dynamic NAT در روتر سودار این ارتباط را فراهم می کنیم :‌

NAT

اینترفیس ge1 که در سمت public و اینترنت قرار دارد به عنوان outside و اینترفیس ge2 که در سمت private قرار دارد را به عنوان inside انتخاب می کنیم :

soodar1(config)# int ge1 
soodar1(config-if)#  ip nat outside
soodar1(config)# int ge2
soodar1(config-if)#  ip nat inside

سپس یک نام برای Nat وارد کرده و یک pool که یک رنج ip می باشد را در nat تنطیم می کنیم :

soodar1(config)# ip nat pool POOL1 200.1.2.10 200.1.2.10

در آخرین مرحله با نعریف یک ACL مشخص می کنیم که چه ترافیک هایی باید NAT شوند (البته در این جا همه ترافیک را NAT می کنیم) :

soodar1(config)# ip access-list nat-acl
soodar1(config-acl)# permit any any
soodar1(config-acl)# q
soodar1(config)# ip nat inside source list nat-acl pool POOL1

استفاده از interface به جای تعریف pool

در اینجا می توانیم تنظیم را به شکل دیگر نیز انجام دهیم و به جای تعریف pool از interface استفاده کنیم تنظیمات به شکل زیر تغییر خواهد کرد :

soodar1(config)# int ge1 
soodar1(config-if)#  ip nat outside
soodar1(config)# int ge2
soodar1(config-if)#  ip nat inside
soodar1(config-if)# q
soodar1(config)# ip access-list nat-acl
soodar1(config-acl)# permit any any
soodar1(config-acl)# q
soodar1(config)# ip nat inside source list nat-acl interface ge1

توجه

در حالت استفاده از interface به جای pool از اولین IP روی اینترفیس برای pool استفاده می شود .

بررسی ارتباط NAT

اکنون تنظیمات NAT به پایان رسیده است و کاربران user1,user2 می توانند با ip محلی خود به سرور وصل شوند . البته در سمت اینترنت هیچ دسترسی به کاربران وجود ندارد



حذف NAT

برای حذف NAT می توانید به شکل زیر عمل کنید :

soodar1(config)# no ip nat pool nat1 
soodar1(config)# int ge1 
soodar1(config-if)# no  ip nat outside
soodar1(config)# int ge2
soodar1(config-if)#  no ip nat inside

فعال کردن log های NAT

با دستور زیر می توانید Log های مربوط به nat را فعال کنید:

soodar1# debug nat44 event

STATIC NAT

در حالت static شما برای تک تک ip هایی که باید NAT شوند باید دستی rule اضافه کنید و دیگر به صورت خودکار ip ها توسط NAT اختصاص و تغییر نمی یابد . به طور مثال فرض کنید در سناریوی زیر قصد داریم تمامی ترافیکی که از سرور n4 به سمت بیرون می رود را تغییر مبدا انجام دهیم و با ip اینترفیس ge0 در روتر n1 یعنی 200.1.2.1 ارسال شوند .

برای اینکار ابتدا همانند حالت داینامیک سمت شبکه اینترنت را به عنوان nat outside و سمت شبکه local را به عنوان nat inside مشخص می کنیم :

NAT-static

n1# conf t
n1(config)# int ge0
n1(config-if)# ip nat outside 
n1(config-if)# q
n1(config)# int ge1
n1(config-if)# ip nat inside 
n1(config-if)# q 
n1(config)# ip nat inside source static 192.168.100.100 200.1.2.1

با تنظیم بالا NAT به شکل زیر انجام می گیرد:

  • اگر مبدا بسته با شبکه inside در nat تعریف شده مطابقت داشته باشد و از شبکه inside دریافت شود مبدا بسته با ip جدید (200.1.2.1) تعریف شده جایگزین خواهد شد .
    با این تنظیم مبدا packet خروجی از اینترفیس ge0 که مبدا آن 192.168.100.100 باشد را به ip جدید 200.1.2.1 ترجمه می کند و مبدا بسته را این ip جدید قرار می دهد (source nat) .

  • اگر مقصد بسته دریافتی برابر با ip اینترفیس outside باشد (200.1.2.1) و در اینترفیس outside دریافت شود مقصد شبکه به آدرس شبکه inside (192.168.100.100) ترجمه می شود .
    با این تنظیم مقصد packet ورودی به اینترفیس ge0 که destinatoin آن 200.1.2.1 باشد به 192.168.100.100 تغییر خواهد کرد (destination nat) .

Protocol NAT

در این حالت همان static nat مثال قبل استفاده می شود با این تفاوت که کل ترافیک NAT نمی شود بلکه دقیق مشخص می کنیم چه protocol و چه port ی را باید NAT کنیم .
در این حالت تنظیمات به شکل زیر خواهد بود :

ip nat inside source static <tcp|udp> A.B.C.D (1-65535) A.B.C.D (1-65535)

این تنظیم یک ورودی به جدول ایستا nat اضافه می کند که اولین ip و پورت مربوط به شکل داخلی (inside) و دومین ip و پورت مربوط به شبکه خارجی (output) می باشد. نحوه تنظیم source nat و destinatio nat همانند بخش static nat می باشد .

مثال ۱ : NAT-static

n1# conf t
n1(config)# int ge0
n1(config-if)# ip nat outside 
n1(config-if)# q
n1(config)# int ge1
n1(config-if)# ip nat inside 
n1(config-if)# q 
n1(config)# ip nat inside source static tcp 192.168.100.100 443 200.1.2.1 443

بدین ترتیب ترافیک https دریافتی در اینترفیس ge0 با تغییر مقصد به 192.168.100.100 به شبکه inside ارسال می شود و همچنین ترافیک خروجی https از اینترفیس ge0 که مبدا 192.168.100.100 داشته باشد با تغییر مبدا به 200.1.2.1 ارسال خواهد شد .