آموزش CCNA : معرفی GRE Tunnel و پیاده سازی GRE Tunnel در سیسکو

GRE یا Generic Routing Encapsulation پروتکلی برای تونل زدن انواع پروتکل ها روی بستر IP است. بدین معنی که با GRE Tunnel قادر خواهید بود تا دو سایت را که ممکن است از نوع IPV4، IPV6، IPX و یا هر پروتکل دیگری باشند را روی بستر IPV4 و به صورت Point-to-Point به یکدیگر متصل کنید. پیشنهاد میکنم قبل از هر چیز پست “آموزش شبکه : VPN چیست و انواع VPN” را هم مطالعه نمایید.
Generic Routing Encapsulation یا GRE یک پروتکل Tunneling سبک است، که گسترهی متنوعی از پروتکلهای لایهی شبکه را در لینکهای مجازی Point-to-Point روی یک Internetwork «پروتکل اینترنت» کپسوله مینماید. همچنین پیاده سازی GRE مایکروسافت قابلیت کپسوله نمودن IPv4 و IPv6 را نیز دارا می باشد.
مزایای استفاده از GRE Tunnel
استفاده از Tunnelهای GRE به دلایل ذیل در سناریوهای زیادی، مفید می باشند:
- سبکی و تبعیت از RFC 2890 آنها را با تعداد زیادی از تجهیزات برندهای متفاوت،سازگار می نماید.
- در Dynamic Route میتوان BGP را با آن استفاده نمود.
- از multi-tenancy پشتیبانی مینماید.
- میتوان آن را با Virtual Machine Manager مدیریت کرد.
- میتوانید تا 2 گیگابایت توان عملیاتی روی یک ماشین مجازی شش هستهای داشته باشید.
- هر Gateway از چندین نوع اتصال پشتیبانی مینماید.
- Tunnelهای GRE اتصال بین شبکههای مجازی Tenant و شبکههای اکسترنال را مقدور میسازند. استفاده از پروتکل GRE در Tunneling، به دلیل سبک بودن و پشتیبانی از اکثر تجهیزات شبکه؛ تا هنگامی که نیازی به کدگذاری داده ها نباشد، بسیار ایدهآل میباشد. GRE در Tunnel های S2S یا Site to Site مشکل Forwarding بین شبکههای مجازی Tenant و شبکههای اکسترنال Tenant را چنان که در ادامه بررسی خواهیم نمود، با استفاده از یک Multi-Tenant Gateway حل می نماید.
قابلیت GRE Tunnel برای رفع نیازهای زیر طراحی شده است:
- شرکتهای هاستینگ باید بتوانند، بدون تغییر پیکربندی سوئیچ فیزیکی، شبکههایی مجازی برای Forwarding ایجاد نمایند.
- شرکتهای هاستینگ باید بتوانند، بدون تغییر پیکربندی سوئیچهای فیزیکیِ زیرساخت خود، به شبکههای اکسترنال خود subnet اضافه نمایند.
- GRE Tunnel چند دستاورد مهم را برای شرکتهای هاستینگ که در خدمات خود از فناوریهای مایکروسافت برای اجرای Software Defined Networking استفاده می نمایند، به ارمغان میآورد.
در زیر به بررسی چند راهکار مهم طریقه ی استفاده از GRE Tunnel در قالب سناریو، میپردازیم:
1- دسترسی به شبکه های فیزیکی Tenant از طریق شبکههای مجازی Tenant
سناریوی دسترسی، روشی است برای امکان دسترسی از شبکههای مجازی Tenant به شبکههای فیزیکی Tenant، که در محدودهی شرکت ارائهدهندهی خدمات هاستینگ واقع شدهاند. در این روش، یک GRE Tunnel Endpoint روی یک Multi-Tenant Gateway ایجاد و یک GRE Tunnel Endpoint دیگر، روی یک دستگاه Third-Party در شبکهی فیزیکی ایجاد میگردد و از این طریق ترافیک لایه۳ بین ماشینهای مجازیِ داخل شبکه مجازی و دستگاه Third-Party روی شبکهی فیزیکی هدایت میشود.

