একজন নেটওয়ার্ক প্রফেশনাল হিসেবে আমরা বিভিন্ন সময় একাধিক নেটওয়ার্কের মধ্যে রাউটিং কনফিগার করে থাকি। এই রাউটিং কনফিগারেশন বিভিন্নভাবে করা যায়। যেমনঃ ছোট নেটওয়ার্কের ক্ষেত্রে স্ট্যাটিক রাউটিং এবং বড় আকারের নেটওয়ার্কের ক্ষেত্রে ডাইনামিক রাউটিং। ডাইনামিক রাউটিং কনফিগার করার জন্য বিভিন্ন ধরণের ডাইনামিক রাউটিং প্রটোকল যেমনঃ RIP, EIGRP, OSFP ব্যবহৃত হয়। আমরা যারা CCNA কোর্সটি করেছি তারা সবাই মোটামুটি এই তিনটি রাউটিং প্রটোকল সম্পর্কে কম-বেশি জানি। এই তিনটি প্রটোকল ছাড়াও আরো কিছু ডাইনামিক রাউটিং প্রটোকল রয়েছে, এগুলো হলো IS-IS ও BGP। আমাদের এই টিউটোরিয়ালের আলোচ্য বিষয় হলো ডাইনামিক রাউটিং প্রটোকল BGP।
ডাইনামিক রাউটিং প্রটোকলসমূহকে দুইটি শ্রেণীতে ভাগ করা যায়।
১. Interior Gateway Protocol (IGP) ২. Exterior Gateway Protocol (EGP)
IGP ও EGP এর মধ্যে মূল পার্থক্য হলো, আমরা যখন একই Autonomous System (AS) এর মধ্যে রাউটিং করি তখন IGP ব্যবহার করি, আর RIP, EIGRP, OSPF হলো এই IGP শ্রেনীভুক্ত। অপরদিকে আমরা যখন একাধিক Autonomous System (AS) এর মধ্যে রাউটিং করি তখন EGP ব্যবহার করি, BGP ই হলো একমাত্র EGP যা কিনা একাধিক AS এর মধ্যে রাউটিং করতে পারে।
Autonomous System বা সংক্ষেপে AS বলতে এমন একটি রাউটিং এরিয়া বা ডোমেইনকে বুঝায় যেখানে একাধিক রাউটার একই রাউটিং পলিসি বা মালিকানার অধীণে থাকে। প্রতিটি AS কে একটি 32 বিট এর স্বতন্ত্র ভ্যালু দিয়ে চিহ্নিত করা হয়। এই ভ্যালুটিকে বলা হয় Autonomous System Number বা সংক্ষেপে ASN। ইন্টারনেটের পাবলিক আই.পি বরাদ্দের জন্য দায়িত্বপ্রাপ্ত Regional Internet Registry (RIR) সমূহ কোন প্রতিষ্ঠানকে পাবলিক আই.পি এর পাশাপাশি একটি AS নম্বর প্রদান করে। যেহেতু প্রতিটি কোম্পানীর অনুকূলে বরাদ্দকৃত AS নম্বরটি আলাদা হয়ে থাকে, তাই কোম্পানীসমূহ তাদের এই ভিন্ন ভিন্ন AS এর মধ্যে রাউটিং করার জন্য EGP ব্যবহার করে, আর বর্তমানে Border Gateway Protocol বা BGP ই হলো একমাত্র EGP যা কিনা একাধিক AS এর মধ্যে রাউটিং করতে পারে।
একাধিক AS এর মধ্যে রাউটিং করা ছাড়াও BGP ব্যবহারের আরেকটি বড় উদ্দেশ্য রয়েছে এবং সেটি হচেছ AS এর Redundancy। উদাহরণস্বরূপঃ আমরা যখন কোন আই.এস.পি এর কাছ থেকে ইন্টারনেট কানেকশন নিই তখন আই.এস.পি আমাদের এক বা একাধিক পাবলিক আই.পি এ্যাড্রেস দেয়। ঐ পাবলিক আই.পি এ্যাড্রেসের মাধ্যমে আমরা ইন্টারনেট ব্যবহার করি এবং আমাদের সার্ভারসমূহ কনফিগার করে থাকি (যেমনঃ মেইল সার্ভার)। যদি কোনো কারণে আমরা আই.এস.পি পরিবর্তন করি তাহলে আই.এস.পি তার প্রদত্ত আই.পি সমূহ ফিরিয়ে নেয় এবং নতুন আই.এস.পি তার নিজের আই.পি দেয়। এক্ষেত্রে আগের আই.এস.পি থেকে পাওয়া আই.পি দিয়ে কনফিগারকৃত মেইল সার্ভারটি নতুন আই.এস.পি এর আই.পি দিয়ে আবার কনফিগার করতে হয়। এক্ষেত্রে মেইল সার্ভারটি বেশ কিছু সময়ের জন্য ডাউন থাকে। একটি ছোট কোম্পানীর জন্য এই ডাউনটাইম হয়তোবা তেমন বিশেষ কিছু নয়। কিন্তু একটি বড় কোম্পানী বা আই.এস.পি এর জন্য এই ধরণের ডাউনটাইম ব্যবসায়িক ক্ষতির কারণ। উপরন্তু, আই.এস.পি এর জন্য আই.পি এ্যাড্রেস পরিবর্তন করা কখনোই সম্ভব নয় (আই.এস.পি গুলো আই.আই.জি এর কাছ থেকে ব্যান্ডউইথ নিয়ে থাকে, এবং বিভিন্ন কারণে আই.এস.পি গুলোরও কিন্তু আই.আই.জি পরিবর্তনের প্রয়োজন হয়)।
আই.এস.পিগুলো এবং কিছু বড় কোম্পানী এই ধরণের আই.পি পরিবর্তনজনিত সমস্যা থেকে পরিত্রান পাওয়ার জন্য Regional Internet Registry (RIR) এর কাছ থেকে কিছু পাবলিক আই.পি ও ASN কিনে নেয় এবং সেই আই.পি ও ASN এর সমন্বয়ে রাউটিং প্রটোকল BGP কনফিগার করে তার আপস্ট্রিম সার্ভিস প্রোভাইডার এর সাথে ট্রাফিক আদান-প্রদান করে থাকে। এক্ষেত্রে যদি কোন কারণে আপস্ট্রিম সার্ভিস প্রোভাইডার পরিবর্তন করার দরকার হয় তাতে কোন সমস্যা হয় না। কারণ বরাদ্দ পাওয়া আই.পি ও ASN এর মালিক আই.এস.পি নিজে এবং এই আই.পি ও ASN এর সমন্বয়ে সে যেকোন আপস্ট্রিম সার্ভিস প্রোভাইডারের সাথে BGP কনফিগার করে ট্রাফিক আদান-প্রদান করতে পারে। এছাড়াও যদি কোন আই.এস.পি এর একাধিক আপস্ট্রিম থাকে তাহলে সে তার কিছু আই.পি’র ট্রাফিক এক আপস্ট্রিম দিয়ে এবং বাকী আই.পি’র ট্রাফিক অন্য আপস্ট্রিম দিয়ে আদান-প্রদান করতে পারে। একে Load Balance বলে।
আবার, যদি কোন একটি আপস্ট্রিম ডাউন হয়ে যায় তাহলে ঐ আপস্ট্রিম এর মধ্য দিয়ে যাওয়া ট্রাফিকসমূহ অন্য আপস্ট্রিম দিয়ে চলাচল করতে পারে। একে Redundancy বলে।
অর্থাৎ, ডাইনামিক রাউটিং প্রটোকল BGP ব্যবহার করে আই.এস.পি সমূহ তাদের আপস্ট্রিম এর সাথে বৃহৎ পরিসরে Link Redundancy ও Load Balance করতে পারে, যা সার্ভিস প্রোভাইডার নেটওয়ার্কের জন্য অত্যন্ত জরুরী একটি বিষয়।
Border Gateway Protocol বা BGP এর দুইটি শ্রেণী রয়েছে।
১. Exterior BGP (eBGP) ২. Internal BGP (iBGP)
যখন দুইটি রাউটার দুইটি ভিন্ন AS এর অধীনে থাকে তখন এদের মধ্যে রাউটিং এর জন্য eBGP ব্যবহৃত হয়। অপরদিকে যখন দুইটি রাউটার একই AS এর অধীনে থাকে তখন এদের মধ্যে রাউটিং এর জন্য iBGP ব্যবহৃত হয়।
অন্যান্য ডাইনামিক রাউটিং প্রটোকল যেমনঃ OSPF কনফিগার করার সময় আমরা #network কমান্ডের মাধ্যমে রাউটারের সাথে ডিরেক্টলি কানেক্টেড নেটওয়ার্কসমূহকে ডিক্লেয়ার করি। যদি ঐসকল নেটওয়ার্কের সাথে অন্য কোন OSPF এনাবলড রাউটার যুক্ত থাকে তাহলে রাউটারদ্বয় Neighbor ডিসকভারির জন্য Hello প্যাকেট আদান-প্রদান করতঃ নিজেদের মধ্যে Neighbor রিলেশনশীপ তৈরী করে এবং একে অন্যের সাথে নিজেদের রাউটিং ইনফরমেশন শেয়ার করে। এখানে শুধুমাত্র #network কমান্ডের মাধ্যমে রাউটারের সাথে ডিরেক্টলি কানেক্টেড নেটওয়ার্কসমূহকে ডিক্লেয়ার করলেই চলে, রাউটারদ্বয়কে ম্যানুয়ালী বলে দিতে হয় না যে, তাকে কোন একটি নিদিষ্ট আই.পি সম্বলিত রাউটারের সাথেই Neighbor রিলেশনশীপ তৈরী করতে হবে। কিন্তু BGP এর ক্ষেত্রে ব্যাপারটি একটু ভিন্ন। BGP কনফিগারেশনের সময় সবার প্রথমেই একটি রাউটারকে বলে দিতে হয় যে, সে কোন আই.পি সম্বলিত রাউটারের সাথে Neighbor রিলেশনশীপ তৈরী করবে এবং উক্ত রাউটার কোন AS এর অধীনে আছে। এতে করে একটি রাউটার কোন অপরিচিত রাউটারের সাথে Neighbor রিলেশনশীপ তৈরী করতে পারে না। তাই বলা যায়, Neighbor রিলেশনশীপ তৈরীর ক্ষেত্রে BGP এর Level of Trust বেশ শক্তিশালী।
দুইটি ভিন্ন AS এর রাউটারের মধ্যে eBGP কনফিগারেশনের শুরুতেই রাউটারদ্বয়ের মধ্যে Neighbor রিলেশনশীপ তৈরী করার জন্য নিম্নলিখিত কমান্ড দিতে হয়।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.0.0.2 remote-as 200
এখানে R1 রাউটারে #router bgp 100 কমান্ডের মাধ্যমে আমরা বলে দিলাম এই রাউটারটি AS 100 এর অধীনে আছে। এবং #neighbor 10.0.0.2 remote-as 200 কমান্ডের মাধ্যমে বলে দিলাম এই রাউটারটি যে রিমোট রাউটারের সাথে Neighbor রিলেশনশীপ তৈরী করবে তার আই.পি হলো 10.0.0.2 এবং রিমোট রাউটারটি AS 200 এর অধীনে আছে। রাউটার R2 তেও একই পদ্ধতিতে নিম্নলিখিত কমান্ড দিতে হবে।
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 remote-as 100
উপরিউক্ত কনফিগারেশনের পরপরই, রাউটার R1 প্রথমে Idle State এ থাকে। Idle State এর অর্থ হলো রাউটার R1 বুঝতে পারে BGP রাউটিং এর জন্য এর মধ্যে কোন একটি #neighbor কমান্ড দেওয়া হয়েছে এবং তার নিজের উচিত সেই Neighbor এর সাথে যোগাযোগ শুরু করা।
আমরা নিচের কমান্ডের মাধ্যমে R1 রাউটারের Neighbor Status দেখতে পারি।
R1#show ip bgp summary BGP router identifier 10.0.0.1, local AS number 100 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.0.0.2 4 200 0 0 0 0 0 never active
কোন রিমোট হোষ্ট এর সাথে যোগাযোগের জন্য প্রথমেই যা জরুরী তা হলো, ঐ হোষ্ট এর কাছে পৌছানোর জন্য রাউটারের রাউটিং টেবিলে উপযুক্ত রাউট থাকা। যেহেতু 10.0.0.2 আই.পি টি রাউটার R1 এর নিজের ডিরেক্টলী কানেক্টেড নেটওয়ার্ক তাই R1 এর রাউটিং টেবিলে রাউট অব্শ্যই আছে। এসময় রাউটার R1 Active State এ থাকে। Active State এর অর্থ হলো রাউটার R1 জানে কিভাবে 10.0.0.2 এর কাছে যেতে হবে।
যদি রাউটার R2 তেও একইভাবে Neighbor কনফিগার করা থাকে তাহলে, রাউটার R1 R2 এর সাথে একটি TCP কানেকশন তৈরী করে, যা TCP 179 নম্বর পোর্ট ব্যবহার করে। TCP শব্দটি থেকেই বুঝা যাচ্ছে যে, এটি একটি Connection Oriented এবং Reliable কমিউনিকেশন।
TCP কানেকশন তৈরী হওয়ার পর R1 তার Fa0/0 ইন্টারফেস দিয়ে 10.0.0.2 (অর্থাৎ R2) এর সাথে Neighbor রিলেশনশীপ তৈরীর জন্য একটি Open ম্যাসেজ পাঠায়। (ইহা অন্যান্য রাউটিং প্রটোকলের মতো Hello ম্যাসেজ পাঠায় না)। এসময় R1 রাউটার Open Sent State এ থাকে। Open ম্যাসেজের মধ্যে রাউটার R1 এর কিছু প্রয়োজনীয় তথ্য যেমনঃ BGP Version, AS নম্বর ও Holdtime ভ্যালু থাকে। (BGP এর বর্তমান Version হলো 4, আর ডিফল্ট Holdtime ভ্যালু হলো 180, এই দুইটি ভ্যালু উভয় রাউটারে অবশ্যই এক হতে হবে)।
পক্ষান্তরে, R2 রাউটারও R1 এর কাছে Open ম্যাসেজের মাধ্যমে নিজের প্রয়োজনীয় ভ্যালুসমূহ পাঠায়। এসময় R1 রাউটার Open Confirm State এ থাকে। Open Confirm State এ আসার পর রাউটারদ্বয় নিজেদের মধ্যে বিনিময়কৃত ভ্যালুসমূহ মিলিয়ে দেখে এবং ভ্যালুসমূহ ঠিক থাকা সাপেক্ষে নিজেদের মধ্যে Neighbor রিলেশনশীপ তৈরী করে। এসময় রাউটারদ্বয় উভয়ই Established State এ গমন করে। এই Established State এর অর্থই হলো রাউটারদ্বয়ের মধ্যে Neighbor রিলেশনশীপ তৈরী হয়েছে।
আমরা নিচের কমান্ডের মাধ্যমে R1 রাউটারের Neighbor Status দেখতে পারি।
R1#show ip bgp summary BGP router identifier 10.0.0.1, local AS number 100 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.0.0.2 4 200 3 3 1 0 0 00:00:56 0
Neighbor Status এ 0 এর অর্থ হলো, Neighbor এর সাথে রিলেশনশীপ তৈরী হয়েছে, কিন্তু Neighbor এর কাছ থেকে কোন রাউট/প্রিফিক্স পাওয়া যায় নি। Neighbor এর কাছ থেকে কোন রাউট/প্রিফিক্স তখনই পাওয়া যাবে, যখন Neighbor তার BGP রাউটিং প্রসেসে #network কমান্ডের মাধ্যমে কোন প্রিফিক্স অ্যানাউন্স করবে।
দুইটি রাউটারের মধ্যে BGP Peering করলেই কিন্তু একটি রাউটার আরেকটি রাউটারের সাথে নিজের রাউটিং ইনফরমেশন শেয়ার করে না। কোন রাউটার BGP রাউটিং প্রটোকলের মাধ্যমে তার Neighbor রাউটারের কাছে কি কি রাউট বা নেটওয়ার্ক ইনফরমেশন পাঠাবে তা ঐ রাউটারে #network কমান্ডের মাধ্যমে বলে দিতে হয়। এই প্রক্রিয়াকে Prefix Origination বলে।
BGP রাউটিং প্রটোকলে Prefix Origination এর ক্ষেত্রে একটি বিষয় মাথায় রাখতে হবে যে, আমরা কোন রাউটারে #network কমান্ডের মাধ্যমে যেই নেটওয়ার্ক বা প্রিফিক্সসমূহ অরিজিনেট করবো, সেই নেটওয়ার্কসমূহের রাউট ইনফরমেশন ঐ রাউটারের রাউটিং টেবিলে অবশ্যই থাকতে হবে, সেটা হোক ডিরেক্টলী কানেক্টেড নেটওয়ার্ক অথবা কোন স্ট্যাটিক বা ডাউনামিক রাউট।
একটি প্র্যাকটিক্যাল উদাহরণ দেখা যাক,
এখানে, রাউটার R1 ও R2 এর মধ্যে ইতিমধ্যে BGP Peering কনফিগার করা আছে। ধরি, এখন Prefix Origination এর সময় R1 রাউটার R2 এর কাছে 192.168.0.0/24 এই নেটওয়ার্কটি পাঠাবে। এজন্য রাউটার R1 এর নিচের কমান্ড দিতে হবে।
R1#conf t R1(config)#router bgp 100 R1(config-router)#network 192.168.0.0 mask 255.255.255.0
এখানে, আমরা #network 192.168.0.0 mask 255.255.255.0 কমান্ডের মাধ্যমে R1 এর BGP রাউটিং প্রসেসে 192.168.0.0/24 নেটওয়ার্ক বা প্রিফিক্সটিকে অরিজিনেট করলাম। কিন্তু এই নেটওয়ার্ক বা প্রিফিক্সটিকে R1 রাউটার R2 এর কাছে পাঠাবে না। কারণ, 192.168.0.0/24 নেটওয়ার্কটি R1 এর নিজের রাউটিং টেবিলেই নেই।
R1#show ip route Gateway of last resort is not set 10.0.0.0/24 is subnetted, 1 subnets C 10.0.0.0 is directly connected, FastEthernet0/0
অর্থাৎ আমরা বুঝতে পারলাম যে, যে নেটওয়ার্কের রাউটসমূহ R1 এর কাছে থাকবে, R1 শুধুমাত্র সেই নেটওয়ার্কগুলোকেই R2 এর কাছে অরিজিনেট করতে পারবে। একে Pull Up Route বলে। এখন, 192.168.0.0/24 নেটওয়ার্কটিকে আমরা R1 এর রাউটিং টেবিলে দুইভাবে আনতে পারি।
পদ্ধতি- ১. আমরা যদি 192.168.0.0/24 নেটওয়ার্কের কোন আই.পি R1 এর যেকোন ইন্টারফেসে বসাই তাহলে R1 এই 192.168.0.0/24 নেটওয়ার্কটিকে নিজের ডিরেক্টলী কানেক্টেড নেটওয়ার্ক হিসেবে চিনবে।
R1#conf t R1(config)#interface loopback 1 R1(config-if)#ip address 192.168.0.1 255.255.255.0
R1#show ip route 10.0.0.0/24 is subnetted, 1 subnets C 10.0.0.0 is directly connected, FastEthernet0/0 C 192.168.0.0/24 is directly connected, Loopback1
পদ্ধতি- ২. আমরা R1 এ একটি স্ট্যাটিক রাউট দিয়ে 192.168.0.0/24 নেটওয়ার্কটিকে চিনিয়ে দিতে পারি।
R1#conf t R1(config)#ip route 192.168.0.0 255.255.255.0 null 0
উপরিউক্ত যেকোন একটি পদ্ধতিতে আমরা R1 এ 192.168.0.0/24 নেটওয়ার্কটিকে রাউটিং টেবিলে এনে অতঃপর BGP রাউটিং প্রসেসে Neighbor রাউটারের কাছে অরিজিনেট করতে পারি। আমাদের কনফিগারেশন যদি ঠিক থাকে তাহলে রাউটার R2 BGP এর মাধ্যমে R1 এর কাছ থেকে রাউটটি পাবে।
R2#show ip route bgp B 192.168.0.0/24 [20/0] via 10.0.0.1, 00:05:25
অপরদিকে, রাউটার R2 তেও যদি আমরা 172.16.0.0/24 নেটওয়ার্কটিকে অরিজিনেট করতে চাই তাহলে নিচের কমান্ড দিতে হবে।
R2#conf t R2(config)#interface loopback 1 R2(config-if)#ip address 172.16.0.1 255.255.255.0 R2(config-if)#exit R2(config)#router bgp 200 R2(config-router)#network 172.16.0.0 mask 255.255.255.0
উপরিউক্ত কমান্ডের মাধ্যমে আমরা যদি 172.16.0.0/24 নেটওয়ার্কটিকে R2 তে অরিজিনেট করি তাহলে তা BGP রাউটিং প্রসেসে R1 এর কাছে আসবে।
R1#show ip route bgp 172.16.0.0/24 is subnetted, 1 subnets B 172.16.0.0 [20/0] via 10.0.0.2, 00:02:39
তবে প্রফেশনাল লেভেলে BGP Prefix Origination এর ক্ষেত্রে আরো কিছু এ্যাডভান্স টেকনিক ব্যবহৃত হয়।
আমরা ইতিমধ্যে দেখেছি, দুইটি পয়েন্ট-টু-পয়েন্ট রাউটারের মধ্যে কিভাবে BGP Peering করতে হয়। পয়েন্ট-টু-পয়েন্ট বলতে এখানে বুঝানো হয়েছে, R1 ও R2 রাউটার দুইটি নিজেদের মধ্যে ডিরেক্টলী কানেক্টেড এবং R1 এর আই.পি 10.0.0.1 এবং R2 এর আই.পি 10.0.0.2 একই নেটওয়ার্কের অন্তর্ভূক্ত। এখন আমরা দেখবো দুইটি রাউটারের মধ্যে কিভাবে Loopback আই.পি ব্যবহার করে BGP Peering করতে হয়।
এখানে আমরা R1 এর Fa0/0 এর আই.পি 10.0.0.1 এর সাথে R2 এর Fa0/0 এর আই.পি 10.0.0.2 এর BGP Peering করবো না। আমরা R2 এর Loopback0 ইন্টারফেসে 10.10.0.1 আই.পি বসাবো। অতঃপর R1 এর Fa0/0 এর আই.পি 10.0.0.1 এর সাথে R2 এর Loopback0 ইন্টারফেসের 10.10.0.1 আই.পি এর সাথে BGP Peering করবো। এথানে উল্লেখ্য যে, R1 এর Fa0/0 এর আই.পি 10.0.0.1 এবং R2 এর Loopback0 এর আই.পি 10.10.0.1 কিন্তু পয়েন্ট-টু-পয়েন্ট নয়, অর্থাৎ এরা ডিরেক্টলী কানেক্টেড নয়, এমনকি আই.পি দুইটি একই নেটওয়ার্কের অন্তর্ভূক্তও নয়।
কনফিগারেশন:
R1#conf t R1(config)#interface fastEthernet 0/0 R1(config-if)#ip address 10.0.0.1 255.255.255.252 R1(config-if)#no shutdown
আমরা প্রথমে R1 এর Fa0/0 ইন্টারফেসে 10.0.0.1 আই.পি এ্যাসাইন করলাম।
R1#conf t R1(config)#ip route 10.10.0.0 255.255.255.0 10.0.0.2
R1 রাউটার R2 এর যে আই.পি এর সাথে BGP Peering করবে সেই আই.পি টিতে R1 কিভাবে পৌছাবে তা বলে দেওয়ার জন্য একটি স্ট্যাটিক রাউট দেওয়া হলো। এই রাউটটি খুবই জরুরী, কারণ R1 যদি 10.10.0.1 আই.পি টিতে পৌছাতেই না পারে তাহলে এর BGP Neighbor Status সব সময় Idle হয়ে থাকবে।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.10.0.1 remote-as 200 R1(config-router)#neighbor 10.10.0.1 ebgp-multihop
এখানে আমরা #neighbor 10.10.0.1 remote-as 200 কমান্ডের মাধ্যমে R1 এর BGP রাউটিং প্রসেসে neighbor হিসেবে 10.10.0.1 কে ডিক্লেয়ার করলাম। যেহেতু, R2 এর 10.10.0.1 আই.পি টি R1 এর ডিরেক্টলী কানেক্টেড নয় তাই R1 এর BGP রাউটিং প্রসেসে #neighbor 10.10.0.1 ebgp-multihop এই কমান্ডটি দিতে হবে। এর অর্থ হলো, BGP Peering এর জন্য R1 এ যে আই.পি (10.10.0.1) ডিক্লেয়ার করা হয়েছে সেই আই.পি টি R1 থেকে এক বা একাধিক Hop দূরে আছে। ebgp-multihop কমান্ডটি শুধূ eBGP এর ক্ষেত্রেই ব্যবহৃত হয়, iBGP এর ক্ষেত্রে কখনোই নয়।
R2#conf t R2(config)#interface fastEthernet 0/0 R2(config-if)#ip address 10.0.0.2 255.255.255.252 R2(config-if)#no shutdown R2(config-if)#exit R2(config)#interface loopback 0 R2(config-if)#ip address 10.10.0.1 255.255.255.0
আমরা প্রথমে R2 এর Fa0/0 ইন্টারফেসে 10.0.0.2 এবং Loopback0 ইন্টারফেসে 10.10.0.1 আই.পি এ্যাসাইন করলাম।
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 remote-as 100 R2(config-router)#neighbor 10.0.0.1 update-source loopback0
এখানে আমরা #neighbor 10.0.0.1 remote-as 100 কমান্ডের মাধ্যমে R2 এর BGP রাউটিং প্রসেসে neighbor হিসেবে 10.0.0.1 কে ডিক্লেয়ার করলাম। যেহেতু, R1 এর 10.0.0.1 আই.পি টি R2 এর ডিরেক্টলী কানেক্টেড তাই R2 এর BGP রাউটিং প্রসেসে আলাদা করে ebgp-multihop কমান্ডটি দিতে হবে না। কিন্তু যেহেতু আমরা R2 এর Fa0/0 ইন্টারফেসের আই.পি 10.0.0.2 ব্যবহার না করে Loopback0 ইন্টারফেসের আই.পি 10.10.0.1 ব্যবহার করে BGP Peering করতে চাচ্ছি তাই R2 তে #neighbor 10.0.0.1 update-source loopback0 কমান্ডটি দিতে হবে। এর অর্থ হলো, Neighbor রিলেশনশীপ তৈরীর জন্য যে TCP কানেকশন হবে সেই TCP কানেকশনের জন্য R2 যাতে তার Loopback0 ইন্টারফেসের আই.পি টি কেই Source হিসেবে ব্যবহার করে। এই কমান্ডটি না দিলে R2 তার Fa0/0 ইন্টারফেসের আই.পি কে Source হিসেবে ব্যবহার করে TCP কানেকশন তৈরীর চেষ্টা করবে এবং কখনোই Neighbor রিলেশনশীপ তৈরী হবে না।
আমাদের কনফিগারেশন যদি ঠিক থাকে তাহলে নিচের কমান্ডের মাধ্যমে আমরা দেখতে পাবো যে, রাউটারদ্বয়ের মধ্যে Neighbor রিলেশনশীপ তৈরী হয়েছে।
R2#show ip bgp summary
এখানে আমরা BGP Peering এর জন্য দুইটি গুরুত্বপূর্ণ কমান্ড ebgp-multihop এবং update-source সম্পর্কে জানলাম। এখানে একটি প্রশ্ন থাকতে পারে যে, আমরা যদি পয়েন্ট-টু-পয়েন্ট আই.পি দিয়ে খুব সহজেই BGP Peering করতে পারি তাহলে এত ঝামেলার কি দরকার আছে? এর উত্তরটি পরবর্তীতে পাওয়া যাবে, যেখানে আমরা দেখবো Loopback IP, ebgp-multihop এবং update-source ব্যবহার করে কিভাবে BGP Peering এর জন্য Fail-over কনফিগার করা যায়।
আমরা ইতিমধ্যে জেনেছি যে, কিভাবে দুইটি রাউটারের মধ্যে BGP Peering করতে হয় এবং Prefix Origination এর মাধ্যমে কিভাবে একটি রাউটারের রাউটিং ইনফরমেশন আরেকটি রাউটারের সাথে শেয়ার করতে হয়। এজন্য আমরা রাউটার দুইটির মধ্যে একটিমাত্র ফিজিক্যাল লিঙ্ক ব্যবহার করেছি। যদি কোন কারণে এই লিঙ্কটি ডাউন হয় তাহলে রাউটারদ্বয়ের মধ্যে BGP Peering ও ডাউন হয়ে যাবে। এতে রাউটারদ্বয় একে অন্যের সাথে রাউটিং শেয়ার করবে না, ফলে ট্রাফিক চলাচলও বন্ধ হয়ে যাবে। তাই রাউটার দুইটির মধ্যে Redundant ফিজিক্যাল কানেকশন থাকাটা জরুরী, যাতে করে কোন কারণে Primary লিঙ্ক ডাউন হয়ে গেলে Secondary লিঙ্ক দিয়ে BGP Peering আপ থাকে।
চিত্রে, R1 ও R2 এর মধ্যে দুইটি ফিজিক্যাল লিঙ্ক বিদ্যমান। R1 এর Fa0/0 (10.0.0.1) ও Fa0/1 (20.0.0.1) ইন্টারফেসের সাথে যথাক্রমে R2 এর Fa0/0 (10.0.0.2) ও Fa0/1 (20.0.0.2) ইন্টারফেস সংযুক্ত আছে। আমরা নিচের কমান্ডের মাধ্যমে R1 ও R2 এর মধ্যে Duel BGP Peering করতে পারি, এবং Prefix অরিজিনেট করতে পারি।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.0.0.2 remote-as 200 R1(config-router)#neighbor 20.0.0.2 remote-as 200 R1(config-router)#network 192.168.0.0 mask 255.255.255.0
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 remote-as 100 R2(config-router)#neighbor 20.0.0.1 remote-as 100 R2(config-router)#network 172.16.0.0 mask 255.255.255.0
এখানে আমরা R1 ও R2 এর মধ্যে Duel BGP Peering করলাম। আমরা নিচের কমান্ডের মাধ্যমে R1 এর BGP Peering স্ট্যাটাস দেখতে পারি।
R1#show ip bgp summary Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.0.0.2 4 200 114 115 9 0 0 00:04:05 1 20.0.0.2 4 200 103 104 9 0 0 00:04:04 1
এখানে, R1 এর সাথে R2 এর দুইটি লিঙ্ক দিয়ে দুইটি BGP Peering আছে। যদি কোন কারণে একটি লিংক ডাউন হয় তাহলে অপর লিঙ্ক দিয়ে BGP Peering আপ থাকবে। একে Fail-over বলে।
এখানে একটি বিষয় লক্ষণীয় যে, R1 R2 এর কাছ থেকে দুইটি Peering দিয়েই 172.16.0.0/24 Prefix টি রিসিভ করেছে।
R1#show ip bgp Network Next Hop Metric LocPrf Weight Path * 172.16.0.0/24 20.0.0.2 0 0 200 i *> 10.0.0.2 0 0 200 i *> 192.168.0.0 0.0.0.0 0 32768 i
কিন্তু R1 এর রাউটিং টেবিলে Best Route একটি।
R1#show ip route bgp 172.16.0.0/24 is subnetted, 1 subnets B 172.16.0.0 [20/0] via 10.0.0.2, 00:04:52
কারণ, কোন BGP রাউটার তার দুইটি Neighbor এর কাছ থেকে যদি একই রাউট পায় তাহলে ইহা যেকোন একটি Neighbor এর রাউটকে Best Route হিসেবে সিলেক্ট করে। এখানে দুইটি ফিজিক্যাল লিঙ্ক থাকার পরও শুধুমাত্র একটি লিঙ্ক দিয়ে ডাটা ট্রান্সমিট হবে, এবং অন্যটি ব্যাকআপ হিসেবে থাকবে। অর্থাৎ Fail-over ঠিকই হবে কিন্তু Load Balance হবে না। পরবর্তীতে আমরা দেখবো কিভাবে এই দুইটি রাউটারের মধ্যে Load Balance করা যায়।
এখন আমরা দেখবো কিভাবে দুইটি BGP রাউটারের মধ্যে Load Balance করা যায়। চিত্রে R1 ও R2 রাউটার দুইটি নিজেদের মধ্যে দুইটি ফিজিক্যাল লিঙ্ক দিয়ে সংযুক্ত। BGP Load Balancing এর জন্য আমরা রাউটার দুইটির মধ্যে Duel BGP Peering করবো না। এখানে আমরা R1 এ একটি Loopback IP বসাবো এবং R2 তেও একটি Loopback IP বসাবো। অতঃপর এই Loopback IP ব্যবহার করে রাউটার দুইটির মধ্যে Single BGP Peering করবো। একটি রাউটার যাতে অপর রাউটারের Loopback IP তে পৌছাতে পারে সেজন্য প্রথম ফিজিক্যাল লিঙ্ক দিয়ে একটি স্ট্যাটিক রাউট এবং দ্বিতীয় ফিজিক্যাল লিঙ্ক দিয়ে আরেকটি স্ট্যাটিক রাউট দিব। এখানে রাউটার দুইটির মধ্যে Single BGP Peering আপ রাখার জন্য ব্যাকগ্রাউন্ডে দুইটি ফিজিক্যাল লিঙ্ক কাজ করবে। যদি কোন কারণে একটি লিঙ্ক ডাউন হয় তাহলে অপর লিঙ্ক দিয়ে BGP Peering আপ থাকবে। এখানে আমরা রাউটার দুইটির Loopback IP দ্বয়ের মধ্যে রাউটিং এর জন্য সমান Administrative Distance (AD) ভ্যালু ব্যবহার করবো যাতে লিঙ্ক দুইটির Cost সমান থাকে। আর লিঙ্ক দুইটির Cost সমান থাকলে BGP Peering আপ রাখা ও ডাটা ট্রান্সমিটের জন্য রাউটারদ্বয় দুইটি লিঙ্কই সমানভাবে ব্যবহার করবে। একে Equal Cost Load Balancing বলে।
পুরো ব্যাপারটি একটি প্র্যাকটিক্যাল উদাহরণের মাধ্যমে দেখা যাকঃ
R1#conf t R1(config)#interface fa0/0 R1(config-router)#ip address 10.0.0.1 255.255.255.252 R1(config-router)#no shutdown R1(config-router)#exit R1(config)#interface fa0/1 R1(config-router)#ip address 20.0.0.1 255.255.255.252 R1(config-router)#no shutdown R1(config-router)#exit R1(config)#interface loopback 0 R1(config-router)#ip address 30.0.0.1 255.255.255.255 R1(config-router)#exit R1(config)#interface loopback 1 R1(config-router)#ip address 192.168.0.1 255.255.255.0
R2#conf t R2(config)#interface fa0/0 R2(config-router)#ip address 10.0.0.2 255.255.255.252 R2(config-router)#no shutdown R2(config-router)#exit R2(config)#interface fa0/1 R2(config-router)#ip address 20.0.0.2 255.255.255.252 R2(config-router)#no shutdown R2(config-router)#exit R2(config)#interface loopback 0 R2(config-router)#ip address 40.0.0.1 255.255.255.255 R2(config)#interface loopback 1 R2(config-router)#ip address 172.16.0.1 255.255.255.0 R2(config-router)#exit
প্রথমে আমরা R1 ও R2 তে উপরিউক্তভাবে আই.পি কনফিগার করে নিব।
যেহেতু R1 রাউটার R2 এর 40.0.0.0/32 আই.পি টি কে চেনে না, তাই আমরা R1 এ নিচের কমান্ডের মাধ্যমে স্ট্যাটিক রাউট যোগ করবো।
R1#conf t R1(config)#ip route 40.0.0.1 255.255.255.255 10.0.0.2 R1(config)#ip route 40.0.0.1 255.255.255.255 20.0.0.2
এই স্ট্যাটিক রাউট দুইটির Cost একই এবং এই রাউট দুইটিই হলো BGP Load Balancing এর প্রান। এখানে একই Cost এর দুইটি স্ট্যাটিক রাউটের মাধ্যমে R1 কে বলে দেওয়া হলো যে, তুমি তোমার BGP Neighbor আই.পি 40.0.0.1 এর কাছে পৌছাতে চাইলে একবার 10.0.0.2 এর কাছে যাবে এবং আরেকবার 20.0.0.2 এর কাছে যাবে।
(বিঃদ্রঃ এখানে ল্যাবটি GNS3 এর মাধ্যমে করা হয়েছে তাই এভাবে সহজ স্ট্যাটিক রাউটিং এর মাধ্যমেই Load Balancing এর কাজ হবে। কিন্তু প্রফেশনাল লেভেলে রাউট দুইটিকে ভালভাবে কাজ করানোর জন্য IPSLA কনফিগার করার প্রয়োজন হতে পারে। অথবা একটি অতিরিক্ত IGP যেমন: OSPF এর মাধ্যমে এটা করা যেতে পারে। IPSLA বা OSPF কি এবং কিভাবে কনফিগার করতে হয় তা এই আলোচনার বিষয়বস্তু নয়।)
অপরদিকে R2 ও যেন তার BGP Neighbor আই.পি 30.0.0.1 এর কাছে পৌছাতে পারে সেজন্য আমরা R2 তেও একইভাবে স্ট্যাটিক রাউট দিব।
R2#conf t R2(config)#ip route 30.0.0.1 255.255.255.255 10.0.0.1 R2(config)#ip route 30.0.0.1 255.255.255.255 20.0.0.1
এখন BGP Peering ও Prefix Origination এর পালা।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 40.0.0.1 remote-as 200 R1(config-router)#neighbor 40.0.0.1 update-source loopback 0 R1(config-router)#neighbor 40.0.0.1 ebgp-multihop R1(config-router)#network 192.168.0.0 mask 255.255.255.0
এখানে eBGP Peering এর জন্য দুইটি বিশেষ কমান্ড #update-source ও #ebgp-multihop কমান্ড ব্যবহৃত হয়েছে, যা নিয়ে আমরা ইতিমধ্যে আলোচনা করেছি।
R2(config)#router bgp 200 R2(config-router)#neighbor 30.0.0.1 remote-as 100 R2(config-router)#neighbor 30.0.0.1 update-source loopback 0 R2(config-router)#neighbor 30.0.0.1 ebgp-multihop R2(config-router)#network 172.16.0.0 mask 255.255.255.0
আমাদের কনফিগারেশন যদি ঠিক থাকে তাহলে নিচের কমান্ডের মাধ্যমে BGP Peering স্ট্যাটাস দেখতে পাবো।
R1#show ip bgp summary Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 40.0.0.1 4 200 47 47 3 0 0 00:00:19 1
আমরা ইতিমধ্যে দুইটি রাউটারের মধ্যে কিভাবে BGP Peering করতে হয় এবং Prefix অরিজিনেট করতে হয় তা দেখেছি। Prefix অরিজিনেট করার জন্য আমরা #network কমান্ড ব্যবহার করেছি। এবং আমরা এও জেনেছি যে, শুধুমাত্র #network কমান্ডের মাধ্যমে Prefix অরিজিনেট করলেই কোন রাউটার সেই Prefix টি তার Neighbor রাউটারের নিকট Advertise না। এজন্য ঐ Prefix/Route টি সংশ্লিষ্ট রাউটারের রাউটিং টেবিলে থাকতে হয়। এই পোষ্টে আমরা দেখবো #network কমান্ড ছাড়াও আর কিভাবে Prefix অরিজিনেট করা যায়। তবে যেভাবেই Prefix অরিজিনেট করা হোক না কেন, ঐ Prefix/Route টিকে অবশ্যই রাউটারের রাউটিং টেবিলে থাকতে হবে (Pull Up Route)।
বিষয়টি একটি প্র্যাকটিক্যাল কনফিগারেশনের মাধ্যমে দেখা যাকঃ
R1#conf t R1(config)#interface fastEthernet 0/0 R1(config-if)#ip address 10.0.0.1 255.255.255.252 R1(config-if)#no shutdown R1(config)#interface loopback 1 R1(config-if)#ip address 192.168.0.1 255.255.255.0 R1(config)#interface loopback 2 R1(config-if)#ip address 192.168.1.1 255.255.255.0 R1(config-if)#interface loopback 3 R1(config-if)#ip address 192.168.2.1 255.255.255.0 R1(config-if)#interface loopback 4 R1(config-if)#ip address 192.168.3.1 255.255.255.0
R2#conf t R2(config)#interface fastEthernet 0/0 R2(config-if)#ip address 10.0.0.2 255.255.255.252 R2(config-if)#no shutdown R2(config)#interface loopback 1 R2(config-if)#ip address 172.16.0.1 255.255.255.0 R2(config)#int loopback 2 R2(config-if)#ip address 172.16.1.1 255.255.255.0 R2(config-if)#int loopback 3 R2(config-if)#ip address 172.16.2.1 255.255.255.0 R2(config-if)#int loopback 4 R2(config-if)#ip address 172.16.3.1 255.255.255.0
চিত্রে প্রদত্ত IP Plan অনুযায়ী আমরা প্রথমে R1 ও R2 রাউটারের আই.পি সমূহ কনফিগার করলাম।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.0.0.2 remote-as 200
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 remote-as 100
অতঃপর আমরা R1 ও R2 এর মধ্যে BGP Peering কনফিগার করলাম।
R1#conf t R1(config)#router bgp 100 R1(config-router)#network 192.168.0.0 mask 255.255.255.0 R1(config-router)#network 192.168.1.0 mask 255.255.255.0 R1(config-router)#network 192.168.2.0 mask 255.255.255.0 R1(config-router)#network 192.168.3.0 mask 255.255.255.0
BGP Peering কনফিগার করার পর আমরা R1 এর BGP রাউটিং প্রসেসে #network কমান্ডের মাধ্যমে সংশ্লিষ্ট নেটওয়ার্কগুলো অরিজিনেট করলাম।
যেহেতু নেটওয়ার্কগুলো R1 এর ডিরেক্টলী কানেক্টেড নেটওয়ার্ক তাই R1 এগুলোকে BGP এর মাধ্যমে R2 এর নিকট Advertise করবে। এবং আমরা R2 এর রাউটিং টেবিলে রাউটসমূহ দেখতে পাবো।
R2#show ip route bgp B 192.168.0.0/24 [20/0] via 10.0.0.1, 00:00:02 B 192.168.1.0/24 [20/0] via 10.0.0.1, 00:00:02 B 192.168.2.0/24 [20/0] via 10.0.0.1, 00:00:02 B 192.168.3.0/24 [20/0] via 10.0.0.1, 00:00:02
এখন আমরা R2 রাউটারে এর Prefix সমূহ অরিজিনেট করবো। তবে এজন্য আমরা #network কমান্ড ব্যবহার না করে #redistribute কমান্ড ব্যবহার করবো।
#redistribute হলো এমন এক ধরণের কমান্ড যার মাধ্যমে কোন একটি রাউটিং প্রটোকল থেকে প্রাপ্ত রাউট বা রাউটসমূহকে অন্য আরেকটি রাউটিং প্রটোকলের মাধ্যমে শেয়ার করা যায়। এজন্য আমরা নিচের কমান্ড দিবো।
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute connected
এখানে 172.16.0.0/24, 172.16.1.0/24, 172.16.2.0/24, 172.16.3.0/24 নেটওয়ার্কসমূহ R2 এর ডিরেক্টলী কানেক্টেড নেটওয়ার্ক। আর #redistribute connected কমান্ডের মাধ্যমে এই কানেক্টড নেটওয়ার্কসমূহকে R2 এর BGP রাউটিং প্রসেসে অরিজিনেট করা হলো। আমরা যদি R1 এর রাউটিং টেবিল দেখি তাহলে দেখতে পাবো যে, উল্লেখিত নেটওয়ার্ক/প্রিফিক্সসমূহ BGP রাউটিং প্রটোকলের মাধ্যমে R2 থেকে R1 এ চলে এসেছে।
R1#show ip route bgp 172.16.0.0/24 is subnetted, 4 subnets B 172.16.0.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.1.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.2.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.3.0 [20/0] via 10.0.0.2, 00:01:33
কোন একটি রাউটার তার BGP Neighbor এর কাছ থেকে কি কি Prefix রিসিভ করেছে তা দেখতে চাইলেঃ
R1#show ip bgp neighbors 10.0.0.2 routes Network Next Hop Metric LocPrf Weight Path r> 10.0.0.0/30 10.0.0.2 0 0 200 ? *> 172.16.0.0/24 10.0.0.2 0 0 200 ? *> 172.16.1.0/24 10.0.0.2 0 0 200 ? *> 172.16.2.0/24 10.0.0.2 0 0 200 ? *> 172.16.3.0/24 10.0.0.2 0 0 200 ? Total number of prefixes 5
একটু লক্ষ্য করলে দেখতে পাবো যে, R1 রাউটার R2 এর কাছ থেকে 10.0.0.0/30 প্রিফিক্সটি রিসিভ করেছে যা R1 এর নিজের ডিরেক্টলী কানেক্টেড নেটওয়ার্ক। এজন্য 10.0.0.0/30 প্রিফিক্সটি R1 নিজের রাউটিং টেবিলে নিবে না।
R1 রাউটার R2 এর কাছ থেকে 10.0.0.0/30 প্রিফিক্সটি এজন্যই পেয়েছে কারণ আমরা R2 এর BGP রাউটিং প্রসেসে #redistribute connected কমান্ডের মাধ্যমে বলে দিয়েছিলাম R2 যাতে তার ডিরেক্টলী কানেক্টেড নেটওয়ার্কগুলোকে Advertise করে। আর 10.0.0.0/30 হলো R2 এরও ডিরেক্টলী কানেক্টেড নেটওয়ার্ক।
কোন রাউটার তার BGP Neighbor এর কাছে কি কি Prefix Advertise করেছে তা দেখতে চাইলেঃ
R1#show ip bgp neighbors 10.0.0.2 advertised-routes Network Next Hop Metric LocPrf Weight Path *> 192.168.0.0 0.0.0.0 0 32768 i *> 192.168.1.0 0.0.0.0 0 32768 i *> 192.168.2.0 0.0.0.0 0 32768 i *> 192.168.3.0 0.0.0.0 0 32768 i Total number of prefixes 4
BGP রাউটিং প্রসেসে Prefix অরিজিনেট করার সময় Prefix Filtering এর মাধ্যমে একটি রাউটার কোন কোন Prefix Advertise করবে/করবে না এবং কোন কোন Prefix রিসিভ করবে/করবে না তা নিয়ন্ত্রন করা যায়। Prefix Filtering সম্পর্কে আমরা পরবর্তীতে বিস্তারিত আলোচনা করবো।
আবার #redistribute কমান্ডের মাধ্যমে অন্যান্য রাউটিং প্রটোকলের রাউটসমূহও BGP তে অরিজিনেট করা যায়।
যেমনঃ
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute static
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute rip
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute eigrp 1
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute ospf 1
উপরিউক্ত আলোচনায় আমরা BGP Peering ও Prefix Origination এর বিভিন্ন বিষয় নিয়ে জানলাম। কোন একটি রাউটার Prefix Origination এর মাধ্যমে তার Neighbor রাউটারের কাছে নিজের প্রিফিক্সসমূহ Advertise করে এবং Neighbor রাউটার সেই প্রিফিক্সসমূহ রিসিভ করে নিজের রাউটিং টেবিল আপডেট করে। যখন কোন আই.এস.পি তার ক্লায়েন্টের সাথে BGP কনফিগার করে তখন তাদের একটি বিষয় লক্ষ্য রাখতে হয়, যাতে তার ক্লায়েন্ট কোন অপ্রয়োজনীয় প্রিফিক্স তার কাছে পাঠাতে না পারে। অথবা ক্লায়েন্ট যদি কোন অপ্রয়োজনীয় প্রিফিক্স পাঠিয়েও থাকে আই.এস.পি রাউটার যেন তা রিসিভ না করে। কারণ ক্লায়েন্টের রাউটারের কাছ থেকে অপ্রয়োজনীয় বা ভূল প্রিফিক্স রিসিভ করে আই.এস.পি রাউটার যদি তার রাউটিং টেবিল আপডেট করে নেয় তাহলে তা আই.এস.পি নেটওয়ার্কের জন্য ক্ষতিকর হতে পারে, এমনকি পুরো নেটওয়ার্ক ডাউনও হয়ে যেতে পারে। আবার যখন আই.এস.পি তার আপস্ট্রীম আই.আই.জি এর সাথে BGP কনফিগার করে তখন আই.আই.জি কেও এই ব্যাপারটি লক্ষ্য রাখতে হয়।
কোন একটি রাউটার BGP রাউটিং প্রসেসে তার Neighbor রাউটারের কাছে কি কি প্রিফিক্স পাঠাবে এবং Neighbor রাউটারের কাছ থেকে কি কি প্রিফিক্স রিসিভ করবে তা নিয়ন্ত্রন করাকে Prefix Filtering বলে। একে Route Filtering ও বলা হয়। এখন আমরা দেখবো BGP রাউটিং প্রসেসে কিভাবে Prefix Filtering করতে হয়।
চিত্রে R1 ও R2 রাউটারে আই.পি কনফিগারেশন নিম্নরূপঃ
R1#conf t R1(config)#interface fastEthernet 0/0 R1(config-if)#ip address 10.0.0.1 255.255.255.252 R1(config-if)#no shutdown R1(config)#interface loopback 1 R1(config-if)#ip address 192.168.0.1 255.255.255.0 R1(config)#interface loopback 2 R1(config-if)#ip address 192.168.1.1 255.255.255.0 R1(config-if)#interface loopback 3 R1(config-if)#ip address 192.168.2.1 255.255.255.0 R1(config-if)#interface loopback 4 R1(config-if)#ip address 192.168.3.1 255.255.255.0
R2#conf t R2(config)#interface fastEthernet 0/0 R2(config-if)#ip address 10.0.0.2 255.255.255.252 R2(config-if)#no shutdown R2(config)#interface loopback 1 R2(config-if)#ip address 172.16.0.1 255.255.255.0 R2(config)#int loopback 2 R2(config-if)#ip address 172.16.1.1 255.255.255.0 R2(config-if)#int loopback 3 R2(config-if)#ip address 172.16.2.1 255.255.255.0 R2(config-if)#int loopback 4 R2(config-if)#ip address 172.16.3.1 255.255.255.0
এবং R1 রাউটারের সাথে R2 এর BGP Peering আছে।
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.0.0.2 remote-as 200
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 remote-as 100
BGP Peering এর পর R1 ও R2 রাউটার Prefix Origination এর মাধ্যমে একে অন্যের সাথে নিজের প্রিফিক্স Advertise করেছে।
R1#conf t R1(config)#router bgp 100 R1(config-router)#network 192.168.0.0 mask 255.255.255.0 R1(config-router)#network 192.168.1.0 mask 255.255.255.0 R1(config-router)#network 192.168.2.0 mask 255.255.255.0 R1(config-router)#network 192.168.3.0 mask 255.255.255.0
R2#conf t R2(config)#router bgp 200 R2(config-router)#redistribute connected
আমরা যদি R1 ও R2 এর রাউটিং টেবিল চেক করি তাহলে বিনিময়কৃত রাউটগুলো দেখতে পাবো।
R1#show ip route bgp 172.16.0.0/24 is subnetted, 4 subnets B 172.16.0.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.1.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.2.0 [20/0] via 10.0.0.2, 00:01:33 B 172.16.3.0 [20/0] via 10.0.0.2, 00:01:33
R2#show ip route bgp B 192.168.0.0/24 [20/0] via 10.0.0.1, 00:03:22 B 192.168.1.0/24 [20/0] via 10.0.0.1, 00:02:51 B 192.168.2.0/24 [20/0] via 10.0.0.1, 00:02:51 B 192.168.3.0/24 [20/0] via 10.0.0.1, 00:02:51
এখন Prefix Filtering এর পালা। ধরি, R2 রাউটার R1 এর সবগুলো প্রিফিক্স নিতে চাচ্ছে না। R2 চাচ্ছে R1 তার কাছে যতগুলো প্রিফিক্সই Advertise করুক না কেন, ইহা শুধুমাত্র 192.168.1.0/24 ও 192.168.3.0 প্রিফিক্স দুইটি রিসিভ করে নিজের রাউটিং টেবিলে নিবে। এজন্য আমরা অতি সাধারণ ACL ব্যবহার করে R2 এ Prefix Filtering করতে পারি।
R2#conf t R2(config)#access-list 1 permit 192.168.1.0 0.0.0.255 R2(config)#access-list 1 permit 192.168.3.0 0.0.0.255
এখানে R2 তে 192.168.1.0/24 ও 192.168.3.0/24 প্রিফিক্স দুইটিকে Permit করে Standard ACL Statement লিখলাম। কোন Deny Statement না থাকলে Cisco তে বাকী সবাইকে Deny ধরা হয় (Implicit Deny)।
R2#conf t R2(config)#router bgp 200 R2(config-router)#distribute-list 1 in
অতঃপর R2 এর BGP রাউটিং প্রসেসে #distribute-list 1 in কমান্ডের মাধ্যমে Standard ACL Statement টি প্রয়োগ করলাম। এখানে, 1 হলো Standard ACL এর নম্বর এবং in হলো incoming routing updates। যেহেতু আমরা R2 এর দিকে আগত (incoming) প্রিফিক্সসমূহ ফিল্টার করতে চাচ্ছি তাই in কি-ওয়ার্ড ব্যবহার করতে হবে।
এখন যদি আমরা R2 এর রাউটিং টেবিল চেক করি তাহলে কাঙ্খিত রাউটগুলোই দেখতে পাবো।
R2#show ip route bgp B 192.168.1.0/24 [20/0] via 10.0.0.1, 00:00:15 B 192.168.3.0/24 [20/0] via 10.0.0.1, 00:00:15
যদি কোন কারণে পুরো কনফিগারেশন ঠিক থাকার পরও R2 তে সঠিক আউটপুট না পাওয়া যায় তাহলে #clear ip bgp 10.0.0.1 কমান্ডের মাধ্যমে Neighbor 10.0.0.1 এর সাথে R2 এর BGP কানেকশনটি রিফ্রেশ করে নিতে হবে। এটি একটি অত্যন্ত জরুরী ট্রাবলশুটিং কমান্ড। আর #clear ip bgp * কমান্ড দিলে রাউটারের সাথে যতগুলো BGP Neighbor থাকবে সবগুলোর সাথেই BGP কানেকশনটি রিফ্রেশ হবে।
এখানে একটি বিষয় লক্ষ্যনীয় যে, R1 কিন্তু #network কমান্ডের মাধ্যমে যোগ করা চারটি প্রিফিক্সই R2 এর কাছে Advertise করছে।
R1#show ip bgp neighbors 10.0.0.2 advertised-routes Network Next Hop Metric LocPrf Weight Path *> 192.168.0.0 0.0.0.0 0 32768 i *> 192.168.1.0 0.0.0.0 0 32768 i *> 192.168.2.0 0.0.0.0 0 32768 i *> 192.168.3.0 0.0.0.0 0 32768 i Total number of prefixes 4
কিন্তু যেহেতু R2 তে ইনকামিং প্রিফিক্স ফিল্টার করা হয়েছে তাই R2 সবগুলো প্রিফিক্স রিসিভ করছে না।
R2#show ip bgp neighbors 10.0.0.1 routes Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 10.0.0.1 0 0 100 i *> 192.168.3.0 10.0.0.1 0 0 100 i Total number of prefixes 2
R2 শুধুমাত্র দুইটি প্রিফিক্সই রিসিভ করছে।
যে প্রক্রিয়ায় R2 রাউটারে R1 এর প্রিফিক্সসমূহ ফিল্টার করা হলো, ঠিক একই প্রক্রিয়ায় R1 রাউটারেও R2 এর প্রিফিক্সসমূহ ফিল্টার করা যাবে।
কোন রাউটারের Outgoing প্রিফিক্স ফিল্টার করতে চাইলে তা নিম্নোক্তভাবে করা যায়। যেমনঃ R1 রাউটার চাচ্ছে ইহা R2 এর কাছে 192.168.1.0/24 ও 192.168.3.0/24 ছাড়া অন্য কোন প্রিফিক্স Advertise করবে না।
R1#conf t R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255 R1(config)#access-list 1 permit 192.168.3.0 0.0.0.255
R1#conf t R1(config)#router bgp 100 R1(config-router)#distribute-list 1 out
এখন আমরা R1 এর advertised-routes গুলো চেক করলে দেখতে পাবো যে, R1 আর R2 এর কাছে #network কমান্ডের মাধ্যমে যোগ করা সবগুলো প্রিফিক্স Advertise করছে না।
R1#show ip bgp neighbors 10.0.0.2 advertised-routes Network Next Hop Metric LocPrf Weight Path *> 192.168.1.0 0.0.0.0 0 32768 i *> 192.168.3.0 0.0.0.0 0 32768 i Total number of prefixes 2
উপরিউক্ত আলোচনায় আমরা ACL ও #distribute-list কমান্ডের মাধ্যমে Prefix Filtering কিভাবে করতে হয় তা দেখলাম। #distribute-list কমান্ড ছাড়াও #prefix-list ও #route-map এর মাধ্যমেও প্রিফিক্স ফিল্টার করা যায়।
যেমনঃ
#prefix-list
R1#conf t R1(config)#ip prefix-list R2-IN seq 1 permit 172.16.1.0/24 R1(config)#ip prefix-list R2-IN seq 2 permit 172.16.3.0/24 R1(config)#ip prefix-list R2-IN seq 3 deny 0.0.0.0/0 le 32
R1#conf t R1(config)#router bgp 100 R1(config-router)#neighbor 10.0.0.2 prefix-list R2-IN in
R1#clear ip bgp 10.0.0.2
R1#show ip bgp neighbors 10.0.0.2 routes Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 10.0.0.2 0 0 200 ? *> 172.16.3.0/24 10.0.0.2 0 0 200 ? Total number of prefixes 2
#route-map
R2#conf t R2(config)#access-list 1 permit 172.16.1.0 0.0.0.255 R2(config)#access-list 1 permit 172.16.3.0 0.0.0.255 R2(config)#access-list 1 deny 0.0.0.0 255.255.255.255
R2#conf t R2(config)#route-map R1-OUT permit 10 R2(config-route-map)#match ip address 1
R2#conf t R2(config)#router bgp 200 R2(config-router)#neighbor 10.0.0.1 route-map R1-OUT out
R2#show ip bgp neighbors 10.0.0.1 advertised-routes Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 ? *> 172.16.3.0/24 0.0.0.0 0 32768 ? Total number of prefixes 2
BGP রাউটিং এর ক্ষেত্রে route-map হলো বহুল ব্যবহৃত একটি পদ্ধতি। এর মাধ্যমে Prefix Filtering করা ছাড়াও BGP এর আরো অনেক প্রয়োজনীয় কাজ করা হয়।
আশাকরি এই টিউটোরিয়ালটি দেখে আপনারা রাউটিং প্রটোকল BGP সম্পর্কে কিছু ধারণা পাবেন। ভাল থাকবেন, আল্লাহ হাফেজ।