This site is best viewed using the updated version of Mozilla Firefox

Understanding and Configuring GRE Tunnel

আসসালামু আলাইকুম। আশাকরি মহান আল্লাহতায়ালার অশেষ রহমতে আপনারা সবাই ভালো আছেন।

আমরা ডাটা নেটওয়ার্কিং এ কাজ করতে গিয়ে প্রায়-ই VPN শব্দটা শুনে থাকি। নেটওয়ার্কিং এর বেসিক কোর্সসমূহেও এই VPN নিয়ে পড়ানো হয়। আজ আমরা এই VPN টেকনোলজি নিয়ে আলোচনা করবো।

VPN নিয়ে বিস্তারিত বলার আগে আমাদের আরো একটি জিনিষ ভালভাবে বুঝতে হবে, আর সেটা হলো “কানেক্টিভিটি”। বর্তমানে অনেক কোম্পানী রয়েছে যাদের বিভিন্ন লোকেশনে একাধিক অফিস রয়েছে। আর বিভিন্ন লোকেশনে থাকা একাধিক অফিসের মধ্যে নিয়মিত ডাটার আদান-প্রদান করতে হয়। যেমনঃ বিভিন্ন ব্যাংকের অনলাইন ব্যাকিং সার্ভিস রয়েছে। অনলাইন ব্যাকিং সার্ভিসের সুবিধা হলো, আপনার কোন একটি ব্যাংকের যে শাখায় এ্যাকাউন্ট থাকুক না কেন, আপনি দেশের যেকোন শাখায় টাকা জমা দিলেন সেই টাকা আবার অন্য যেকোন এ.টি.এম বুথ থেকে কয়েক মিনিটের মধ্যেই উত্তোলন করতে পারবেন। যেমন ধরুন, XYZ ব্যাংক এর কাওরান বাজার শাখায় আপনার একটি একাউন্ট রয়েছে, আপনার একজন আত্মীয় XYZ ব্যাংক এর পঞ্চগড় শাখায় আপনার এ্যাকাউন্টে দশ হাজার টাকা জমা দিলেন, এখন আপনি আছেন কক্সবাজারে, এবং আপনি কক্সবাজারের কোন একটি এ.টি.এম বুথ থেকে আপনার টাকা উত্তোলন করে নিলেন। এখন প্রশ্ন হলো যে, আপনার এ্যাকাউন্ট ছিল ঢাকার কাওরান বাজার শাখায়, আপনার আত্মীয় যখন পঞ্চগড় শাখায় গিয়ে আপনার এ্যাকাউন্টে টাকা জমা দিল সেই টাকা কিভাবে আপনার এ্যাকাউন্টে ঢুকলো, আবার আপনি যখন কক্সবাজারের একটি এ.টি.এম বুথ থেকে টাকা উত্তোলন করলেন সেই এ.টি.এম মেশিন জানলো কিভাবে যে আপনার এ্যাকাউন্টে টাকা জমা আছে? দিস ইজ অল এ্যাবাউট কানেক্টিভিটি।

অর্থাৎ, আপনার সমস্ত ব্যাংকিং তথ্য XYZ ব্যাংক এর ডাটা সেন্টারে রাখা কোন একটি সার্ভারের মধ্যে সংরক্ষিত থাকে। আপনি যখন যেখানেই টাকা জমা দিন না কেন, তা সাথে সাথে সেই সার্ভারে আপডেট হয়ে যায়। আবার যখন যেখান থেকেই টাকা উত্তোলন করুন না কেন টাকা উত্তোলন করার সময় সংশ্লিষ্ট এ.টি.এম মেশিন সেই সার্ভারের সাথে যোগাযোগ করে যে, আপনার এ্যাকাউন্টে যথেষ্ট পরিমান টাকা জমা আছে কিনা। আর মুহুর্তের মধ্যে এই কাজগুলো সম্পন্ন করার জন্য ব্যাংকের প্রতিটি শাখা ও এ.টি.এম বুথ তাদের কেন্দ্রীয় ডাটা সেন্টারের সাথে যুক্ত (কানেক্টেড) থাকে। আর এই কানেক্টিভিটি তারা নেয় বড় বড় বিভিন্ন আই.এস.পি এর কাছ থেকে। এই ধরণের কানেক্টিভিটিকে বলা হয় “ডাটা কানেক্টিভিটি”। “ডাটা কানেক্টিভিটি” নেওয়ার মূল উদ্দেশ্য হলো কোম্পানীর এক লোকেশনে থাকা একটি অফিসের সাথে অন্য লোকেশনে থাকা আরেকটি অফিসের মধ্যে ডাটার আদান প্রদান করা। এখানে পাবলিক ইন্টারনেট ব্যবহার করা মূখ্য উদ্দেশ্য নয়।

এখন, আমরা একটু দেখি আই.এস.পি এর সাথে একটি কোম্পানী কানেক্টিভিটি ঠিক কি রকমের হয়ে থাকে।

চিত্রে R1, R2 ও R3 একটি আই.এস.পি এর তিনটি রাউটার। এর মধ্যে R1 হলো কোর রাউটার, R2 হলো ঢাকার একটি POP এবং R3 হলো চট্টগ্রামের একটি POP । XYZ নামে একটি কোম্পানী এই আই.এস.পির কাছ থেকে ঢাকায় নিজেদের হেড অফিসে একটি কানেকশন নিয়েছে এবং চট্টগ্রামে নিজেদের ব্রাঞ্চ অফিসে একটি কানেকশন নিয়েছে্। এই XYZ নামক কোম্পানীর মূল উদ্দেশ্য হলো তাদের ঢাকা অফিস ও চট্টগ্রাম অফিসের মধ্যে ডাটা আদান-প্রদান করা।

