nftables মার্ক ও VPN রাউটিং: কোন নিয়মটি আসলে জেতে
ফায়ারওয়ালে দেওয়া একটি মার্ক তবুও রাউটিং নিয়মে মিলতে পারে না। চতুর্থটি যোগ করার আগে নিয়মের মাস্ক, অবজেক্টের ধরন এবং অন্য লেখকদের যাচাই করুন।
nftables-এ দেওয়া একটি মার্ক কথা অনুযায়ী এক শ্রেণির ট্রাফিক টানেল দিয়ে পাঠানো উচিত, কিন্তু ট্রাফিকটি ভৌত ইন্টারফেস দিয়েই বেরিয়ে যেতে থাকে। নিয়মসমষ্টিটি বিচ্ছিন্নভাবে সঠিক দেখায়। সাধারণত যা ঘটে তা হলো অন্য কিছু একই মার্ক লিখে ফেলেছে, অথবা রাউটিং নিয়মটি এমন মাস্কের সঙ্গে মেলে যা নতুন মান আর পূরণ করে না।
যাচাই 1: কার্নেল যে নিয়মে মেলে সেটি পড়ুন
ফায়ারওয়াল নয়, নীতি-নিয়ম দিয়ে শুরু করুন। কার্নেল অগ্রাধিকার ক্রমে নিয়ম দেখে এবং প্রথম মিলটিই টেবিল নির্ধারণ করে। নিয়ম থেকেই fwmark মান ও মাস্ক পড়ুন, তারপর নিশ্চিত করুন যে আপনি যে মার্ক দিয়েছেন তা বহনকারী প্যাকেট সত্যিই এতে মেলে। পূর্ণ 32-বিট মান প্রত্যাশা করা নিয়ম কেবল একটি বিট বহনকারী প্যাকেটে মিলবে না।
তারপর নিশ্চিত করুন ওই নিয়ম কোন টেবিল বেছে নেয় এবং টেবিলটিতে কী আছে। খালি টেবিলের দিকে নির্দেশ করা নিয়ম অনুসন্ধান ব্যর্থতা তৈরি করে, যার মানে অনেক সিস্টেমে প্যাকেট পরের নিয়মে গিয়ে ভৌত ইন্টারফেস দিয়ে বেরিয়ে যায়।
দুটি কমান্ড এটি নিষ্পত্তি করে: নিয়মের তালিকা এবং ওই টেবিলে গন্তব্যের রুট অনুসন্ধান।
যাচাই 2: প্যাকেট মার্ক না কানেকশন মার্ক
nftables প্যাকেটে একটি মার্ক এবং কানেকশন-ট্র্যাকিং এন্ট্রিতে একটি মার্ক বসাতে পারে, এবং এগুলো ভিন্ন অবজেক্ট। প্যাকেট মার্ক প্যাকেটের প্রক্রিয়াকরণ পর্বের জন্য থাকে, আর কানেকশন মার্ক প্রবাহের জন্য টিকে থাকে এবং ইচ্ছাকৃতভাবে কপি করতে হয়। একটি বসিয়ে অন্যটি প্রত্যাশা করা সাধারণ অর্ধ-সমাধান।
যদি রাউটিং নিয়ম প্যাকেট মার্কের উপর নির্ভর করে, তবে পথের পরে কানেকশন মার্ক পুনরুদ্ধার করলে সেই সিদ্ধান্তে কিছুই হয় না, কারণ সিদ্ধান্তটি ইতিমধ্যেই হয়ে গেছে।
রাউটিং সংকেত কোন অবজেক্টের, তা ঠিক করুন, তারপর যেখানে রাউটিং সিদ্ধান্ত নেওয়া হয় সেখানেই এটি বসান।
যাচাই 3: এই মার্কটি আর কে লেখে
WireGuard-এর নিজস্ব টুল তার UDP প্যাকেটে মার্ক দেয় যাতে এনক্রিপ্টেড ট্রান্সপোর্ট যে টানেলের অন্তর্গত সেখানে ফিরে রাউট না হয়। যদি আপনার নিয়মসমষ্টি একই ফিল্ডে অসম্পর্কিত মান দেয়, তবে সেই বাদ দেওয়া অদৃশ্য হয়ে যায় এবং টানেলের বাইরের ট্রাফিক নিজের ভিতরে ঢোকার চেষ্টা করে। উপসর্গ হলো এমন একটি টানেল যা প্রতিষ্ঠিত হয় এবং পরে ট্রাফিক পাঠানো বন্ধ করে দেয়।
মার্ক অন্যান্য ফায়ারওয়াল টুল, কন্টেইনার নেটওয়ার্কিং এবং অন্য উদ্দেশ্যে নীতি-রাউটিংও ব্যবহার করে, তাই দুটি সাবসিস্টেমের পুরো ফিল্ড লেখা একটি সংঘাত, যদিও প্রত্যেকটি আলাদাভাবে সঠিক।
আরেকটি যোগ করার আগে লেখকদের তালিকা করুন।
যাচাই 4: মাস্ক ঠিক করে আপনি কী রাখবেন
মার্ক একটি 32-বিট ফিল্ড, আর মাস্ক হলো একাধিক মালিকের তা ভাগ করে নেওয়ার উপায়। মাস্কসহ মান বসালে আপনার না-থাকা বিটগুলো সংরক্ষিত থাকে; পুরো ফিল্ড বসালে বাকি সবার বিট নষ্ট হয়। ফিল্ড স্পর্শ করে এমন প্রতিটি নিয়মে মাস্ক পড়ুন, এমনকি যেগুলো আপনি লেখেননি সেগুলোতেও।
নিয়মসমষ্টির পাশে বিট বণ্টন নথিভুক্ত করুন।
নাহলে পরের ব্যক্তি এমন মান আবার ব্যবহার করবে যার ইতিমধ্যে একজন মালিক আছে, আর এখানকার সংঘাত রাউটিং বাগের মতো দেখায় যদিও এটি ঠিকানা সংক্রান্ত বাগ। প্যাকেট মেটাডেটা নিয়ে nftables ডকুমেন্টেশন নিজেই মার্ক অপারেশনগুলো বর্ণনা করে।
যাচাই 5: অনুসন্ধান নয়, আসল প্রবাহ দিয়ে যাচাই করুন
সাধারণ রুট অনুসন্ধান কোনো মার্ক বহন করে না, তাই এটি আসল প্যাকেটের চেয়ে ভিন্ন পথ দেখাতে পারে। আপনার আগ্রহের ট্রাফিক তৈরি করুন এবং কাউন্টার, কানেকশন-ট্র্যাকিং এন্ট্রি ও এটি যে ইন্টারফেস দিয়ে সত্যিই বেরোয় তা পর্যবেক্ষণ করুন। অন্তর্ভুক্ত শ্রেণি ও বাদ দেওয়া শ্রেণি দুটোই পরীক্ষা করুন, কারণ অতিরিক্ত প্রশস্ত মার্ক বাদ দেওয়াটি ভেঙে দেয় অথচ সফল দেখায়। যদি অন্তর্ভুক্ত শ্রেণি কাজ করে আর বাদ দেওয়া শ্রেণিও টানেলে ঢোকে, তবে মার্কটি সংকীর্ণ নয়, প্রশস্ত।
লাইভ সেশনে রিফ্রেশ জোর করতে কানেকশন অবস্থা ফ্লাশ করা এড়িয়ে চলুন, কারণ নতুন ও বিদ্যমান প্রবাহ বৈধভাবে ভিন্ন পথ নিতে পারে।
মার্ক, মাস্ক ও টেবিল এক জায়গায় লিখে রাখুন, তাহলে পরের সম্পাদনাটি পর্যালোচনাযোগ্য হবে।