یکی از کاربردهای NAT اتصال دو شبکه با محدوده آدرس یکسان است. اگر چه این کاربرد از NAT کمتر مورد نیاز است اما برای پیاده سازی این سناریو نکات جالبی از NAT را خواهیم آموخت. کاریرد ip nat outside source static، گزینه addd-route در دستور NAT و همچنین مفاهیم ouside local و outside global از جمله مواردی هستند

که در این سناریو یاد می گیریم.

سناریو بدین صورت طراحی شده است که دو آدرس 100.0.0.1/24 و 100.0.0.4/24 که هر دو در محدوده 100.0.0.0/24 اما در مکانهای فیزیکی مختلفی قرار دارند را به یکدیگر متصل کنیم. بدیهی است در حالت عادی ترافیک با مبدا 100.0.0.1 و مقصد 100.0.0.4 هیچگاه به روتر gateway تحویل داده نمی شود و بنابراین از شبکه خارج نمی شود.

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

آدرس واقعی آدرس غیر واقعی
 100.0.0.1  1.1.1.1
100.0.0.4   4.4.4.4

آدرس های واقعی و غیر واقعی در Bi-Directional NAT

شکل زیر توپولوژی مورد نظر و چگونگی عملکرد NAT را تشریح می کند. دو روتر INSIDE و OUTSIDE با آدرس های 100.0.0.1/24 و 100.0.0.4/24 در نظر گرفته شده است که قرار است از طریق روتر میانی با نام NAT-HERE که وظیفه NAT را به عهده دارد، به یکدیگر متصل شوند. قبل از هر گونه پیاده سازی NAT توجه کنید که روی دو روتر INSIDE و OUTSIDE مسیر default به سمت روتر NAT-HERE ایجاد شده است. همچنین توجه کنید که روی روتر NAT-HERE مسیر آدرس های 100.0.0.1 و 100.0.0.4 داده شده است.

شیوه ارتباطی نیز بدین صورت خواهد بود که ترافیک با آدرس مبدا 100.0.0.1 و آدرس مقصد 4.4.4.4 از روی روتر INSIDE ایجاد می شود. با توجه به وجود مسیر default، ترافیک مورد نظر تحویل روتر NAT-HERE می شود. روتر NAT-HERE هر دو آدرس مبدا و مقصد را تغییر می دهد. آدرس مبدا را از آدرس واقعی 100.0.0.1 به آدرس غیر واقعی 1.1.1.1 تغییر می دهد. همچنین آدرس مقصد را از آدرس غیر واقعی 4.4.4.4 به آدرس واقعی 100.0.0.4 تغییر می دهد. پس از تغییرات اعمال شده، ترافیک تحویل روتر OUTSIDE می شود. روتر OUTSIDE نیز در پاسخ جای آدرس مبدا و مقصد را عوض کرده و آن را تحوبل روتر NAT_HERE می دهد. روتر NAT-HERE ترافیک با مبدا 100.0.0.4 و مقصد 1.1.1.1 دریافت می کند. سپس آدرس مبدا 100.0.0.4 را به 4.4.4.4 تغییر می دهد و همچنین آدرس مقصد 1.1.1.1 را به آدرس واقعی 100.0.0.1 بر می گرداند. بدین ترتیب ترافیک به روتر INSIDE باز می گردد.

Bi Directional NAT

Bi-Directional NAT

سوال این است که NAT چگونه این پروسه را مدیریت می کند؟ NAT برای انجام این پروسه از دو ابزار زیر استفاده می کند:

  1. ip nat inside source: همانطور که قبلا آموختیم در این ابزار وقتی ترافیک روی اینترفیس inside دریافت می شود، آدرس مبدا ترافیک دریافتی را به آدرس تعیین شده تغییر می دهد و در جهت عکس نیز وقتی ترافیک روی اینترفیس outside دریافت می شود، آدرس مقصد را به آدرس واقعی بر می گرداند. در مثال ما دستور ip nat inside source static 100.0.0.1 1.1.1.1، آدرس مبدا را وقتی ترافیک روی اینترفیس inside دریافت می شود از 0.0.1 به 1.1.1.1 تغییر می دهد. همچنین آدرس مقصد ترافیکی که روی اینترفیس outside دریافت می شود را از آدرس 1.1.1.1 به 100.0.0.1 تغییر می دهد.
  2. ip nat outside source: این ابزار آدرس مبدا ترافیکی که روی اینترفیس outside دریافت می شود را به آدرس تعیین شده تغییر می دهد و در جهت عکس نیز آدرس مقصد ترافیک وقتی روی اینترفیس inside دریافت می شود را به آدرس اولیه برمی گرداند. در مثال ما دستور ip nat outside source static 100.0.0.4 4.4.4.4، آدرس مبدا ترافیک را وقتی ترافیک روی اینترفیس outside دریافت می شود را از 0.0.4 به 4.4.4.4 تغییر می دهد. همچنین آدرس مقصد ترافیکی که روی اینترفیس inside دریافت می شود را از 4.4.4.4 به 100.0.0.4 برمی گرداند.

