একটি প্যাকেট ল্যাপটপ ছেড়ে যায়, VPN গেটওয়েতে কখনো পৌঁছায় না, আর কোনো ফায়ারওয়াল কাউন্টার নড়ে না। রুট টেবিল আগেই প্যাকেটের ভাগ্য ঠিক করে রেখেছে: একটি ব্ল্যাকহোল এন্ট্রি তার সঙ্গে মিলেছে এবং কোনো ইন্টারফেস দেখার আগেই কার্নেল সেটি বাতিল করেছে। কোনো গন্তব্য বন্ধ-ব্যর্থ হওয়া উচিত হলে এই আচরণ কাজে লাগে, তবে এটি সংকীর্ণ পরিধির একটি রাউটিং ক্রিয়া। এটিকে সম্পূর্ণ কিল সুইচ ভাবাই হলো সেই জায়গা যেখানে ডিজাইন ভুল হয়।

বাতিল ক্রিয়াটি আসলে কী মেলায়

একটি রুট লুকআপ একটি টেবিল বেছে নেয়, তারপর তার ভিতরে সবচেয়ে দীর্ঘ মিলে যাওয়া প্রিফিক্স বেছে নেয়। ব্ল্যাকহোল রুট হলো একটি সাধারণ এন্ট্রি যার ক্রিয়া বাতিল, তাই এটি কেবল সেই প্যাকেটগুলোকে প্রভাবিত করে যেগুলো পুরো সিদ্ধান্তের পর ওই এন্ট্রি বেছে নিত। পলিসি রুল দিয়ে টেবিল বদলান, বা আরও নির্দিষ্ট প্রিফিক্স যোগ করুন, তাহলে বাতিল আর প্রযোজ্য হয় না।

এই কারণেই ব্ল্যাকহোলের পরিধি নির্দিষ্ট ও সহজে বলা যায়: এটি প্রিফিক্সটি, টেবিলটিতে, ওই অ্যাড্রেস ফ্যামিলির জন্য ঢেকে দেয়। অন্য টেবিল জিতবে এমন গন্তব্য এটি ঢেকে দেয় না, আর কেবল IPv4 প্রিফিক্স বাতিল হওয়ার কারণে এটি IPv6 ঢেকে দেয় না।

ip route get কিছু স্থাপন করার আগেই সিদ্ধান্তটি দেখায়, টেবিল ও রুটের ধরনসহ। ওই আউটপুট পড়া ব্যর্থ অনুরোধ থেকে কোন রুল বা প্রিফিক্স কার্যকর হলো তা অনুমান করার চেয়ে দ্রুত।

ব্ল্যাকহোল unreachable বা prohibit-এর সমান নয়

Linux বাতিলের মতো তিন ধরনের রুট দেয়, আর সেগুলো প্রেরক কী দেখে তা নিয়ে আলাদা। ব্ল্যাকহোল প্যাকেটটি কোনো উত্তরের ছাড়াই ফেলে দেয়, তাই ক্লায়েন্ট টাইমআউট দেখে। unreachable রুট একটি ICMP unreachable বার্তা ফেরত দেয়, তাই সংযোগ হোস্ট বা নেটওয়ার্ক ত্রুটিসহ দ্রুত ব্যর্থ হয়। prohibit রুট একটি প্রশাসনিক নিষেধাজ্ঞার ত্রুটি দেয়, যা ইচ্ছাকৃত পলিসি প্রত্যাখ্যানের কাছাকাছি।

অ্যাপ্লিকেশনটি কী দেখবে সেই আচরণ বেছে নিন। পলিসি প্রকাশ করতে না চাইলে নীরব বাতিল উপযুক্ত, আর ব্যবহারকারীদের কোনো গন্তব্য কেন অনুপলব্ধ তা বুঝতে হলে তাৎক্ষণিক ত্রুটি ভালো। নেটওয়ার্কজুড়ে ধরনগুলো মেশালে সাপোর্ট টিকিট তৈরি হয় যা একই পলিসিকে তিনটি ভিন্ন ত্রুটি হিসেবে বর্ণনা করে।

সংযোগ নির্ণয় করার সময় ধরে নেবেন না যে প্রতিটি বাতিল এন্ট্রি বিনিময়যোগ্য। ত্রুটির পাঠ, সময় এবং প্যাকেট ক্যাপচার আলাদা, আর টেবিলের রুটের ধরনই বলে দেয় আপনি কোনটি দেখছেন। ip-route ম্যানুয়াল ধরনগুলো ও তাদের ত্রুটি-আচরণ তালিকাভুক্ত করে।