XYZ নামক কোম্পানীর দুইটি অফিসের মধ্যে ডাটা আদান-প্রদানের আগে আমরা জানার চেষ্টা করি আই.এস.পি নেটওয়ার্ক মূলত কি ধরণের হয়। আই.এস.পি নেটওয়ার্কে থাকা রাউটারসমূহের মধ্যে ডায়নামিক রাউটিং প্রটোকল কনফিগার করা থাকে। এর ফলে আই.এস.পি নেটওয়ার্কে থাকা একটি রাউটার আরেকটি রাউটারকে চিনতে পারে। চিত্রে প্রদত্ত টপোলজি অনুযায়ী, আই.এস.পি রাউটারসমূহের মধ্যে OSPF কনফিগার করা হয়েছে।

R1#conf t
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 172.16.1.1 255.255.255.252
R1(config-if)#no shutdown 
R1(config-if)#description To-R2
R1(config-if)#duplex full 
R1(config-if)#speed 100
R1(config-if)#exit
R1(config)#interface fastEthernet 0/1
R1(config-if)#ip address 172.16.2.1 255.255.255.252
R1(config-if)#no shutdown 
R1(config-if)#description To-R3
R1(config-if)#duplex full 
R1(config-if)#speed 100
R1(config-if)#exit

R1(config)#router ospf 1
R1(config-router)#network 172.16.1.0 0.0.0.3 area 0
R1(config-router)#network 172.16.2.0 0.0.0.3 area 0
R1(config-router)#exit
R2#conf t
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 172.16.1.2 255.255.255.252
R2(config-if)#no shutdown 
R2(config-if)#description To-R1
R2(config-if)#duplex full 
R2(config-if)#speed 100
R2(config-if)#exit
R2(config)#interface fastEthernet 0/1
R2(config-if)#ip address 172.16.0.1 255.255.255.252
R2(config-if)#no shutdown 
R2(config-if)#description To-XYZ-DHK
R2(config-if)#duplex full 
R2(config-if)#speed 100
R2(config-if)#exit

R2(config)#router ospf 1
R2(config-router)#network 172.16.1.0 0.0.0.3 area 0
R2(config-router)#network 172.16.0.0 0.0.0.3 area 0
R2(config-router)#passive-interface fastEthernet 0/1
R2(config-router)#exit
R3#conf t
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 172.16.2.2 255.255.255.252
R3(config-if)#no shutdown 
R3(config-if)#description To-R1
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit
R3(config)#interface fastEthernet 0/1
R3(config-if)#ip address 172.16.3.1 255.255.255.252
R3(config-if)#no shutdown 
R3(config-if)#description To-XYZ-CTG
R3(config-if)#duplex full 
R3(config-if)#speed 100
R3(config-if)#exit

R3(config)#router ospf 1
R3(config-router)#network 172.16.2.0 0.0.0.3 area 0
R3(config-router)#network 172.16.3.0 0.0.0.3 area 0
R3(config-router)#passive-interface fastEthernet 0/1
R3(config-router)#exit

এই OSPF কনফিগার করার উদ্দেশ্য হলো আই.এস.পি নেটওয়ার্কে থাকা একটি রাউটারের সাথে আরেকটি রাউটারের যোগাযোগ নিশ্চিত করা।

এখন আমরা জানার চেষ্টা করবো, আই.এস.পি যখন তার XYZ নামক ক্লায়েন্টকে দুই লোকেশনে কানেকশন দিবে, তখন ক্লায়েন্ট কিভাবে ডাটা আদান-প্রদান করবে।

ধরি, XYZ কোম্পানীর ঢাকা অফিসের ল্যান আই.পি ব্লক 192.168.10.0/24 এবং চট্টগ্রাম অফিসের ল্যান আই.পি ব্লক 192.168.20.0/24 । যখন ঢাকা অফিসের কোন একটি কম্পিউটার চট্টগ্রাম অফিসের কোন একটি কম্পিউটারের কাছে প্যাকেট পাঠাবে তখন XYZ-DHK রাউটারের রাউটিং টেবিলে 192.168.20.0/24 নেটওয়ার্কটি থাকবে হবে। চিত্রে প্রদত্ত টপোলজি অনুযায়ী, 192.168.20.0/24 নেটওয়ার্কে যাওয়ার জন্য XYZ-DHK রাউটারে একটি স্ট্যাটিক রাউট কনফিগার করা যেতে পারে যার Next-hop হবে 172.16.0.1 । অতঃপর XYZ-DHK রাউটার প্যাকেটটিকে R2 রাউটারের কাছে পাঠাবে। এখন R2 রাউটার যদি উক্ত প্যাকেটটিকে R1 রাউটারের কাছে পাঠাতে চায় তাহলে R2 রাউটারের রাউটিং টেবিলে 192.168.20.0/24 নেটওয়ার্কটি থাকবে হবে এবং পরবর্তীতে R1 রাউটার যদি একই প্যাকেটকে R3 রাউটারের কাছে পাঠাতে চায় তাহলে R1 রাউটারের রাউটিং টেবিলেও 192.168.20.0/24 নেটওয়ার্কটি থাকবে হবে। নিজেদের রাউটিং টেবিলে 192.168.20.0/24 নেটওয়ার্কটি না থাকলে আই.এস.পি এর রাউটারসমূহ ঐ নেটওয়ার্কের দিকে যাওয়া প্যাকেটগুলো Drop করে দিবে (এটা রাউটিং এর মূল সুত্র)।

