همانطور که قبلا گفته شد ویژگی Translation یکی از نیازهای اساسی مهاجرت از IPV4 به IPV6 است. هر روز که می گذرد به تعداد کاربران اینترنتی IPV6 افزوده می شود. از طرفی آدرس های IPV4 نیز به اتمام رسیده است و بنابراین بر تعداد سرویس های IPV4 نه تنها افزوده نخواهد شد بلکه روز به روز نیز کاهش پیدا می کند.

نیازمند روشی هستیم که بتواند کاربران IPV6 را به سرویس های IPV4 متصل نماید.

همانطور که قبلا گفته شد روش های Tanslation مهمترین ابزار پیاده سازی این سناریو هستند. دو روش معروف Translation به نام های NAT-PT و NAT64 معرفی شده اند. NAT-PT بدلیل عدم مقیاس پذیری وهمچنین وابستگی آن به سرویس DNS ALG کنار گذاشته شد و مهمترین راه حل جایگزین آن NAT64 انتخاب شد که از نظر مقیاس پذیری و عدم وابستگی آن به سرویس DNS ALG وضعیت بهتری نسبت به NAT-PT دارد.

DNS64

روش NAT64 و مستقل بودن آن از سرویس DNS64

در روش NAT64 همانند NAT-PT محدوده آدرس /96 برای مکانیزم NAT64 کنار گذاشته می شود که نمای بیرونی شبکه IPV4 در دامنه IPV6 است. زمانی که کاربر IPV6 درخواست اتصال به سرور IPV4 (www.foo4.com) را ارسال می کند، سرور DNS64 پاسخ A رکورد (آدرس IPV4) را به AAAA رکورد (آدرس IPV6) تبدیل می کند. نبدیل آدرس IPV4 به IPV6 به این صورت است که آدرس IPV4 سرور در 32 بیت انتهایی prefix در نظر گرفته شده برای NAT64 اضافه شده و به کاربر IPV6 بر گردانده می شود. مثلا در شکل زیر محدوده آدرس 64:ff9b::/96 برای NAT64 در نظر گرفته شده است. کاربر IPV6 درخواست اتصال به سرور IPV4 با نام h2.example.com را ارسال می کند، سرور DNS آدرس 192.0.2.1 را به DNS64 برمی گرداند. DNS64 که مستقل از NAT64 است آدرس 192.0.2.1 را به انتهای آدرس 64:ff9b::/96 اضافه نموده و آدرس 64:ff9b::c000:201 را به کاربر IPV6 بر می گرداند. حال کاربر IPV6 درخواست اتصال را به آدرس 64:ff9b::c000:201 ارسال می کند که با ویژگی NAT64 امکان ارتباط با آدرس 192.0.2.1 فراهم می گردد. اما همانطور که پیداست برای تبدیل آدرس IPV6 به آدرس IPV4 نیاز به ایجاد رکورد در جدول NAT نیست و آدرس IPV4 در داخل آدرس IPV6 مقصد قرار دارد.

DNS642

چگونگی مکانیزم ارتباط کاربر IPV6 با سرور IPV4 با بکارگیری دو سرویس NAT64 و DNS64

شکل زیر مثال دیگری را با جزئیات بیشتر نشان می دهد.

DNS64 3

مکانیزم DNS64

ممکن است به نظر بیاید که DNS64 شبیه DNS ALG است ولی اصلا اینطور نیست. در DNS ALG کاربر IPV6 درخواست تبدیل نام به آدرس را به DNS سرور نهایی ارسال می کند اما از آنجایی که این سرور از نوع IPV4 است، DNS ALG درخواست را از IPV6 به IPV4 تبدیل می کند و پس از دریافت پاسخ نیز مجددا آن را از IPV4 به IPV6 تبدیل نموده و تحویل کاربر IPV6 می دهد. در حالی که در DNS64 درخواست تبدیل نام به آدرس به خود DNS64 داده می شود و نیازی به تبدیل آدرس نیست. DNS64 نیز خودش درخواست را به DNS سرور واقعی ارائه داده و پاسخ را نیز خود به کاربر IPV6 ارائه می دهد. در واقع DNS64 ما بین کاربر IPV6 و سرور DNS نیست بلکه خود نسبت به کاربر IPV6، سرور و نسبت به DNS server واقعی، Client است.