কিল সুইচের সঙ্গে এটি কীভাবে তুলনীয়

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

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

পরিধিই সেই জায়গা যেখানে তুলনাটি গুরুত্বপূর্ণ। ফায়ারওয়াল মালিক, পোর্ট বা ইন্টারফেস মেলাতে পারে এবং এন্ডপয়েন্ট পৌঁছনোযোগ্য রেখে একটি অ্যাপ্লিকেশন ব্লক করতে পারে; রুট তা পারে না। উল্টোদিকে, কোনো প্যাকেট ফিল্টার লোড না করেই রুট একটি সম্পূর্ণ প্রিফিক্স বাতিলে পাঠাতে পারে, যা ন্যূনতম সিস্টেমে কাজে লাগে।

WireGuard-এর AllowedIPs হলো ক্রিপ্টোকি রাউটিং, ফায়ারওয়াল নয়। এটি ঠিক করে কোন গন্তব্য প্রিফিক্স ইন্টারফেসে গৃহীত হবে, আর কেবল টানেল সাবনেট তালিকাভুক্ত করা প্রোফাইল অন্য গন্তব্যগুলোকে সাধারণ ডিফল্ট রুটের ওপর ছেড়ে দেয়। এই কারণেই ফুল-টানেল প্রোফাইল 0.0.0.0/0 ব্যবহার করে এবং এই কারণেই wg-quick যখন পারে তখন ফায়ারওয়াল রুলও ইনস্টল করে।

টানেল এন্ডপয়েন্টকে বাতিলের বাইরে রাখুন

এন্ডপয়েন্টের বাইরের ঠিকানা ভৌত ইন্টারফেস দিয়ে পৌঁছনোযোগ্য থাকতে হবে। যে বাতিল ওই ঠিকানাটিও ধরে ফেলে তা হ্যান্ডশেক বেরোতে বাধা দেয়, আর টানেল কখনো ওঠে না, যা রাউটিং পলিসির বদলে VPN ত্রুটির মতো দেখায়। পরিবর্তনের আগে ও পরে এন্ডপয়েন্টের রুট যাচাই করুন।

ব্যবস্থাপনা অ্যাক্সেসও একই পর্যালোচনার অংশ। রাউটার বা ক্লায়েন্টে যাওয়ার একমাত্র পথ যদি টানেল হয়, তবে অতিরিক্ত বিস্তৃত বাতিল আপনাকে সেই মেশিন থেকেই আটকে দিতে পারে যা এটি সরাতে দিত। নথিভুক্ত আউট-অব-ব্যান্ড রুট, কনসোল বা সময়সীমাবদ্ধ রোলব্যাক রাখুন।

IPv6-এর নিজস্ব এন্ট্রি ও নিজস্ব পর্যালোচনা দরকার। যে ডিজাইন IPv4-কে ব্ল্যাকহোলে ফেলে IPv6-কে ডিফল্ট রুটে রেখে দেয়, তা ঠিক সেই ট্রাফিকই ফাঁস করে যা পলিসি থামাতে চেয়েছিল, আর কেবল IPv4 পরীক্ষায় ভুলটি অদৃশ্য থাকে।

টাইমার ও রোলব্যাকসহ ধাপে ধাপে প্রয়োগ করুন

সংক্ষিপ্ত স্বয়ংক্রিয় অপসারণসহ রুটটি প্রয়োগ করুন যাতে রিবুটের পরেও ভুল টিকে না থাকে। নিচের কমান্ডগুলো একটি ডকুমেন্টেশন রেঞ্জ ব্যবহার করে; এটি আপনার ডিজাইন যে প্রিফিক্স সত্যিই বাতিল করে তা দিয়ে বদলে দিন:

sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8

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

প্রিফিক্স, টেবিল, অ্যাড্রেস ফ্যামিলি ও রোলব্যাক পদ্ধতি লিখে পরিবর্তনটি শেষ করুন। বাতিল হলো রাউটিং ডিজাইনে একটি ইচ্ছাকৃত ব্যতিক্রম, আর পরবর্তী প্রকৌশলীকে এটি এখনো প্রযোজ্য কি না ঠিক করার আগে জানতে হবে এটি কোন ট্রাফিক থামানোর জন্য ছিল।

সম্পর্কিত নিবন্ধ