কিন্তু আই.এস.পি কখনো তার ক্লায়েন্ট এর ল্যান আই.পি ব্লক নিজের রাউটারের রাউটিং টেবিলে আনে না। এর কারণ হলো, হাজার হাজার ক্লায়েন্টের ল্যান আই.পি ব্লক নিজের রাউটারের রাউটিং টেবিলে আনলে রাউটারের রাউটিং টেবিলের আকার বেড়ে যায় যা রাউটারের ইফিসিয়েন্সি হ্রাস করে। এছাড়া আরও একটি সমস্যা হলো কোন একটি নির্দিষ্ট আই.পি ব্লক যেমনঃ 192.168.20.0/24 একাধিক ক্লায়েন্টের থাকতে পারে। সুতরাং যেসকল আই.এস.পি এর MPLS বেজড নেটওয়ার্ক নেই তাদের জন্য এই ধরণের রাউটিং সুবিধা প্রদান করা সম্ভব নয়। এক্ষেত্রে, XYZ কোম্পানীর ঢাকা থেকে চট্টগ্রামে ডাটা আদান-প্রদান জনিত সমস্যার সমাধান হিসেবে VPN ব্যবহার করতে হবে।

Virtual Private Network (VPN)

VPN এর পূর্ণরূপ হলো Virtual Private Network । VPN হলো এমন এক ধরণের টেকনিক যার মাধ্যমে একটি রাউটার থেকে এক বা একাধিক Hop দূরত্বে থাকা আরেকটি রাউটারের সাথে একটি পয়েন্ট-টু-পয়েন্ট ভার্চুয়াল/লজিক্যাল টানেল (Tunnel) তৈরী করা হয় এবং উক্ত ভার্চুয়াল টানেলের মধ্য দিয়ে রাউটারদ্বয় এমন কিছু ডাটা শেয়ার করে যা কিনা সাধারণ আই.পি নেটওয়ার্কের মধ্য দিয়ে শেয়ার করা যায় না অথবা শেয়ার করা গেলেও তা নিরাপদ নয়।

উদাহরণস্বরূপ, আমাদের চিত্রের টপোলজি অনুযায়ী, XYZ নামক কোম্পানী ঢাকা থেকে চট্টগ্রামে দুইটি অফিসের মধ্যে সাধারণভাবে ডাটা আদান-প্রদান করতে পারছে না। কারণ, আই.এস.পি তার দুই লোকেশনের আই.পি ব্লককে নিজের মধ্য দিয়ে ট্রানজিট দিচ্ছে না অর্থাৎ যেতে দিচ্ছে না। এমতাবস্থায়, XYZ নামক কোম্পানী তার ঢাকার রাউটারের সাথে চট্টগ্রামের রাউটারের একটি পয়েন্ট-টু-পয়েন্ট ভার্চুয়াল টানেল তৈরী করে সেই ভার্চুয়াল টানেলের মধ্য দিয়ে নিজের দুই লোকেশনের প্রাইভেট আই.পি ব্লককে রাউটিং করে নিতে পারে। আর এই ভার্চুয়াল টানেলকেই বলা হচ্ছে VPN ।

VPN এর Virtual শব্দটি দ্বারা বুঝানো হয়, দুইটি ভৌগলিক লোকেশনে থাকা রাউটারদ্বয়ের মধ্যে একটি লজিক্যাল পয়েন্ট-টু-পয়েন্ট সংযোগ। অর্থাৎ রাউটারদ্বয় একে অপরের কাছ থেকে দূরে থাকলেও ধরে নেওয়া হয় তারা ভার্চুয়ালভাবে একে অপরের সাথে সরাসরি যুক্ত। আর VPN এর Private শব্দটি দ্বারা বুঝানো হয়, এই ভার্চুয়াল টানেলের মধ্য দিয়ে রাউটারদ্বয়ের মধ্যে যা কিছু আদান-প্রদান হবে তা গোপন থাকবে। অর্থাৎ, এই দুই রাউটার ছাড়া মধ্যবর্তী অন্যান্য রাউটারসমূহ আদান-প্রদানকৃত ডাটা পড়তে পারবে না। এতে করে ডাটার নিরাপত্তা বৃদ্ধি পাবে।

বর্তমানে VPN কনফিগার করার জন্য GRE, IPSec, L2TP, EoIP, DMVPN সহ আরো অসংখ্য প্রটোকল রয়েছে। কাজের ধরণ ও প্রয়োজনীয়তার উপর ভিত্তি করে একজন নেটওয়ার্ক এ্যাডমিনিষ্ট্রেটর যেকোন একটি প্রটোকল ব্যবহার করে থাকেন। আমাদের এই টিউটোরিয়ালের আলোচ্য বিষয় হলো GRE । আমরা এখানে GRE সম্পর্কে বিস্তারিত আলোচনা করবো এবং কিভাবে GRE কনফিগার করতে হয় তা দেখবো।

Generic Routing Encapsulation (GRE)