بنابراین با بکار گیری دو ابزار مذکور ارتباط دو آدرس که در یک محدوده قرار دارند اما از نظر فیزیکی در دو شبکه مجزا هستند امکان پذیر می شود. در ذیل شیوه پیاده سازی NAT دو طرفه نشان داده شده است اما بعد از پیاده سازی متوجه می شویم که همچنان بین دو آدرس مورد نظر ارتباط وجود ندارد. اگر به خروجی دستور debug ip icmp نیز توجه کنیم، متوجه می شویم که روتر NAT-HERE مسیر برای آدرس 4.4.4.4 ندارد و آن را در قالب پیغام ICMP به روتر INSIDE اعلام می کند. مشکل کجاست؟؟!!

!!! NAT-HERE

interface Ethernet0/0

 ip nat inside

interface Ethernet0/1

 ip nat outside

!

ip nat inside source static 100.0.0.1 1.1.1.1

ip nat outside source static 100.0.0.4 4.4.4.4

!

INSIDE#ping 4.4.4.4 source 100.0.0.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:

Packet sent with a source address of 100.0.0.1

U.U.U

Success rate is 0 percent (0/5)

!

NAT-HERE#debug ip icmp

ICMP packet debugging is on

NAT-HERE#

*Dec 21 07:51:25.951: ICMP: dst (4.4.4.4) host unreachable sent to 100.0.0.1

NAT-HERE#

*Dec 21 07:51:27.959: ICMP: dst (4.4.4.4) host unreachable sent to 100.0.0.1

NAT-HERE#

*Dec 21 07:51:29.963: ICMP: dst (4.4.4.4) host unreachable sent to 100.0.0.1

پیاده سازی Bi-Directional NAT

همانطور که گفته شد روتر میانی مسیر آدرس 4.4.4.4 را نمی داند. آیا لازم است بداند؟ همانطور که می دانید آدرس مقصد 4.4.4.4 در زمان خروج از روتر میانی به آدرس 100.0.0.4 تغییر می کند. چه لزومی دارد روتر میانی مسیر 4.4.4.4 را بداند؟ آیا تغییر آدرس از 4.4.4.4 به 100.0.0.4 قبل از مسیریابی انجام می شود یا بعد از مسیریابی؟ اگر ابتدا آدرس تغییر کند سپس مسیریابی انجام شود، آنگاه روتر کافی است مسیر 100.0.0.4 را بداند که البته این مسیر نیز قبلا در روتر ایجاد شده است.

در ادامه قانون بسیار مهمی را با هم مرور می کنیم.

وقتی ترافیک وارد اینترفیس inside وارد می شود، ابتدا مسیریابی سپس NAT انجام می شود (post-routing NAT) وقتی ترافیک روی اینترفیس outside وارد می شود ابتدا NAT سپس مسیریابی انجام می شود (pre-routing NAT)

نکته: به عبارت دیگر در Source NAT ابتدا مسیریابی سپس NAT انجام می شود اما در Detination NAT ابتدا NAT سپس مسیریابی انجام می گیرد.

با توجه به ایتکه ترافیک در زمان خروج وارد اینترفیس Inside می شود بنابراین قبل از تغییر آدرس مسیریابی انجام می گیرد. بنابراین ضروری است تا روتر مسیر آدرس 4.4.4.4 را بداند.

در ذیل ابتدا مسیر 4.4.4.4 روی روتر میانی ایجاد شده است. سپس نشان داده شده است که ارتباط بدون مشکل ایجاد می شود.

!!! NAT-HERE

!

ip route 4.4.4.4 255.255.255.255 10.2.3.2

!

INSIDE#ping 4.4.4.4 so 100.0.0.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:

Packet sent with a source address of 100.0.0.1

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms

ایجاد مسیر به صورت دستی برای آدرس outside local

حال بیاییم کاربرد گزینه add-route در دستور ip nat outside source را بررسی کنیم. کاربرد این دستور دقیقا به همین سناریو بر می گردد. وقتی در انتهای دستور ip nat outside source 100.0.0.4 4.4.4.4 از گزینه add-route استفاده می کنیم، روتر مسیری برای آدرس 4.4.4.4 با همان آدرس next-hop ای که مسیر آدرس 100.0.0.4 به آن اشاره می کند، ایجاد می کند. به عبارت دیگر مسیر 4.4.4.4 همان مسیر 100.0.0.4 است.