DNS64 بخش اول ارتباط بین کاربر IPV6 با سرور IPV4 را تشکیل می دهد. بخش دوم، مکانیزم NAT64 است که ارتباط دو آدرس IPV4 و IPV6 را با مکانیزم Translation امکان پذیر می سازد. در NAT64 شبکه IPV4 با prefix /96 در دامنه IPV6 دیده می شود و این prefix /96 در شبکه IPV6 توسط پروتکل های مسیریابی معرفی می شود. اما شبکه IPV6 در دامنه IPV4 چگونه دیده می شود؟

دو نوع مکانیزم Stateless NAT64 و Stateful NAT64 وجود دارد. در روش Stateless به ازاء هر کاریر IPV6 یک آدرس IPV4 در دامنه IPV4 در نظر گرفته می شود که البته این نگاشت با الگوریتم مشخصی صورت می پذیرد و به دلیل استفاده از این الگوریتم نیازی به نگهداری جدول translation در روتر NAT64 وجود ندارد. از آنجایی که در روش Stateless با ازاء هر کاربر IPV6 یک آدرس IPV4 به صورت مستقل در نظر گرفته می شود که در این صورت با محدودیت تعداد آدرس های IPV4 مواجه خواهیم شد. اما برای دسترسی سرورهای اینترنتی IPV6 در دامنه IPV4 و یا بالعکس دسترسی سرورهای اینترنتی IPV4 در دامنه IPV6 قابل استفاده است. زیرا تعداد سرورها خیلی زیاد نیست و آدرس زیادی هدر نمی رود. در روش Stateless شروع کننده ارتباط می تواند هر یک از دو طرف IPV4 و یا IPV6 باشد.

در روش Stateful تعداد زیادی آدرس IPV6 با یک آدرس IPV4 در دامنه IPV4 دیده می شوند. بنابراین در این شیوه شروع کننده ارتباط باید IPV6 باشد. بنابراین کاربرد این روش بیشتر در دسترسی کاربران اینترنتی IPV6 به سرویس های اینترنت IPV4 است. در این شیوه الگوریتم مشخصی وجود ندارد تا آدرس های IPV6 در دامنه IPV4 نشان داده شود. بنابراین جدول تغییرات باید در روتر NAT64 نگهداری شود. مزیت این شیوه نیز مشخص است اینکه نیازی نیست تا به ازاء هر آدرس IPV6 آدرس جداگانه ای در دامنه IPV4 در نظر بگیریم.

جدول زیر که روش Stateful NAT را با Stateless NAT مقایسه می کند به درک هر چه بهتر ما در خصوص این دو روش کمک می کند.

Stateless NAT64 Stateful NAT64
تبدیل آدرس 1:1 تبدیل آدرس 1:N
آدرس های IPV4 هدر می رود آدرس های IPV4 را هدر نمی دهد
ارتباط بین دو آدرس IPV4 و IPV6 کاملا transparent و مقیاس پذیر است ارتباط بین دو آدرس IPV4 و IPV6 بدلیل استفاده چندین کاریر IPV6 از یک آدرس IPV4 کاملا transparent نیست
نیاز به نگهداری جدول تغییرات آدرس در روتر NAT64 نیست به ازاء هر تغییر رکوردی در روتر NAT64 نگهداری می شود
آدرس دهی کاربران IPV6 حتما باید به صورت دستی و یا DHCPv6 باشد. امکان آدرس دهی کاربران IPV6 با روش Stateless Auto Configuration (SLAAC) نیز وجود دارد.

مقایسه Stateful NAT64 و Stateless NAT64

در ادامه قصد داریم چگونگی پیاده سازی و مانیتورینگ Stateful NAT64 را نشان دهیم. در زمان نوشتن این کتاب ویژگی NAT64 صرفا روی روترهای ASR و IOS XE پشتیبانی می شود. لذا خروجی که در ذیل نشان داده شده است، از cisco forum گرفته شده است و توسط اینجانب پیاده سازی نشده است. دستور nat64 روی روتر های IOS حتی با IOS نسخه 15 پشتیبانی نمی شود.

DNS64 4

پیاده سازی NAT64

در ذیل پیکربندی هر سه روتر فوق آمده است. اگر به پیکربندی NAT64 توجه کنید، مشاهده می کنید که prefix 2001::/96 برای مکانیزم NAT64 در نظر گرفته شده است. بنابراین آدرس های IPV4 با prefix 2001::/96 در دامنه IPV6 دیده می شود. همچنین همه آدرس های IPV6 با prefix 4001::/96 صرفا با یک آدرس 127.1.1.10 در دامنه IPV4 دیده می شود که نشان از Stateful بودن NAT64 است.