GRE এর পূর্ণরূপ হলো Generic Routing Encapsulation । ইহা এক ধরণের VPN প্রটোকল যার মাধ্যমে দুইটি ভৌগলিক দূরত্বে থাকা রাউটারদ্বয়ের মধ্যে পয়েন্ট-টু-পয়েন্ট ভার্চুয়াল টানেল তৈরী করা যায়। এই প্রটোকলটি আবিষ্কারক হলো Cisco । GRE একটি VPN প্রটোকল হলেও VPN এর সব ধরণের সুবিধা এর মধ্যে নেই। যেমনঃ GRE এর মাধ্যমে দুইটি ভৌগলিক দূরত্বে থাকা রাউটারদ্বয়ের মধ্যে পয়েন্ট-টু-পয়েন্ট ভার্চুয়াল টানেল তৈরী করা যায়। কিন্তু তৈরীকৃত ভার্চুয়াল টানেলের মধ্য দিয়ে আদান-প্রদানকৃত ডাটার নিরাপত্তা নিশ্চিত করা যায় না। অর্থাৎ, GRE এর Virtual ক্যাপাসিটি আছে, কিন্তু Private ক্যাপাসিটি নেই। ভার্চুয়াল টানেলের মধ্য দিয়ে আদান-প্রদানকৃত ডাটার নিরাপত্তা নিশ্চিত করার জন্য ডাটা Encrypt করার দরকার হয়। আর এই Encryption এর জন্য বিভিন্ন ধরণের Encryption প্রটোকল রয়েছে যা GRE তে সাপোর্ট করে না। অর্থাৎ GRE টানেলের মধ্য দিয়ে আদান-প্রদানকৃত ডাটাসমূহ মধ্যবর্তী রাউটারসমূহ চাইলে পড়তে পারে। GRE একটি বেসিক লেভেলের Tunneling প্রটোকল। এবং যেসব ক্ষেত্রে ডাটার নিরাপত্তার বিষয়টি খুবই গুরুত্বপূর্ণ সেসব ক্ষেত্রে GRE না ব্যবহার করে আরো এ্যাডভান্স লেভেলের প্রটোকল (যেমনঃ IPSec) ব্যবহার করা উচিত।

GRE এর নিরাপত্তাজনিত দুর্বলতা থাকা সত্ত্বেও আই.এস.পি নেটওয়ার্কে এটি জনপ্রিয় এবং বহুল ব্যবহৃত একটি প্রটোকল। কারণ, সাধারণত আই.এস.পিসমূহ এবং ছোট প্রতিষ্ঠানসমূহ ডাটার নিরাপত্তা নিয়ে খুব একটা কাজ করে না, এদের কাজ হচ্ছে শুধুমাত্র এক লোকেশনের রাউটার থেকে আরেক লোকেশনের রাউটার পর্যন্ত রাউটিং নিশ্চিত করা। যেমন VPN টানেলের মধ্যে দিয়ে রাউটিং এর জন্য কেউ যদি এমন কোন ডাইনামিক রাউটিং প্রটোকল ব্যবহার করতে চায় যার জন্য Multicast প্যাকেট ব্যবহৃত হয় (যেমনঃ RIP) সেক্ষেত্রে GRE একটি সহজ সমাধান। কারণ, IPSec প্রটোকল Multicast সাপোর্ট করে না, তাই IPSec অপেক্ষাকৃত নিরাপদ হলেও এই ধরণের ক্ষেত্রে তা কাজে লাগে না। তবে যে সমস্ত প্রতিষ্ঠান (যেমনঃ বড় এন্টারপ্রাইজ, ব্যাংক ইত্যাদি) ডাটার নিরাপত্তা নিয়ে উদ্বিগ্ন তারা IPSec ব্যবহার করে থাকে। আবার এ্যাডভান্স লেভেলে কিছু বিশেষ কাজ করার জন্য GRE এবং IPSec কে একই সাথে ব্যবহার করা হয় যেমনঃ GRE over IPSec বা IPSec over GRE ইত্যাদি। আমরা পরবর্তী কোন টিউটোরিয়ালে IPSec নিয়ে বিস্তারিত আলোচনা করবো ইনশা-আল্লাহ।

Configuration

এখন আমরা দেখবো কিভাবে GRE Tunnel কনফিগার করতে হয়। কনফিগারেশনের শুরুতে আমরা টপোলজিটি একটু বুঝে নিই। চিত্রে R1, R2 এবং R3 হলো আই.এস.পি নেটওয়ার্কের তিনটি রাউটার। এই রাউটারসমূহের মধ্যে রাউটিং প্রটোকল হিসেবে ইতিমধ্যে OSPF কনফিগার করা হয়েছে । R1 এর সাথে XYZ কোম্পানীর ঢাকা অফিস যুক্ত (XYZ-DHK রাউটার) যার পয়েন্ট-টু-পয়েন্ট আই.পি ব্লক 172.16.0.0/30 এবং R3 এর সাথে XYZ কোম্পানীর চট্টগ্রাম অফিস যুক্ত (XYZ-CTG রাউটার) যার পয়েন্ট-টু-পয়েন্ট আই.পি ব্লক 172.16.3.0/30 ।

প্রথমেই আমরা XYZ-DHK এবং XYZ-CTG রাউটারের আই.পি কনফিগার করে নিই।

