কেন VPN-এর উপর BGP আপনার আন্ডারলে পাথ নিয়ন্ত্রণ করে না
VPN-এর উপর BGP রিচেবিলিটি বিনিময় করে এবং রুট পলিসি প্রয়োগ করে, কিন্তু আন্ডারলে-ই বাইরের পাথ বেছে নেয়। সেশনটি আসলে কী নিয়ন্ত্রণ করে।
দুটি সাইট IPsec টানেলের উপর দিয়ে BGP পিয়ার করে, একে অপরের প্রিফিক্স শেখে, আর ডায়াগ্রামটিকে পাথ নিয়ন্ত্রণ বলে নতুন নাম দেওয়া হয়। এই লেবেলটিই বিভ্রান্তির শুরু। সেশনটি রিচেবিলিটি বিনিময় করে এবং পলিসি প্রয়োগ করে, কিন্তু এনক্রিপ্টেড প্যাকেট কোন প্রোভাইডার, কেবল বা রাউটার বহন করবে তা নিয়ে এর কোনো মত নেই। আমি একটি দলকে একটি কাজ করা টানেল পুনর্নির্মাণ করতে দেখেছি, কারণ তারা আশা করেছিল BGP রুট পরিবর্তন ট্রাফিককে এমন একটি ফাইবার পাথে সরিয়ে দেবে যা সেশনটি কখনো প্রভাবিত করতে পারত না।
মানুষেরা ধরে নেয় সেশনটি কী কিনে দেয়
প্রত্যাশার বেশিরভাগ আসে ল্যাবে রুট পরিবর্তন কেমন দেখায় তা থেকে। আপনি টানেলের উপর দিয়ে একটি প্রিফিক্স ঘোষণা করেন, দূরের পাশ সেটি ইনস্টল করে, আর ট্রাফিক নড়ে। একই ক্রম এমন রাউটারেও ঘটে যার সত্যিই ট্রাফিক-ইঞ্জিনিয়ারিং নিয়ন্ত্রণ আছে, তাই দুটিকে গুলিয়ে ফেলা হয়। ল্যাবে সাধারণত দুই সাইটই একটি অ্যাক্সেস লিঙ্ক ভাগ করে, আর ঠিক এ কারণেই পার্থক্যটি সেখানে কখনো দেখা যায় না।
BGP হলো একটি রিচেবিলিটি প্রোটোকল। এটি পিয়ারকে বলে যে আপনি একটি প্রিফিক্সের জন্য প্যাকেট পৌঁছে দিতে পারেন, এবং প্রতিটি পক্ষকে তার পাওয়া অফারগুলো র্যাংক করতে দেয়। এটি টানেলের উপর দিয়ে সত্যিই উপকারী: সাইট আসা-যাওয়ার সঙ্গে প্রিফিক্সগুলো ওঠে-নামে, এবং প্রতিটি এজ ডিভাইসে স্ট্যাটিক রুট না লিখেই আপনি একটি রেঞ্জ প্রত্যাখ্যান করতে পারেন। এটি যা করে না, তা হলো প্রোভাইডারের রাউটারগুলোকে আপনার নিয়ন্ত্রণে আনা।
আন্ডারলে বহন করে বাইরের হেডার। আপনার টানেল এন্ডপয়েন্ট পিয়ার অ্যাড্রেসে এনক্রিপ্টেড প্যাকেট পাঠায়, আর ওই দুই অ্যাড্রেসের মধ্যের নেটওয়ার্ক তার অপারেটররা যে রুট ইনস্টল করেছে তা দিয়ে সেগুলো ফরওয়ার্ড করে। BGP সেশনে কিছুই এই সিদ্ধান্ত বদলায় না, যদি না একই প্রোভাইডার এমন একটি সমর্থিত সেবা দেয় যা তা করে।
সেশনটি আসলে কী বহন করে
BGP স্পিকার তার পিয়ারের 179 পোর্টে একটি TCP সংযোগ খোলে, RFC 4271-এ সংজ্ঞায়িত মেসেজ ফরম্যাট ও পাথ অ্যাট্রিবিউট ব্যবহার করে। যখন পিয়ার অ্যাড্রেস টানেলের ভেতরে থাকে, তখন সেশন শুরু হওয়ার আগেই টানেলটি চালু থাকতে হবে এবং সেই অ্যাড্রেসটি পৌঁছানোযোগ্য হতে হবে। সম্পূর্ণ হওয়া IKE বিনিময় কোনো BGP প্রতিবেশী নয়। রুট-ভিত্তিক IPsec বাস্তবায়ন কেবল মিলে যাওয়া টানেল রুট থাকলেই ট্রাফিক পাস করে, আর পলিসি-ভিত্তিক বাস্তবায়নের সুরক্ষিত সিলেক্টরের ভেতরে পিয়ার অ্যাড্রেস দরকার। এটি উল্টো করলে ক্লাসিক অবস্থাটি তৈরি হয় যেখানে টানেল সবুজ কিন্তু সেশন নিষ্ক্রিয় বসে থাকে।
সেশন চালু হওয়ার পর পলিসি ঠিক করে কী তার ভেতর দিয়ে যাবে। প্রিফিক্স লিস্ট, AS-পাথ ফিল্টার, সর্বোচ্চ প্রিফিক্সের সিলিং এবং ডিফল্ট রুট নিয়ে স্পষ্ট সিদ্ধান্ত হলো ন্যূনতম, আর এগুলো দুই দিকেই প্রযোজ্য। যে পিয়ার যা পায় সবই গ্রহণ করে, সে আপনাকে এমন একটি ডিফল্ট রুট দিতে পারে যা স্থানীয় ইন্টারনেট অ্যাক্সেসকে নিঃশব্দে বদলে দেয়। দুই দিকের জন্য আলাদা লিস্ট দরকার, কারণ পিয়ারের কাছ থেকে আপনি কী গ্রহণ করেন আর তাকে কী ঘোষণা করেন, তা ভিন্ন সিদ্ধান্ত।
router bgp 65010
neighbor 10.255.0.2 remote-as 65020
address-family ipv4 unicast
neighbor 10.255.0.2 prefix-list SITE-B-IN in
neighbor 10.255.0.2 prefix-list SITE-B-OUT out
neighbor 10.255.0.2 maximum-prefix 50
এরপর MTU কামড় দেয়। এনক্যাপসুলেশন ব্যবহারযোগ্য পেলোড কমিয়ে দেয়, তাই একটি বড় আপডেট এমন সেশন আটকে দিতে পারে যা পুরোপুরি প্রতিষ্ঠিত দেখায়: পিয়ার চালু থাকে, প্রিফিক্স কখনো আসে না, আর লগে তেমন কিছু পড়ে না। ফিল্টারকে দোষ দেওয়ার আগে টানেল ইন্টারফেসে TCP MSS ক্ল্যাম্প করুন, বা ওভারহেডের জায়গা রেখে টানেল MTU সেট করুন।
বাইরের প্যাকেটগুলো তবুও কোথায় যায়
এক সাইট থেকে অন্য সাইটে এনক্রিপ্টেড প্যাকেট বেরোয় স্থানীয় রাউটার পিয়ারের পাবলিক অ্যাড্রেসের জন্য যা বেছে নেয় তা দিয়ে। যদি দুই সাইটই একই প্রোভাইডারের কাছ থেকে ট্রানজিট কেনে, একই মেট্রো সুবিধা অতিক্রম করে, বা এক পক্ষ ক্যারিয়ার-গ্রেড NAT-এর পেছনে থাকে, তবে টানেল প্রোভাইডার ব্যর্থতা কেবল দুর্ঘটনাক্রমেই পার করে। মনিটরিং টুলে টানেল আইকন গোনা সে সম্পর্কে আপনাকে কিছুই বলে না।
রুট নির্বাচন আর ফরওয়ার্ডিং ইনস্টলেশনও আলাদা ঘটনা। একটি প্রিফিক্স BGP টেবিলে সেরা হিসেবে থাকতেই পারে এবং তবুও ফরওয়ার্ডিং টেবিলে অনুপস্থিত থাকতে পারে, কারণ নেক্সট হপ সমাধানযোগ্য নয় বা আরও নির্দিষ্ট রুট জিতে যায়। যখন কেউ রিপোর্ট করে যে BGP প্রিফিক্সটি শিখেছে কিন্তু ট্রাফিক প্রবাহিত হয় না, তখন দরকারি প্রশ্ন হলো এটি ইনস্টল হয়েছে কি না এবং কোন নেক্সট হপের দিকে দেখাচ্ছে।
ডিজাইন পর্যালোচনার জন্য সৎ উত্তর হলো ভাগ করা নির্ভরশীলতার একটি তালিকা: অ্যাক্সেস সার্কিট, আপস্ট্রিম প্রোভাইডার, সুবিধা এবং রিটার্ন পাথে থাকা যেকোনো স্টেটফুল ডিভাইস। টানেলের উপর দিয়ে একটি সেশন এমন নির্ভরশীলতা সরাতে পারে না যার উপরে সে বসে নেই।
আলাদা করার মতো তিনটি সিদ্ধান্ত
যখন একটি ডিজাইন এগুলো গুলিয়ে ফেলে, প্রতিটি আউটেজ আলোচনা বৃত্তে ঘোরে। আগে কাগজে এগুলো আলাদা করুন, তারপর প্রতিটিকে সেই ডিভাইসের সঙ্গে মেলান যা সত্যিই তা কার্যকর করে।
| Decision | Who controls it | Typical failure |
|---|---|---|
| Which prefixes may cross the relationship? | Both sides, through prefix and AS-path policy you configure deliberately | A default route accepted by mistake, or a vague aggregate |
| Which overlay next hop wins? | Local BGP selection plus next-hop resolution on your own routers | Prefix learned, never installed in the forwarding table |
| Where do the encrypted packets travel? | The underlay operators, unless a supported service adds real control | Path diversity that was never there |
প্রতিটি সারির মালিক আলাদা। প্রথমটি একটি দরকষাকষি, দ্বিতীয়টি আপনার ডিভাইসের কনফিগারেশন, তৃতীয়টি বেশিরভাগই অন্যের নেটওয়ার্ক। যে পরিবর্তন অনুরোধ তার স্পর্শ করা সারির নাম বলে, তা BGP সমস্যা বলা অনুরোধের চেয়ে অনেক সহজে অনুমোদিত হয়।
পরিকল্পনা করার মতো ব্যর্থতার ধরন
পিয়ারের সামারি রুট গ্রহণ করা সবচেয়ে সাধারণ নিজের করা ক্ষতি। কেউ বিনিময় সহজ করতে একটি ছোট অ্যাগ্রিগেট ঘোষণা করে, দূরের পাশ তা গ্রহণ করে, আর টানেলের পেছনে নেই এমন রেঞ্জের ট্রাফিক টানেল অনুসরণ করে মরে যায়। সঠিক প্রত্যাশিত প্রিফিক্সে ফিল্টার করুন, বা সঠিক সীমার প্রিফিক্স লিস্ট ব্যবহার করুন, এবং কখনো খালি অ্যাগ্রিগেট গ্রহণ করবেন না, কারণ তাতে সেশনটি গোছানো দেখায়।
প্রত্যাহারের সময় হলো দ্বিতীয়টি। শনাক্তকরণ নির্ভর করে হোল্ড টাইমার, আপনি চালু করলে BFD, টানেল ডেড-পিয়ার শনাক্তকরণ এবং দূরের পাশ কত দ্রুত ঘোষণা বন্ধ করে তার উপর। বিদ্যমান সেশন আলাদা সমস্যা: একটি নতুন রুট নতুন সংযোগ ফিরিয়ে আনতে পারে, অথচ প্রতিষ্ঠিত TCP সেশনগুলো পুরোনো অ্যাড্রেস ব্যবহার করে চলে, আর পথের স্টেটফুল ফায়ারওয়াল বা NAT এমন এন্ট্রি ধরে রাখতে পারে যা আর মেলে না। রুট পরিবর্তন সবকিছু মিটিয়ে দেবে ধরে নেওয়ার বদলে অ্যাপ্লিকেশন পুনরুদ্ধারকে গ্রহণযোগ্যতার মানদণ্ডে রাখুন।
তৃতীয়টি হলো রিটার্ন পাথ অ্যাসিমেট্রি। ট্রাফিক টানেলের উপর দিয়ে আসতে পারে এবং এমন একটি প্রোভাইডার লিঙ্ক দিয়ে ফিরতে পারে যা কখনো এটি বহনের জন্য বোঝানো হয়নি, যা একমুখী অডিও, ব্যর্থ হ্যান্ডশেক বা উত্তর ফেলে দেওয়া ফায়ারওয়াল হিসেবে দেখা যায়। দুই দিক আলাদাভাবে পরীক্ষা করুন।
চুক্তিতে কী লিখবেন, এবং কীভাবে যাচাই করবেন
অনুমোদিত প্রিফিক্স লিখিতভাবে চান: প্রতিটি রেঞ্জ উৎপন্ন করার অধিকার কার আছে, ডিফল্ট রুট অনুমোদিত কি না, এবং টানেল সেবা কোন অ্যাড্রেস ফ্যামিলি সমর্থন করে। RFC 8212 eBGP-এর জন্য স্পষ্ট ইমপোর্ট ও এক্সপোর্ট পলিসিকে প্রত্যাশায় পরিণত করেছে যেসব বাস্তবায়ন তা অনুসরণ করে, তাই যে পিয়ার এখনো নিঃশব্দে-সব-গ্রহণ আচরণের উপর নির্ভর করে, তাকে প্রশ্ন করা উচিত।
তারপর ডায়াগ্রামের বদলে ডিভাইস থেকে যাচাই করুন। FRR-ধাঁচের রাউটারে দরকারি কমান্ড:
show bgp summary
show bgp ipv4 unicast 10.10.0.0/16
show bgp ipv4 unicast neighbors 10.255.0.2 advertised-routes
show ip route 10.10.0.0/16
রাউটিং টেবিল আপনাকে যা দিতে পারে না এমন দুটি পর্যবেক্ষণ যোগ করুন। এনক্যাপসুলেটেড প্যাকেট আসলে কোন অ্যাড্রেসকে লক্ষ্য করে তা নিশ্চিত করতে বাইরের ইন্টারফেসে ক্যাপচার করুন, যেমন tcpdump -ni eth0 udp port 51820 WireGuard টানেলের জন্য, বা IPsec-এর জন্য ESP ফিল্টার। তারপর পিয়ারের পাবলিক অ্যাড্রেসের দিকে ট্রেস করুন এবং টানেলের ভেতরের ট্রেসের সঙ্গে হপগুলো তুলনা করুন; যদি দুটোই একই প্রোভাইডার চেইন অনুসরণ করে, তবে আপনার রিডান্ডেন্সি নেটওয়ার্কে নয়, রাউটিং পলিসিতে বাস করে।
সবশেষে, ইচ্ছাকৃতভাবে একটি প্রত্যাহার পরীক্ষা করুন। রক্ষণাবেক্ষণ উইন্ডোতে টানেল নামান, প্রিফিক্স কতক্ষণ ইনস্টল থাকে, বিদ্যমান সেশনগুলোর কী হয় এবং দূরের পাশ সত্যিই গ্রহণযোগ্য কোনো রুটে ফিরে যায় কি না তা লিখে রাখুন। সেই অনুশীলন যেকোনো ডায়াগ্রামের চেয়ে ডিজাইন সম্পর্কে বেশি বলে।
রুট মানে অনুমোদন নয়। বিনিময় করতে আপনি যে প্রিফিক্সে সম্মত হন, তা বলে না কোন ব্যবহারকারী টানেলের পেছনে কোন সেবায় পৌঁছাতে পারে, তাই প্রমাণীকরণ, অনুমোদিত সেবা ও হোস্ট ফায়ারওয়াল ঠিক যেখানে ছিল সেখানেই রাখুন। পৌঁছানোযোগ্য পিয়ারও সীমাহীন ট্রানজিট বা ইচ্ছামতো অ্যাড্রেস উৎপন্ন করার অনুমতি নয়, আর সেই ধরনের ক্ষমতা BGP পলিসি লাইনে নয়, চুক্তিতে বাণিজ্যিক প্রশ্ন হিসেবে থাকা উচিত।
- প্রতিটি পক্ষ কোন প্রিফিক্স উৎপন্ন করতে পারে এবং কোনগুলো কখনো গ্রহণ করা যাবে না তা নাম দিন।
- টানেলে MSS ক্ল্যাম্প করুন এবং বড় আপডেট সত্যিই পৌঁছায় কি না নিশ্চিত করুন।
- ভাগ করা আন্ডারলে নির্ভরশীলতা তালিকাভুক্ত করুন, টানেলের সংখ্যা নয়।
- একটি বাস্তব প্রত্যাহার সময় মাপুন এবং অ্যাপ্লিকেশন কী করে তা লক্ষ্য করুন।