!!!! NAT64

!

ipv6 unicast-routing

!

interface Ethernet0/1

 no shurdown

 ipv6 address 4001::1/96

 ipv6 rip RIPv6 enable

 nat64 enable

 cdp enable

!

!

interface Ethernet0/0

 no shutdown

 ip address 20.20.20.1 255.255.255.0

 load-interval 30

 nat64 enable

 cdp enable

!

router rip

 network 20.0.0.0

!

ipv6 router rip RIPv6

!

ipv6 access-list ACLv6

 permit ipv6 4001::/96 any

!

!

nat64 prefix stateful 2001::/96

nat64 v4 pool pool1 27.1.1.10 27.1.1.10

nat64 v6v4 list ACLv6 pool pool1 overload

!

!!! IPV4-only

!

interface Loopback10

ip address 15.1.1.10 255.255.255.0

!

interface Loopback20

ip address 25.1.1.10 255.255.255.0

!

interface Loopback30

ip address 35.1.1.10 255.255.255.0

!

interface Ethernet0/0

 no shutdown

 ip address 20.20.20.2 255.255.255.0

!

router rip

 version 2

 network 15.0.0.0

 network 20.0.0.0

 network 25.0.0.0

 network 35.0.0.0

!

ip route 27.1.1.0 255.255.255.0 20.20.20.1

!

!

!!! IPV6-only

!

ipv6 unicast-routing

ipv6 cef

!

interface Loopback10

 ipv6 address 4001::10/128

 ipv6 rip RIPv6 enable

!

interface Loopback20

 ipv6 address 4001::20/128

 ipv6 rip RIPv6 enable

!

interface Loopback30

 ipv6 address 4001::30/128

 ipv6 rip RIPv6 enable

!

interface Ethernet0/0

 no shutdown

 ipv6 address 4001::2/96

 ipv6 rip RIPv6 enable

!

ipv6 route 2001::/96 4001::1

!

ipv6 router rip RIPv6

پیاده سازی NAT64

بعد از پیاده سازی NAT64 در ذیل نشان داده شده است که روتر IPV6-only می تواند با هر یک از آدرس های شبکه IPV4 ارتباط برقرار کند. آدرس مقصد ترافیک های IPV6 با 2001::/96 شروع می شود و 32 بیت انتهایی آن از آدرس IPV4 گرفته شده است.

IPv6-only#ping 2001::1414:1402 !!! (HEX format Fa0/1 IPv4 address 20.20.20.2)

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1414:1402, timeout is 2 seconds:

!!!!!

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

IPv6-only#ping 2001::f01:10a !!! (HEX format Lo 10 IPv4 address 15.1.1.10)

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::F01:10A, timeout is 2 seconds:

!!!!!

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

IPv6-only#ping 2001::1901:10a !!! (HEX format Lo 20 IPv4 address 25.1.1.10)

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1901:10A, timeout is 2 seconds:

!!!!!

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

IPv6-only#ping 2001::2301:10a !!! (HEX format Lo 30 IPv4 address 35.1.1.10)

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::2301:10A, timeout is 2 seconds:

!!!!!

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

!

ایجاد ارتباط بین IPV4 و IPV6 با ابزار NAT64

خروجی دستور debug ip icmp در روتر IPV4-only نشان می دهد که آدرس مقصد همه ترافیک های ناشی از روتر به مقصد شبکه IPV6 27.1.1.10 است. این بدین معنی است که کل شبکه IPV6 در دامنه IPV4 با این آدرس دیده می شود. البته مشروط بر آنکه شروع کننده ارتباط کاربر IPV6 باشد. در روش Stateful NAT64 شروع کننده ارتباط نمی تواند کاربر IPV4 باشد.

IPv4-only#debug ip icmp

ICMP packet debugging is on

IPv4_Router#

*Dec 20 10:17:16.818: ICMP: echo reply sent, src 20.20.20.2, dst 27.1.1.10, topology BASE, dscp 0 topoid 0

*Dec 20 10:17:28.218: ICMP: echo reply sent, src 15.1.1.10, dst 27.1.1.10, topology BASE, dscp 0 topoid 0

*Dec 20 10:17:40.958: ICMP: echo reply sent, src 25.1.1.10, dst 27.1.1.10, topology BASE, dscp 0 topoid 0

*Dec 20 10:17:50.086: ICMP: echo reply sent, src 35.1.1.10, dst 27.1.1.10, topology BASE, dscp 0 topoid 0

مانیتورینگ NAT64

خروجی جدول NAT64 نشان می دهد که همه آدرس های IPV4 در دامنه IPV6 با prefix 2001::/96 دیده می شوند و 32 بیت انتهایی آنها همان آدرس IPV4 است. 

NAT64#show nat64 translation

Proto  Original IPv4         Translated IPv4

       Translated IPv6       Original IPv6

----------------------------------------------------------------------------

icmp   35.1.1.10:4           [2001::2301:10a]:6575

       27.1.1.10:4           [4001::2]:6575

icmp   20.20.20.2:1          [2001::1414:1402]:9615

       27.1.1.10:1           [4001::2]:9615

icmp   25.1.1.10:3           [2001::1901:10a]:4815

       27.1.1.10:3           [4001::2]:4815

icmp   15.1.1.10:2           [2001::f01:10a]:6797

       27.1.1.10:2           [4001::2]:6797

Total number of translations: 4

همه آدرس های IPV4 در دامنه IPV6 با 2001::/96 دیده می شود و 32 بیت انتهایی آنها همان آدرس IPV4 است

در ذیل روتر IPV6-only با آدرس های مبدا مختلف با آدرس مقصد شبکه IPV4 ارتباط برقرار نموده است. در جنین شرایطی مشاهده می کنید که همه آدرس های IPV6 در دامنه IPV4 با یک آدرس 27.1.1.10 دیده می شود.

IPv6-only#ping 2001::1414:1402 source lo 10

 

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1414:1402, timeout is 2 seconds:

Packet sent with a source address of 4001::10

!!!!!

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

IPv6-only#ping 2001::1414:1402 source lo 20

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1414:1402, timeout is 2 seconds:

Packet sent with a source address of 4001::20

!!!!!

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

IPv6-only#ping 2001::1414:1402 source lo 30

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1414:1402, timeout is 2 seconds:

Packet sent with a source address of 4001::30

!!!!!

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

IPv6-only#ping 2001::1414:1402 source eth0/0

 

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2001::1414:1402, timeout is 2 seconds:

Packet sent with a source address of 4001::2

!!!!!

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

 

NAT64#show nat64 translation

 

Proto  Original IPv4         Translated IPv4

       Translated IPv6       Original IPv6

----------------------------------------------------------------------------

 

icmp   20.20.20.2:2          [2001::1414:1402]:6454

       27.1.1.10:2           [4001::20]:6454

icmp   20.20.20.2:4          [2001::1414:1402]:2719

       27.1.1.10:4           [4001::2]:2719

icmp   20.20.20.2:1          [2001::1414:1402]:2001

       27.1.1.10:1           [4001::10]:2001

icmp   20.20.20.2:3          [2001::1414:1402]:3353

       27.1.1.10:3           [4001::30]:3353

 

Total number of translations: 4

همه آدرس های IPV6 در دامنه IPV4 با یک آدرس 27.1.1.10 دیده می شود

در ذیل آمار ترافیک های translate شده بین دو شبکه IPV4 و IPV6 با دستور show nat64 statistics نشان داده شده است

NAT64#show nat64 statistics

NAT64 Statistics

 

Total active translations: 1 (0 static, 1 dynamic; 1 extended)

Sessions found: 251

Sessions created: 29

Expired translations: 26

Global Stats:

   Packets translated (IPv4 -> IPv6)

      Stateless: 0

      Stateful: 135

   Packets translated (IPv6 -> IPv4)

      Stateless: 0

      Stateful: 140

Interface Statistics

   Ethernet0/1 (IPv4 configured, IPv6 configured):

      Packets translated (IPv4 -> IPv6)

         Stateless: 0

         Stateful: 0

      Packets translated (IPv6 -> IPv4)

         Stateless: 0

         Stateful: 140

      Packets dropped: 0

   Ethernet0/0 (IPv4 configured, IPv6 not configured):

      Packets translated (IPv4 -> IPv6)

         Stateless: 0

         Stateful: 135

      Packets translated (IPv6 -> IPv4)

         Stateless: 0

         Stateful: 0

      Packets dropped: 5

Dynamic Mapping Statistics

   v6v4

      access-list ACLv6 pool pool1 refcount 1

         pool pool1:

            start 27.1.1.10 end 27.1.1.10

            total addresses 1, allocated 1 (100%)

            address exhaustion packet count 0

Limit Statistics

مانیتورینگ جدول Translation

نوشتن دیدگاه


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