XYZ-DHK#conf t
XYZ-DHK(config)#interface fastEthernet 0/0
XYZ-DHK(config-if)#ip address 172.16.0.2 255.255.255.252
XYZ-DHK(config-if)#no shutdown 
XYZ-DHK(config-if)#description To-ISP
XYZ-DHK(config-if)#duplex full 
XYZ-DHK(config-if)#speed 100
XYZ-DHK(config-if)#exit
XYZ-DHK(config)#interface fastEthernet 0/1
XYZ-DHK(config-if)#ip address 192.168.10.1 255.255.255.0
XYZ-DHK(config-if)#no shutdown
XYZ-DHK(config-if)#description DHAKA-LAN
XYZ-DHK(config-if)#duplex full 
XYZ-DHK(config-if)#speed 100
XYZ-DHK(config-if)#exit
XYZ-CTG#conf t
XYZ-CTG(config)#interface fastEthernet 0/0
XYZ-CTG(config-if)#ip address 172.16.3.2 255.255.255.252
XYZ-CTG(config-if)#no shutdown 
XYZ-CTG(config-if)#description To-ISP
XYZ-CTG(config-if)#duplex full 
XYZ-CTG(config-if)#speed 100
XYZ-CTG(config-if)#exit
XYZ-CTG(config)#interface fastEthernet 0/1
XYZ-CTG(config-if)#ip address 192.168.20.1 255.255.255.0
XYZ-CTG(config-if)#no shutdown
XYZ-CTG(config-if)#description CHITTAGONG-LAN
XYZ-CTG(config-if)#duplex full 
XYZ-CTG(config-if)#speed 100
XYZ-CTG(config-if)#exit

আই.পি কনফিগারেশনের পর আমরা XYZ-DHK এবং XYZ-CTG রাউটারে দুইটি স্ট্যাটিক রাউট কনফিগার করবো যাতে রাউটারদ্বয় আই.এস.পি নেটওয়ার্কের মধ্য দিয়ে পরষ্পরের সাথে কমিউনিকেট করতে পারে।

XYZ-DHK#conf t
XYZ-DHK(config)#ip route 172.16.3.0 255.255.255.252 172.16.0.1
XYZ-DHK(config)#exit
XYZ-CTG#conf t
XYZ-CTG(config)#ip route 172.16.0.0 255.255.255.252 172.16.3.1
XYZ-CTG(config)#exit

এখানে একটি কথা বিশেষভাবে উল্লেখ্য যে, যেহেতু এটি ডাটা কানেক্টিভিটি তাই শুধুমাত্র একটি স্পেসিফেক ডেষ্টিনেশনের জন্য রাউট কনফিগার করলেই চলবে, কোন ডিফল্ট রাউট লাগবে না। তবে, ডিফল্ট রাউট দিলেও হবে, কিন্তু ডাটা কানেক্টিভিটির ক্ষেত্রে ডিফল্ট রাউট না দেওয়াই ভাল। এতে করে ক্লায়েণ্ট এর LAN সাইড থেকে অনাকাঙ্খিত ব্রডকাষ্ট ট্রাফিক আই.এস.পি এর দিকে যাবে না, যা আই.এস.পি এবং ক্লায়েন্ট উভয়ের জন্যই ভাল।

রাউট কনফিগার করা শেষ হলে আমরা XYZ-DHK থেকে XYZ-CTG রাউটারের কানেক্টিভিটি চেক করে নিই।

XYZ-DHK#ping 172.16.3.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.3.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/79/112 ms
XYZ-CTG#ping 172.16.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/72/92 ms

এখন আমরা GRE Tunnel কনফিগার করবো। প্রথমে XYZ-DHK রাউটারে কনফিগার করি।

XYZ-DHK#conf t
XYZ-DHK(config)#interface tunnel 0
XYZ-DHK(config-if)#tunnel source 172.16.0.2
XYZ-DHK(config-if)#tunnel destination 172.16.3.2
XYZ-DHK(config-if)#tunnel mode gre ip
XYZ-DHK(config-if)#tunnel key 1357 
XYZ-DHK(config-if)#keepalive 30 2
XYZ-DHK(config-if)#ip mtu 1400
XYZ-DHK(config-if)#ip tcp adjust-mss 1360
XYZ-DHK(config-if)#ip address 10.0.0.1 255.255.255.252
XYZ-DHK(config-if)#no shutdown 
XYZ-DHK(config-if)#exit
interface tunnel 0

GRE Tunnel কনফিগারেশনের শুরুতেই আমরা একটি Tunnel ইন্টারফেস কনফিগার করলাম। Tunnel ইন্টারফেস হলো একটি লজিক্যাল ইন্টারফেস। এখানে, Tunnel ইন্টারফেসটির নম্বর হলো 0 । এটি একটি নিউমেরিক ভ্যালু। রিমোট ডেষ্টিনেশনে থাকা রাউটার অর্থাৎ যে রাউটারের সাথে GRE Tunnel কনফিগার করা হচ্ছে সে রাউটারে এই ইন্টারফেস নম্বর এক না হলেও চলবে।

tunnel source 172.16.0.2

এখানে আমরা XYZ-DHK রাউটারে GRE Tunnel এর সোর্স আই.পি ডিফাইন করলাম। XYZ-DHK রাউটারের WAN আই.পি টিই হবে GRE Tunnel এর সোর্স আই.পি। GRE Tunnel এর সোর্স হিসেবে আই.পি এর পরিবর্তে Exit Interface ও ডিফাইন করা যায়। তবে যদি কোন কারণে একটি ইন্টারফেসে একাধিক আই.পি থাকে সেক্ষেত্রে Exit Interface এর পরিবর্তে স্পেসিফিক আই.পি এ্যাড্রেস ডিফাইন করতে হবে।

