WireGuard-এ হোস্ট প্রিফিক্স: কেন একটি ঠিকানা কাজ করে আর বাকিগুলো নয়
ইন্টারফেসে /32 একটি বৈধ হোস্ট প্রিফিক্স এবং শুধু সেই একট ঠিকানা রুট করে। AllowedIPs যে রুট বোঝায় তা যোগ করুন, তারপর ফেরার পথ যাচাই করুন।
টানেল চালু, handshake প্রতি দুই মিনিটে ঘটে, এবং ওপাশে ঠিক একটি ঠিকানা সাড়া দেয়। পিয়ারের টানেল ঠিকানায় ping কাজ করে; তার পেছনে কিছুই কাজ করে না। কেউ ইন্টারফেসের কনফিগারেশন পড়ে, হোস্ট প্রিফিক্স দেখে এবং সিদ্ধান্তে আসে যে মাস্ক ভুল। এটি /24-এ প্রশস্ত করলে ping কিছুক্ষণ ঠিক হয় এবং পরে অন্য কিছু ভাঙে। প্রিফিক্স কখনো কারণ ছিল না, এবং অনুপস্থিত রুটটি সেই রুট নয় যা মাস্ক নিয়ন্ত্রণ করে।
ইন্টারফেস প্রিফিক্স আসলে কী তৈরি করে
Linux-এ একটি ইন্টারফেসে ঠিকানা দেওয়া সেই প্রিফিক্সের জন্য একটি সংযুক্ত রুট তৈরি করে। হোস্ট প্রিফিক্স দিলে সংযুক্ত রুট একটি ঠিকানা ঢাকে। /24 দিলে তা 256 ঢাকে, এবং এর প্রত্যেকটিকে এখন ওই লিঙ্কে পৌঁছানো যায় বলে ধরা হয়।
ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1
পয়েন্ট-টু-পয়েন্ট টানেলের জন্য হোস্ট প্রিফিক্স সম্পূর্ণ স্বাভাবিক পছন্দ, কারণ অন্য প্রান্তে ঠিক একটি পিয়ার থাকে। তৃতীয় কমান্ডটিই ব্যবহারকারীর প্রশ্নের উত্তর দেয়: এটি বলে কার্নেল ওই গন্তব্যের জন্য কোন ইন্টারফেস ব্যবহার করবে, এবং কোনো রুট না মিললে এটি কিছুই কাজের দেখায় না।
লক্ষণের সম্পূর্ণ ব্যাখ্যা এটাই। একটি ঠিকানা সাড়া দেয় কারণ তার জন্য একটি সংযুক্ত রুট আছে, বা কারণ পিয়ারের অনুমোদিত তালিকায় সেটি দৈবক্রমে আছে। বাকি সবের কোনো রুট নেই এবং WireGuard জড়িত হওয়ার আগেই তা ফেলে দেওয়া হয়। টানেল সব সময় সুস্থ থাকে, তাই handshake কাউন্টার আশ্বস্তকারী দেখাতে থাকে।
AllowedIPs এক নামের অধীনে দুই নিয়ম
WireGuard-এর প্রতি-পিয়ার অনুমোদিত তালিকা একসঙ্গে দুটি কাজ করে, এবং কনফিগারেশনের বাক্যতত্ত্ব তাদের একরকম দেখায়। ভেতরে আসার সময় এটি ঠিক করে পিয়ার কোন সোর্স ঠিকানা উপস্থাপন করতে পারে। বাইরে যাওয়ার সময় এটি বেছে নেয় প্যাকেট কোন পিয়ারে পাঠানো হবে, সবচেয়ে নির্দিষ্ট মিল খুঁজে।
এই দুটি কাজের কোনোটিই রাউটিং নয়। কার্নেলকে এখনো ঠিক করতে হয় প্যাকেট টানেল ইন্টারফেসের, তার আগে যে WireGuard তাকাবে, এবং এই সিদ্ধান্ত রাউটিং টেবিল থেকে আসে। বিস্তৃত অনুমোদিত তালিকাযুক্ত পিয়ার এন্ট্রি নিজে থেকে কোনো রুট বসায় না।
তাই একটি কনফিগারেশন পূর্ণ দেখাতে পারে এবং অসমভাবে আচরণ করতে পারে। ক্লায়েন্ট ওপাশে পাঠায় কারণ রুট আছে, এবং উত্তর কখনো পৌঁছায় না কারণ ওপাশের অনুমোদিত তালিকা ক্লায়েন্টের সোর্স অনুমোদন করে না, বা কারণ ওপাশে ফেরার পথ নেই। দুই দিকই আলাদা সিদ্ধান্ত আলাদা ব্যর্থতার ধরনসহ। আপনি কোনটি পরীক্ষা করছেন তা লেখা নির্ণয়ের অর্ধেক।
রুট কোথা থেকে আসে
আপনি wg-quick ব্যবহার করলে রুটগুলি আপনার জন্য প্রতিটি পিয়ারের অনুমোদিত তালিকা থেকে তৈরি হয়, যদি না আপনি Table = off সেট করে নিজেই নিয়ন্ত্রণ নিয়েছেন। এটাই টুলটির নথিভুক্ত আচরণ, এবং এ কারণেই স্পষ্ট রুট নির্দেশনা ছাড়াও কনফিগারেশন কাজ করে।
sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0
অনুমোদিত তালিকার সঙ্গে প্রকৃতপক্ষে থাকা রুটগুলির তুলনা করুন। যে পিয়ার পুরো সাবনেট অনুমোদন করে কিন্তু শুধু একটি হোস্ট রুট তৈরি করেছে, তার অর্থ সহায়ক কখনো চলেনি, বা আপনি ইন্টারফেসটি সরাসরি wg এবং ip দিয়ে চালান, এবং তখন আপনার জন্য কোনো রুট তৈরি হয় না।
যখন আপনি এটি হাতে চালান, রুটটি এক লাইন এবং তার আকার স্পষ্ট: গন্তব্য ইন্টারফেসের মধ্য দিয়ে, গেটওয়ে ছাড়া কারণ লিঙ্কটি পয়েন্ট-টু-পয়েন্ট। এটি যোগ করা খারাপ প্রিফিক্সের জন্য কোনো গত্যন্তর নয়; এটি এমন নকশার অনুপস্থিত অর্ধেক যা রাউটিং নিজেই নিয়েছিল।
প্রশস্ত প্রিফিক্স পিয়ার এন্ট্রি যোগ করে না
প্রলুব্ধকর সংশোধন হল ঠিকানাটি /24 করা যাতে সংযুক্ত রুট সার্ভারের স্থানীয় নেটওয়ার্ক ঢাকে। এটি কাজ করছে বলে মনে হয়, এবং কাজ করছে বলে মনে হওয়ার কারণ হল সংযুক্ত রুট এখন মেলে, WireGuard নতুন কিছু শিখেছে তা নয়।
আপনি আরও যা করেছেন তা হল পুরো পরিসরকে ওই লিঙ্কে সরাসরি পৌঁছানো যায় বলে দাবি করা, যার মধ্যে অন্য পিয়ারদের বা সার্ভারের পেছনে প্রকৃতপক্ষে থাকা স্থানীয় নেটওয়ার্কের ঠিকানাও আছে। ওই ঠিকানাগুলির ট্রাফিক এখন টানেলে ঢোকে, এবং তা ওপাশ দিয়ে বেরোয় কি না তা সার্ভারের নিজের রাউটিং ও অনুমোদিত তালিকার ওপর নির্ভর করে।
ক্রিপ্টো দিকটি কোনো অবস্থাতেই প্রভাবিত হয় না। WireGuard-কে পিয়ার বাছতে অনুমোদিত তালিকায় গন্তব্য ঢাকা একটি এন্ট্রি এখনো দরকার, এবং ওপাশকে আপনার সোর্স গ্রহণ করতে তা ঢাকা একটি এন্ট্রি এখনো দরকার। প্রশস্ত ইন্টারফেস প্রিফিক্স এর কোনোটিই দিতে পারে না।
কিছু বদলানোর আগে দুই দিকই নিশ্চিত করুন
দুই প্রান্ত আলাদা করে দেখুন এবং প্রতিটি কী বলে তা লিখুন। ক্লায়েন্টে রুট ও পিয়ার এন্ট্রি; সার্ভারে আয়নার প্রতিচ্ছবি এবং তার নিজের ফেরার পথ:
ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10
ক্যাপচারই দিক নিয়ে বিতর্ক মিটিয়ে দেয়। যদি বাইরে যাওয়া প্যাকেট টানেল ইন্টারফেসে দেখা যায় এবং সার্ভার কিছু নথিভুক্ত না করে, তবে দূরের প্রান্ত সেগুলো প্রত্যাখ্যান করছে, সাধারণত কারণ আপনার সোর্স তার অনুমোদিত তালিকার বাইরে। যদি কিছুই দেখা না যায়, রুট অনুপস্থিত বা অন্য কোথাও নির্দেশ করছে।
তারপর সংকীর্ণতম প্রান্তটি ঠিক করুন। সার্ভারের দিকে আপনার ক্লায়েন্ট ঠিকানার জন্য অনুমোদিত তালিকায় এন্ট্রি এবং ক্লায়েন্টের দিকে গন্তব্য সাবনেটের জন্য এন্ট্রি স্বাভাবিক আকার, এবং এটি ইন্টারফেস প্রিফিক্সকে ছোঁয় না। প্রিফিক্স কেবল তখনই বাড়ান যখন ঠিকানা পরিকল্পনা সত্যিই ওই লিঙ্কে ভাগ করা সাবনেট চায়, এবং এটি ডিবাগিং ধাপের বদলে পরিকল্পনা পরিবর্তন হিসেবে করুন।