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

এক্সিট কোথায় থাকবে তা ঠিক করুন

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

নেমস্পেস বা VM মেমরি খরচ করে এবং আপনাকে একটি পরিষ্কার বিস্ফোরণ-ব্যাসার্ধ দেয়। পলিসি রাউটিং দুটি রুল খরচ করে এবং ডিবাগ করার জন্য একটি বক্স রেখে দেয়।

আপনার সোর্স অনুমোদন করে এমন এক্সিট বেছে নিন

এই ল্যাবে বেশিরভাগ ব্যর্থতা ঘটে একটি ফায়ারওয়াল রুল তৈরি হওয়ার আগেই। এক্সিট অপারেটরকে অবশ্যই সেই সোর্স ঠিকানা গ্রহণ করতে হবে যা ট্রান্সলেশনের পর আপনার প্যাকেট বহন করে, আর এই ডিজাইনে সেটি LAN প্রিফিক্স নয়, টানেল ঠিকানা। এজন্যই মাস্কারেডিং ডিজাইনের শুরু থেকেই থাকা উচিত, পরে সংযোজন হিসেবে নয়।

অপারেটরের সাথে তিনটি বিষয় নিশ্চিত করুন: পিয়ার আপনার টানেল ঠিকানা অনুমোদন করে, এটি নিজের কাছে শেষ না হয়ে IPv4 ফরোয়ার্ড করে, এবং এটি ইগ্রেস NAT প্রয়োগ করে। প্রথমটি ছাড়া আপনার প্যাকেট পৌঁছে অদৃশ্য হয়ে যায়। তৃতীয়টি ছাড়া সেগুলো একটি প্রাইভেট সোর্স নিয়ে বেরিয়ে পরের হপে মরে যায়। তারপর দেখুন wg-quick নিজের ডিফল্ট রুট বসাচ্ছে কি না, যা Table = off প্রতিরোধ করে; ওই সেটিং রুট তৈরি বন্ধ করে, পিয়ারের AllowedIPs যাচাই বা তার DNS হ্যান্ডলিং নয়।

দুটি পলিসি অবজেক্ট স্টিয়ারিং করে

স্টিয়ারিংয়ের জন্য একটি টেবিল ও একটি রুল দরকার। টেবিলে দুটি রুট থাকে: LAN ইন্টারফেস থেকে বেরোনো LAN প্রিফিক্স এবং টানেল থেকে বেরোনো ডিফল্ট। রুলটি LAN ইন্টারফেসে আসা এবং ওই প্রিফিক্স বহনকারী ট্র্যাফিককে টেবিলে পাঠায়। সোর্স ম্যাচের পাশে iif সিলেক্টর ব্যবহার করুন, কারণ গেটওয়ের নিজস্ব WireGuard প্যাকেট স্থানীয়ভাবে উৎপন্ন হয় এবং কখনো আগত ইন্টারফেসের সাথে মেলে না।

গার্ড লুকআপের আগে আসে, পরে নয়। ওই ক্রমই ডিজাইনের সম্পূর্ণ নিরাপত্তা বৈশিষ্ট্য।

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

ip rule add from 192.168.50.0/24 iif lan0 lookup 51861 pref 1000
ip rule add from 192.168.50.0/24 iif lan0 unreachable pref 1001
ip route add table 51861 default dev wg0

ফিরে যাওয়ার ফাঁক খোলার আগেই বন্ধ করুন

আগে গার্ড বসান, পরে লুকআপ। উল্টো করলে কয়েক সেকেন্ডের একটি জানালা থাকে যেখানে টেস্ট ক্লায়েন্টের ট্র্যাফিক আপলিংকে পৌঁছাতে পারে।

ফিল্টার ছবিটি সম্পূর্ণ করে। forward হুকে টেস্ট প্রিফিক্সের জন্য LAN-থেকে-টানেল অভিমুখ এবং প্রতিষ্ঠিত ফেরত অভিমুখ গ্রহণ করুন, তারপর বাকি সব বাদ দিন; ওই প্রিফিক্সের NAT টানেল ইন্টারফেসে যায় postrouting-এ। ফরোয়ার্ড চেইনে policy drop রেখে দেওয়াই অনুপস্থিত রুটকে লিকের বদলে নীরবতায় পরিণত করে। রিভার্স-পাথ ফিল্টারিংয়ের জন্য টানেল ইন্টারফেসে লুজ মোড দরকার, কারণ ডিক্যাপসুলেশনের পর আসা একটি পাবলিক সোর্সের সেরা রিভার্স রুট WAN পাশে থাকে। Linux all ও প্রতি-ইন্টারফেস মানের মধ্যে উচ্চতরটি নেয়, তাই টানেল ইন্টারফেস সেট করা সব জায়গায় ভ্যালিডেশন দুর্বল করার সমান নয়।

ব্যর্থতার ঘটনা দিয়ে এটি প্রমাণ করুন

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

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

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