tunnel destination 172.16.3.2

এখানে আমরা GRE Tunnel এর ডেষ্টিনেশন আই.পি অর্থাৎ যে রাউটারের সাথে GRE Tunnel কনফিগার করা হচ্ছে সে রাউটারের WAN আই.পি টি ডিফাইন করলাম।

tunnel mode gre ip

এখানে টানেল মোড হিসেবে GRE এনক্যাপসুলেশন ডিফাইন করা হলো।

tunnel key 1357

এখানে, “tunnel key” হিসেবে 1357 ডিফাইন করলাম। একটি একটি নিউমেরিক ভ্যালু, সাধারণত পাসওয়ার্ডের ন্যায় কাজ করে এবং যেকোন ভ্যালু হতে পারে। GRE Tunnel এর ক্ষেত্রে এই পাসওয়ার্ড দেওয়ার বাধ্যবাধকতা নেই। তবে দিলে GRE Tunnel এর উভয় পাশের রাউটারেই দিতে হবে এবং একই পাসওয়ার্ড দিতে হবে। তা না হলে টানেল UP হবে না। এই পাসওয়ার্ড দেওয়ার উদ্দেশ্য হলো টানেল UP করার জন্য দুইটি রাউটারের মধ্যে Authentication নিশ্চিত করা, যাতে করে দূর্ঘটনাবশতঃ কোন Unknown রাউটারের সাথে টানেল Establish না হয়। তবে এই পাসওয়ার্ডের মাধ্যমে কিন্তু কোন ট্রাফিক Encrypted হবে না। অর্থাৎ, এই পাসওয়ার্ডটি টানেলের মধ্য দিয়ে আদান-প্রদানকৃত ট্রাফিককে সুরক্ষিত করবে না।

keepalive 20 2

আমরা টানেল এর Keepalive ভ্যালু ডিফাইন করলাম। এখানে 20 হলো Keepalive period, এর অর্থ হলো রাউটার 20 সেকেন্ড পর পর টানেলের রিমোট রাউটারকে একটি করে Keepalive ম্যাসেজ পাঠাবে এটা চেক করা জন্য যে, রাউটারটি UP আছে কি না। আর 2 হলো Keepalive retries, এর অর্থ হলো রাউটার এই Keepalive ম্যাসেজ সর্বোচ্চ দুইবার পাঠাবে। যদি এই সময়ের মধ্যে কোন Acknowledgement না আসে তাহলে রাউটার ধরে নেবে যে তার রিমোট রাউটারটি Reachable না, অতএব রাউটার টানেলটিকে DOWN করে দিবে। একাধিক GRE Tunnel এর মধ্য দিয়ে Fail-over কনফিগারেশনের জন্য এই Keepalive অপশনটি কাজে লাগে, তবে এটা ব্যবহারের কোন বাধ্যবাধকতা নেই। যদি Keepalive কনফিগার করা হয় তাহলে দুই পাশের রাউটারে এই Keepalive period ও Keepalive retries ভ্যালু একই হওয়ারও কোন বাধ্যবাধকতা নেই। এমনকি এক পাশের রাউটারে Keepalive কনফিগার করে যদি অন্য পাশের রাউটারে কনফিগার নাও করা হয় তাতেও টানেল UP হওয়ার ক্ষেত্রে কোন সমস্যা হবে না।

ip mtu 1400
ip tcp adjust-mss 1360

আমরা GRE Tunnel এর IP MTU এবং TCP MSS সাইজ ডিফাইন করলাম। এই IP MTU এবং TCP MSS সাইজ সার্ভিস প্রোভাইডার নেটওয়ার্কে খুবই ক্রিটিক্যাল ফ্যাক্টর। এটি নিযে আমরা পরবর্তী কোন টিউটোরিয়ালে অনেক বিস্তারিত আলোচনা করবো ইনশা-আল্লাহ।

ip address 10.0.0.1 255.255.255.252

আমরা টানেল ইন্টারফেসে একটি আই.পি ডিফাইন করলাম। এটি যেকোন একটি প্রাইভেট আই.পি হতে পারে এবং /30 (পয়েন্ট-টু-পয়েন্ট) হওয়া ভাল।

no shutdown

আমরা টানেল ইন্টারফেসটিকে Administratively UP করলাম। যদিও নতুন টানেল ইন্টারফেস কনফিগার করার ক্ষেত্রে no shutdown কমান্ড দিতে হয় না, বাই ডিফল্ট UP হয়ে যায়। তারপরও no shutdown কমান্ড দেওয়ার অভ্যাস থাকা মন্দ নয়।

যদি আমরা XYZ-DHK রাউটারে GRE Tunnel কনফিগারেশনের প্যারামিটারগুলো বুঝে থাকি তাহলে XYZ-CTG রাউটারেও নিম্নোক্তভাবে কনফিগার করবো।

XYZ-CTG#conf t
XYZ-CTG(config)#interface tunnel 0
XYZ-CTG(config-if)#tunnel source 172.16.3.2
XYZ-CTG(config-if)#tunnel destination 172.16.0.2
XYZ-CTG(config-if)#tunnel mode gre ip
XYZ-CTG(config-if)#tunnel key 1357 
XYZ-CTG(config-if)#keepalive 20 2
XYZ-CTG(config-if)#ip mtu 1400
XYZ-CTG(config-if)#ip tcp adjust-mss 1360
XYZ-CTG(config-if)#ip address 10.0.0.2 255.255.255.252
XYZ-CTG(config-if)#no shutdown 
XYZ-CTG(config-if)#exit

উভয় রাউটারের GRE Tunnel কনফিগার করা শেষ হলে আমরা রাউটারদ্বয়ে দেখবো টানেল UP হয়েছে কিনা এবং রাউটারদ্বয় তাদের টানেলের রিমোট আই.পি কে PING পাচ্ছে কি না।

XYZ-DHK#show ip interface brief tunnel 0
Interface        IP-Address      OK? Method Status      Protocol
Tunnel0          10.0.0.1        YES manual up          up   

XYZ-DHK#ping 10.0.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 64/78/92 ms
XYZ-CTG#show ip interface brief tunnel 0
Interface        IP-Address      OK? Method Status      Protocol
Tunnel0          10.0.0.2        YES manual up          up

XYZ-CTG#ping 10.0.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 80/110/200 ms

যখন আমাদের GRE Tunnel কনফিগার করা শেষ হবে এবং আমরা টানেলের এক প্রান্তের রাউটার থেকে আরেক প্রান্তের রাউটারকে PING করে পাবো, তখন আমাদের লজিক্যাল টপোলজিটি হবে ঠিক নিচের চিত্রের মতো।

চিত্রের লজিক্যাল টপোলজি থেকে আমরা দেখতে পাচ্ছি যে, যখন আমরা যথাযথভাবে GRE Tunnel কনফিগার করলাম, তখন এক প্রান্তের রাউটার XYZ-DHK এর সাথে অপর প্রান্তের রাউটার XYZ-CTG এর মধ্যে একটি লজিক্যাল পয়েন্ট-টু-পয়েণ্ট কানেক্টিভিটি তৈরী হয়েছে। এই লজিক্যাল পয়েন্ট-টু-পয়েণ্ট কানেক্টিভিটিকেই বলা হয় টানেল (Tunnel) । অর্থাৎ আমাদেরকে কল্পনা করতে হবে যে, আমাদের ঢাকা অফিসের রাউটার এবং চট্টগ্রাম অফিসের রাউটার সরাসরি একটি পয়েন্ট-টু-পয়েন্ট লিঙ্ক দিয়ে যুক্ত। এই পয়েন্ট-টু-পয়েন্ট লিঙ্ক এর এক প্রান্তের XYZ-DHK রাউটারে একটি আই.পি 10.0.0.1 এবং অপর প্রান্তের XYZ-CTG রাউটারে আরেকটি আই.পি 10.0.0.2 বসানো হয়েছে।

এখন আমরা এই লজিক্যাল পয়েন্ট-টু-পয়েণ্ট কানেক্টিভিটি বা টানেলের উপর দিয়ে ঢাকা অফিসের LAN থেকে চট্টগ্রাম অফিসের LAN এ যেকোন ডাটা পাঠাতে পারি। আর এজন্য আমাদেরকে রাউট কনফিগার করতে হবে। এই রাউটটি স্ট্যাটিক বা ডাইনামিক যেকোনটিই হতে পারে। আমরা এখানে স্ট্যাটিক রাউট কনফিগার করবো।

XYZ-DHK#conf t
XYZ-DHK(config)#ip route 192.168.20.0 255.255.255.0 10.0.0.2
XYZ-DHK(config)#exit
XYZ-CTG#conf t
XYZ-CTG(config)#ip route 192.168.10.0 255.255.255.0 10.0.0.1
XYZ-CTG(config)#exit

উপরোক্তভাবে রাউট কনফিগার করার পর আমরা ঢাকা অফিসের LAN এর PC থেকে চট্টগ্রাম অফিসের LAN এর PC কে PING দিয়ে Reachability চেক করবো।

C:\Users\User>ping 192.168.20.2
Pinging 192.168.20.2 with 32 bytes of data:
Reply from 192.168.20.2: bytes=32 time=14ms TTL=62
Reply from 192.168.20.2: bytes=32 time=11ms TTL=62
Reply from 192.168.20.2: bytes=32 time=14ms TTL=62
Reply from 192.168.20.2: bytes=32 time=21ms TTL=62

Ping statistics for 192.168.20.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 11ms, Maximum = 21ms, Average = 15ms

আমরা এখানে দেখতে পাচ্ছি যে, ঢাকা অফিসের LAN এর PC থেকে চট্টগ্রাম অফিসের LAN এর PC কে PING পাওয়া যাচ্ছে। অর্থাৎ আমাদের ঢাকা অফিসের LAN এর PC থেকে চট্টগ্রাম অফিসের LAN এর মধ্যে ডাটা ট্রান্সমিট হচ্ছে।

এখন আমরা একটু বুঝার চেষ্টা করি আসলে এই কমিউনিকেশনটি ঠিক কিভাবে হচ্ছে।

১. যখন আমরা ঢাকা অফিসের PC (192.168.10.2) থেকে চট্টগ্রাম অফিসের PC (192.168.20.2) কে PING দিলাম তখন ঢাকা অফিসের PC টি TCP/IP এনক্যাপসুলেশন প্রসেসে একটি ICMP প্যাকেট জেনারেট করলো যার Network Layer এর সোর্স আই.পি হলো 192.168.10.2 এবং ডেষ্টিনেশন আই.পি হলো 192.168.20.2 ।