در ذیل ابتدا مسیری که به صورت دستی برای آدرس 4.4.4.4 وارد شده است را حذف نمودیم. سپس دستور ip nat outside source را نیز حذف نموده و مجددا با گزینه add-route وارد نمودیم. با مشاهده جدول مسیریابی متوجه می شویم که روتر به صورت اتوماتیک مسیری برای آدرس 4.4.4.4 ایجاد نموده است.

به صورت کلی وقتی از گزینه add-route در انتهای دستور ip nat outside source استفاده می کنید، روتر مسیری برای آدرس outside local با آدرس روتر بعدی outside global ایجاد می کند. مفهوم دو گزینه outside local و outside global را در ادامه مورد بررسی قرار خواهیم داد.

NAT-HERE(config)#no ip route 4.4.4.4 255.255.255.255 10.2.3.2

NAT-HERE(config)#no ip nat outside source static 100.0.0.4 4.4.4.4

Static entry in use, do you want to delete child entries? [no]: yes

NAT-HERE(config)#ip nat outside source static 100.0.0.4 4.4.4.4 add-route

!

NAT-HERE(config)#do sh ip route static

!!! بخشی از خروجی حذف شده است

      4.0.0.0/32 is subnetted, 1 subnets

S        4.4.4.4 [1/0] via 100.0.0.4

      100.0.0.0/32 is subnetted, 2 subnets

S        100.0.0.1 [1/0] via 10.1.2.2

S        100.0.0.4 [1/0] via 10.2.3.2

ایجاد مسیر به صورت اتوماتیک برای آدرس outside local با گزینه add-route

در ادامه روی روتر میانی NAT-HERE دستور debug ip nat را وارد نمودیم، تغییرات آدرس دقیقا مطابق با خواسته ما انجام گرفته است.

در انتها نیز خروجی دستور show ip nat translation نشان داده شده است. خروجی نشان می دهد که آدرس 4.4.4.4 از نوع outside local و آدرس 100.0.0.4 از نوع outside global است. outside local به آدرسی گفته می شود که متعلق به شبکه ما نیست (outside) اما از داخل با آن آدرس دیده می شود (local). آدرس outside global به آدرسی گفته می شود که به شبکه ما مرتبط نیست (outside) و از بیرون با آن آدرس دیده می شود (global). به همین ترتیب 1.1.1.1 و 100.0.0.1 آدرس های Inside global و inside local هستند. inside local آدرسی است که به شبکه ما تعلق دارد (inside) و از داخل با این آدرس دیده می شود (local). Inside global آدرسی است که به شبکه ما تعلق دارد (inside) و از بیرون با این آدرس دیده می شود (global).

NAT-HERE#debug ip nat

!

INSIDE#ping 4.4.4.4 so 100.0.0.1

!

NAT-HERE#

*Dec 21 08:49:43.783: NAT*: s=100.0.0.1->1.1.1.1, d=4.4.4.4 [67]

*Dec 21 08:49:43.783: NAT*: s=1.1.1.1, d=4.4.4.4->100.0.0.4 [67]

*Dec 21 08:49:43.787: NAT*: s=100.0.0.4->4.4.4.4, d=1.1.1.1 [67]

*Dec 21 08:49:43.787: NAT*: s=4.4.4.4, d=1.1.1.1->100.0.0.1 [67]

!

NAT-HERE#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

--- ---                        ---                      4.4.4.4              100.0.0.4

icmp 1.1.1.1:20        100.0.0.1:20       4.4.4.4:20         100.0.0.4:20

icmp 1.1.1.1:21        100.0.0.1:21       4.4.4.4:21         100.0.0.4:21

---     1.1.1.1             100.0.0.1            ---                     ---

تحلیل خروجی جدول NAT در Bi-Directional NAT

در جدول ذیل به صورت خلاصه مفاهیم inside local، inside global، outside local و outside global در NAT نشان داده شده است.

Local/global Inside/outside آدرس
 از داخل با این آدرس دیده می شود local  متعلق به شبکه ماست inside  100.0.0.1
 از بیرون با این آدرس دیده می شود global متعلق به شبکه ما نیست outside  100.0.0.4
 از بیرون با این آدرس دیده می شود global  متعلق به شبکه ماست inside 1.1.1.1 
از داخل با این آدرس دیده می شود local   متعلق به شبکه ما نیست outside  4.4.4.4

مفاهیم inside/outside local/global در NAT

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید