همانطور که قبلا گفته شد ویژگی Translation یکی از نیازهای اساسی مهاجرت از IPV4 به IPV6 است. هر روز که می گذرد به تعداد کاربران اینترنتی IPV6 افزوده می شود. از طرفی آدرس های IPV4 نیز به اتمام رسیده است و بنابراین بر تعداد سرویس های IPV4 نه تنها افزوده نخواهد شد بلکه روز به روز نیز کاهش پیدا می کند.
نیازمند روشی هستیم که بتواند کاربران IPV6 را به سرویس های IPV4 متصل نماید.
همانطور که قبلا گفته شد روش های Tanslation مهمترین ابزار پیاده سازی این سناریو هستند. دو روش معروف Translation به نام های NAT-PT و NAT64 معرفی شده اند. NAT-PT بدلیل عدم مقیاس پذیری وهمچنین وابستگی آن به سرویس DNS ALG کنار گذاشته شد و مهمترین راه حل جایگزین آن NAT64 انتخاب شد که از نظر مقیاس پذیری و عدم وابستگی آن به سرویس DNS ALG وضعیت بهتری نسبت به NAT-PT دارد.
روش 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 مقصد قرار دارد.
چگونگی مکانیزم ارتباط کاربر IPV6 با سرور IPV4 با بکارگیری دو سرویس NAT64 و DNS64
شکل زیر مثال دیگری را با جزئیات بیشتر نشان می دهد.
مکانیزم 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 پشتیبانی نمی شود.
پیاده سازی 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