২. প্রথমেই এই প্যাকেটটি fa0/1 ইন্টারফেস দিয়ে XYZ-DHK রাউটারের নিকট আসবে এবং রাউটার প্যাকেটটির ডেষ্টিনেশন আই.পি টি নিজের রাউটিং টেবিলের সাথে মিলিয়ে দেখবে। এই রাউটিং টেবিল লুক-আপ প্রসেসে XYZ-DHK রাউটার দেখবে 192.168.20.0/24 নেটওয়ার্কটির জন্য Next-hop হলো 10.0.0.2 এবং এই 10.0.0.2 Next-hop টি নিজের “Tunnel 0” ইন্টারফেস দিয়ে Reachable ।

XYZ-DHK#show ip route 
Gateway of last resort is not set
C    192.168.10.0/24 is directly connected, Loopback0
     172.16.0.0/30 is subnetted, 2 subnets
C       172.16.0.0 is directly connected, FastEthernet0/0
S       172.16.3.0 [1/0] via 172.16.0.1
S    192.168.20.0/24 [1/0] via 10.0.0.2
     10.0.0.0/30 is subnetted, 1 subnets
C       10.0.0.0 is directly connected, Tunnel0

৩. কিন্তু “Tunnel 0” ইন্টারফেসটি যেহেতু একটি লজিক্যাল VPN ইন্টারফেস, তাই রাউটার প্রথমেই “Tunnel 0” ইন্টারফেসটির কনফিগারেশন অনুযায়ী মূল আই.পি প্যাকেটটির Network Layer এর Header (Original Header) এর উপর আরো একটি অতিরিক্ত Header (Outer Header/GRE Header) যোগ করবে যার সোর্স আই.পি হবে 172.16.0.2 এবং ডেষ্টিনেশন আই.পি হবে 172.16.3.2 ।

অতঃপর রাউটার 172.16.3.2 আই.পি এর কাছে প্যাকেট ডেলিভারীর জন্য তার রাউটিং টেবিল অনুযায়ী প্যাকেটটিকে আই.এস.পি রাউটারের (R2) কাছে পাঠাবে।

৪. যখন আই.এস.পি রাউটার (R2) প্যাকেটটি রিসিভ করবে তখন এটি প্যাকেটের Outer Header চেক করবে যার সোর্স আই.পি 172.16.0.2 এবং ডেষ্টিনেশন আই.পি 172.16.3.2 । এখানে আই.এস.পি রাউটার প্যাকেটের Original Header চেক করবে না। এভাবে আই.এস.পি নেটওয়ার্কে যতগুলো রাউটারই থাকুক না কেন সবগুলো রাউটারই একে একে প্যাকেটের Outer Header এ থাকা ডেষ্টিনেশন আই.পি দেখে XYZ-CTG রাউটারের (172.16.3.2) কাছে প্যাকেটটি ডেলিভারী দিবে।

৫. যখন XYZ-CTG রাউটার প্যাকেটটি পাবে, তখন এটি প্রথমে প্যাকেটটির Outer Header খুলবে এবং পরবর্তীতে প্যাকেটটির Original Header খুলে সেই Original Header এ থাকা মূল ডেষ্টিনেশন 192.168.20.2 (চট্টগ্রাম এর PC) এর কাছে প্যাকেট পৌছে দিবে। এবং চট্টগ্রাম এর PC যখন ঢাকার PC কে Reply পাঠাবে তাও ঠিক একই প্রক্রিয়ায় ঢাকার PC এর কাছে পৌছাবে।

আমরা যদি ঢাকা অফিসের PC থেকে চট্টগ্রাম অফিসের PC কে Traceroute করি তাহলে Transmission পাথটি হবে নিম্নরূপ।

C:\Users\User>tracert -d 192.168.20.2
Tracing route to 8.8.8.8 over a maximum of 30
  1     3 ms     1 ms     3 ms  192.168.10.1
  2    10 ms     8 ms     9 ms  10.0.0.2
  3     7 ms     9 ms     5 ms  192.168.20.2
Trace complete.

অর্থাৎ, XYZ-DHK রাউটার যখন প্যাকেটটিকে তার Next-hop এর কাছে ফরোয়ার্ড করেছে তখন এটি কিন্তু তার WAN Gateway 172.16.0.1 এর কাছে ফরোয়ার্ড করে নাই। এটি প্যাকেটটিকে ফরোয়ার্ড করেছে টানেলের রিমোট আই.পি 10.0.0.2 এর দিকে। আর এই 10.0.0.2 যেহেতু টানেল ইন্টারফেস দিয়ে Reachable তাই রাউটার প্যাকেটটের IP Header সাথে আরো একটি GRE Header যোগ করে GRE Tunnel এর ডেষ্টিনেশন 172.16.3.2 এর কাছে প্যাকেট পাঠিয়েছে।

আশাকরি এই টিউটোরিয়ালটি দেখে আপনারা VPN সম্পর্কে কিছুটা ধারণা পাবেন এবং Cisco রাউটারে কিভাবে GRE Tunnel কনফিগার করতে হয় তাও জানতে পারবেন। ভাল থাকবেন, আল্লাহ হাফেজ।