2- اتصال با سرعت بالا
این سناریو روشی جهت اتصال با سرعت بالا، از Tenant روی شبکهی مبنا به شبکهی مجازیِ واقع در شبکهی شرکت ارائهدهندهی خدمات هاستینگ می باشد. یک Tenant از طریق (MPLS (Multi Protocol Label Switching به شبکهی شرکت هاستینگ وصل میشود و آنجا یک GRE Tunnel بین لبهی روترِ شرکت هاستینگ و Multi-Tenant Gateway به سمت شبکهی مجازی Tenant ایجاد میگردد.

3- یکپارچگی با VLAN
این سناریو به شما اجازه میدهد VLAN را با شبکه مجازی Hyper-V ترکیب نمایید. بعنوان مثال شبکهی فیزیکی در شرکت هاستینگ را در نظر بگیرید که یک Load Balancer دارد که از ایزولاسیون VLAN بهره میگیرد. در واقع در این روش، Multi-Tenant Gateway یک GRE Tunnel، بین Load Balancer روی شبکهی فیزیکی و Multi-Tenant Gateway روی شبکه مجازی ایجاد مینماید.
نکته قابل توجه آن است که چندین Tunnel بین مبداء و مقصد میتواند اجرا شود و از GRE اصلی، جهت مرزبندی بین Tunnelها استفاده گردد.

4- دسترسی به منابع اشتراکی
این سناریو به شما اجازهی دسترسی به منابع اشتراکی روی شبکهی فیزیکی شرکت هاستینگ را میدهد.
ممکن است یک سرویس اشتراکی روی سرور شبکهی فیزیکی واقع در شبکهی شرکت هاستینگ داشته باشید که بخواهید آنرا با چند شبکهی مجازی Tenant به اشتراک بگذارید.
شبکههای Tenant با Subnetهایی که تداخل ندارند، از طریق GRE Tunnel به شبکهی مشترک دسترسی پیدا میکنند. هر Tenant Gateway بین Tunnelهای GRE، روت می نماید؛ بنابراین packetها را به شبکههای Tenant درست هدایت میکند.
در این سناریو، Single-Tenant Gateway را میتوان با یک سختافزار Third-Party جایگزین نمود.

5- خدمات دستگاه Third-Partyبه Tenantها
میتوان از این سناریو برای یکچارچه نمودن دستگاههای Third Party (نظیر Load Balancerهای سختافزاری) در جریان ترافیک شبکهی مجازی Tenant استفاده نمود. برای مثال، ترافیکی که از یک سایت Enterprise آغاز میگردد از طریقه یک Tunnel S2S به Multi-Tenant Gateway میرود. در واقع ترافیک از طریق یک Tunnel GRE به Load Balancer هدایت میشود و سپس Load Balancer ترافیک را به چند ماشین مجازی روی شبکهی مجازی Enterprise هدایت می نماید. همین رویداد برای Tenant دیگری که بهصورت بالقوه IP آدرسهایش در شبکههای مجازی تداخل دارند هم رخ میدهد. ترافیک شبکه با استفاده از VLANها روی Load Balancer ایزوله شده و روی تمام دستگاههای لایه۳ که VLANها را پشتیبانی میکنند قابل اجرا میباشد.

ما در این پست ترافیک IP را روی بستر اشتراکی IP با روش GRE تونل می زنیم تا بتوانیم ارتباط سایت ها را روی بسترهای عمومی و اشتراکی مانند اینترنت به یکدیگر متصل کنیم.
دقیق تر اینکه اگر دو سایت داریم که محدوده آدرس آنها اختصاصی است و روی بستر اینترنت به یکدیگر متصل هستند، ارتباط کاربران این دو سایت به صورت کاملا Transparent بدون GRE Tunnel دشوار است. به این دلیل که آدرس های محدوده اختصاصی روی اینترنت مسیریابی نمی شوند و برای ارتباط هر دو کاربری که قصد ارتباط روی اینترنت را دارند باید از روش هایی مانند NAT استفاده شود که Transparent نیست. GRE Tunnel ترافیک بین دو سایت را (که آدرس مبدا و مقصد آن اختصاصی است) مجددا روی ترافیک جدیدی از نوع IP بسته بندی می کند که آدرس مبدا و مقصد آن آدرس بیرونی و اینترنتی روترهای مرزی دو سایت است و بدین ترتیب ارتباط بین دو سایت امکان پذیر می شود.

اگر به شکل زیر توجه کنید دو سایت با آدرس های 192.168.1.0/24 و 192.168.3.0/24 از طریق اینترنت به یکدیگر متصل هستند. کاربران این دو سایت نمی توانند به صورت transparent و همانند LAN با یکدیگر ارتباط برقرار کنند زیرا آدرس های محدوده private در اینترنت مسیریابی نمی شوند. اینترفیس بیرونی روترهای مرزی این دو سایت آدرس اینترنتی IP1 و IP2 دارند که از طریق اینترنت قابل دیدن هستند و بنابراین روترهای مرزی این دو سایت می توانند کاملا به صورت transparent با هم در ارتباط باشند. در چنین سناریویی با ایجاد Tunnel می توان ارتباط بین کاربران دو سایت را نیز به صورت کاملا transparent برقرار نمود. بدین صورت که ترافیک بین دو سایت که آدرس مبدا و مقصد آن 192.168.1.0 و 192.168.3.0 است، وقتی در روتر مرزی سایت مبدا ،که همان ابتدای Tunnel است، دریافت می شود، روی ترافیک دیگری با آدرس مبدا و مقصد IP1 و IP2 که آدرس ابتدا و انتهای tunnel هستند، سوار می شود. ترافیک جدید روی اینترنت مسیریابی شده و در روتر مرزی سایت مقصد که همان انتهای Tunnel است، دریافت می شود. بسته اصلی از سربار ایجاد شده جدا می شود و تحویل سایت مقصد خواهد شد.
برای پیاده سازی تونل GRE در سیسکو مراحل زیر انجام می پذیرد
با دستور interface tunnel تونل جدیدی ایجاد نمایید.
با دستور tunnel mode در محیط اینترفیس تونل، مد تونل را به GRE تغییر دهید. از آنجایی که مد پیش فرض GRE است، لذا استفاده از این دستور ضرورتی ندارد و در خروجی پیکربندی نیز نمایش داده نمی شود.
مبدا و مقصد تونل را با دستورات tunnel source و tunnel destination تعیین نمایید. مبدا و مقصد تونل، آدرس بیرونی روترهای مرزی دو سایت است.
با یکی از روش های مسیریابی Static و یا Dynamic ترافیک بین سایت ها را از طریق تونل ارسال می کنیم. در این سناریو از پروتکل EIGRP برای مسیریابی بین سایت ها روی تونل استفاده شده است. همانطور که قبلا گفته شد یکی از مزایای تونل GRE امکان ارسال ترافیک broadcast و multicast است که امکان اجرای هر یک از پروتکل های مسیریابی را روی تونل ممکن می سازد.
خوب برای شروع سناریو ما تنضیمات IP اولیه خود را به صورت زیر وارد می کنیم:
R1(config)#interface fastEthernet 0/1
R1(config-if)#ip address 192.168.12.1 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 192.168.12.2 255.255.255.0
R2(config-if)#no shutdown
R2(config)#interface fastEthernet 0/1
R2(config-if)#ip address 192.168.23.1 255.255.255.0
R2(config-if)#no shutdown
R3(config)#interface fastEthernet 0/1
R3(config-if)#ip address 192.168.23.2 255.255.255.0
R3(config-if)#no shutdown
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.3.1 255.255.255.0
R3(config-if)#no shutdown
حالا ما باید یک تانل با شماره 0 تا 2147483647 انتخاب کنیم، این کار را برای هر دو سر تانل خود باید انجام دهیم، ما tunnel صفر را وارد کردیم.
R1(config)#interface tunnel 0
R3(config)#interface tunnel 0
سپس باید ادرس مبدا (source) و مقصد (destination) هر دو سر تانل را بر روی روتر ها مشخص کنیم.
R1(config-if)#tunnel source 192.168.12.1
R1(config-if)#tunnel destination 192.168.23.2
R3(config-if)#tunnel source fastEthernet 0/1
R3(config-if)#tunnel destination 192.168.12.1
نکته: آدرس source ای پی اینترفیس روتر ما می باشد و destination آدرس اینترفیس روتر مقصد.
نکته: در اینجا شما می توانید بجای آدرس آی پی source از اسم اینترفیس نیز استفاده کنید مانند کاری که ما در روتر R3 انجام دادیم.
حال برای تانل خود یک IP وارد می کنیم که ما از آدرس شبکه 192.168.13.0 استفاده کردیم:
R1(config)#interface tunnel 0
R1(config-if)#ip address 192.168.13.1 255.255.255.0
R3(config)#interface tunnel 0
R3(config-if)#ip address 192.168.13.2 255.255.255.0
حالا لازم است یک روت بنویسم ، در هر روتر آدرس سرویس پروایدر Service Provider یا جایی که از آن اینترنت گرفته ایم را وارد می کنیم که در این مثال ما آدرس روتر R2 را برای روت نوشتن وارد می کنیم.
R1(config)#ip route 192.168.23.0 255.255.255.0 192.168.12.2
R3(config)#ip route 192.168.12.0 255.255.255.0 192.168.23.1
نکته: پروتکل gre به صورت پیشفرض در روتر های یا کلا در IOS سیسکو فعال می باشد و نیاز به فعال سازی نیست ولی در صورت نیاز از دستور tunnel mode gre ip استفاده می کنیم.
حال اگر تست کنید می بینید که روتر های R1 و R3 می توانند همدیگر را از طریق این تانل ببینند ولی PC های آن ها نمی توانند با هم در ارتباط باشن، برای حل این مشکل ما بین این دو روتر از پروتکل مسیریابی استفاده می کنیم که در اینجا ما eigrp را انتخاب می کنیم.
R1(config)#router eigrp 1
R1(config-router)#network 192.168.13.0
R1(config-router)#network 192.168.1.0
R3(config)#router eigrp 1
R3(config-router)#network 192.168.13.0
R3(config-router)#network 192.168.3.0
کار تمام است و حالا باید تمام شبکه ما بتواند بدون مشکل همدیگر را ببینند.
از دستور زیر هم برای رفع خطا و دیدن اطلاعات تانل مورد نظر استفاده می شود:
R#show interfaces tunnel 0

مراحل فوق برای پیاده سازی تونل GRE کافی است اما در صورت نیاز می توان از ویژگی های زیر نیز در ایجاد تونل GRE استفاده نمود.
با فعال کردن دستور اختیاری tunnel sequence-datagrams امکان مرتب سازی ترافیک های GRE در مقصد تونل امکان پذیر می شود. اینکار با اضافه شدن فیلد sequence number در هدر GRE صورت می پذیرد.
با فعال کردن دستور tunnel checksum فیلد اختیاری checksum به سربار GRE اضافه می شود که امکان تشخیص خطا در ترافیک های ارسالی GRE را فراهم می کند.
در صورتی که تمایل به احراز هویت طرفین ارتباط تونل GRE دارید، از دستور tunnel key استفاده کنید که با اضافه کردن فیلد اختیاری key در سربار GRE امکان احراز هویت طرفین را نسبت به یکدیگر فراهم می کند. کلید به صورت clear text منتقل می شود و از امنیت کافی برخوردار نیست.
با فعال کردن دستور keepalive در اینترفیس tunnel، طرفین ارتباط با ارسال بسته های کوچکی به نام keepalive به صورت دوره ای ارتباط را چک می کنند و در صورت عدم دریافت keepalive در چند بازه زمانی مشخص اینترفیس Tunnel قطع و یا down خواهد شد.
با دستور ip mtu 1464 مقدار MTU را در اینترفیس Tunnel به 1464 تغییر می دهیم، دقیق تر آن است که بگوییم مقداری که برای MTU در اینترفیس Tunnel در نظر می گیریم به سایز سربار اضافه شده ناشی از تونل GRE بستگی دارد و از عدد 1500 بایت، که مقدار پیش فرض MTU اکثر اینترفیس های فیزیکی است، کسر می شود. در این سناریو 20 بایت هدر IP و 16 بایت هدر GRE و در مجموع 36 بایت سربار تونل GRE به بسته اصلی اضافه شده است و بنابراین 36 بایت از 1500 بایت کسر شده و به عنوان MTU اینترفیس Tunnel تنظیم می گردد.
بررسی هدر GRE
شکل زیر چگونگی بسته بندی ترافیک IP را با پروتکل GRE نشان می دهد. به صورت پیش فرض GRE ما بین بسته داخلی و بیرونی قرار می گیرد و دو فیلد اصلی و اجباری دارد که هر کدام 2 بایت و مجموعا 4 بایت دارند. فیلد Protocol Type نوع بسته داخلی را مشخص می کند و دقیقا به خاطر همین فیلد است که هر نوع ترافیکی را می توان روی GRE سوار کرد. فیلد Flags عدم و یا عدم وجود فیلدهای اختیاری در GRE را نشان می دهد. بدیهی است در صورت وجود فیلدهای اختیاری که در ذیل معرفی می گردند، سایز هدر GRE از 4 بایت بیشتر خواهد شد. حداکثر سایز سربار GRE 16 بایت است.

در شکل زیر فبلدهای اختیاری پروتکل GRE در کنار فیلدهای اصلی نشان داده شده است. Sequence number، checksum و key فیلدهای اختیاری GRE هستند که به ترتیب وظیفه مرتب سازی ترافیک GRE، تشخیص خطا در ارسال ترافیک GRE و احراز هویت ابتدا و انتهای تونل نسبت به هم را به عهده دارند. کلید در GRE به صورت clear text و بدون رمزنگاری منتقل می شود.

شکل زیر ساختار سربار پروتکل GRE را به صورت دقیق تر نشان می دهد. فیلدهای C، K و S در GRE Flag نشان دهنده وجود یا عدم وجود قیلدهای اختیاری checksum، sequence number و key است.
