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

এক্সিট বদলানোর দুটি উপায়

রুট সোয়াপ একটিমাত্র কমান্ড এবং কয়েক সেকেন্ডে ফেরানো যায়, তাই ঘটনার সময় এটি ব্যবহৃত হয়। এটি নির্বিশেষও: বিদ্যমান আপলোডের প্যাকেটগুলো হঠাৎ অন্য টানেল দিয়ে বের হয়, অন্য পাবলিক সোর্স ঠিকানা ও আলাদা অনুবাদ অবস্থা নিয়ে।

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

মূল্য হলো জটিলতা: দুটি রাউটিং টেবিল, সঠিক হুকে চলা একটি শ্রেণিবদ্ধকারী, এবং এমন মার্ক যা বাক্সের অন্য সবকিছুর সঙ্গে সমন্বয় করতে হয়।

প্রতিটি এক্সিটকে নিজের টেবিল দিন

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

ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102

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

একবার বেছে নিন, প্রথম প্যাকেটেই

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

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

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

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

ড্রেনের চারটি ধাপ

  1. A-তে হাত না দিয়ে B প্রস্তুত করুন: রাউটিং, ফরওয়ার্ডিং, অনুমোদন, NAT এবং ফেরার পথ। গেটওয়ের বিদ্যমান কনফিগারেশন মালিকের মাধ্যমে তার টেবিল ও নির্বাচন নীতি ইনস্টল করুন।

  2. শ্রেণিবদ্ধকারী বদলান যাতে নতুন, অশ্রেণিবদ্ধ সংযোগ B বেছে নেয়, সংরক্ষিত পছন্দ অক্ষুণ্ণ রেখে। একটি পারমাণবিক nftables লেনদেন এমন একটি জানালা এড়ায় যেখানে পুরোনো অবস্থা মুছতে হয়।

  3. A-এর ফ্লো শেষ হওয়া পর্যন্ত A চালু রাখুন। এর ইন্টারফেস, টেবিল, দূরের এক্সিট ও NAT ম্যাপিং এখনও সেই ফ্লোগুলোর অংশ, এবং NAT নিয়ম সম্পাদনা করলে ইতিমধ্যে থাকা বাইন্ডিং পুনর্নির্মিত হয় না।

  4. ড্রেনের শর্ত পূরণ হলে A অবসর দিন, এক শান্ত বিরতি নয়, বরং সংযোগ অবস্থা ও অ্যাপ্লিকেশনের আচরণ দিয়ে বিচার করে।

ড্রেন যা প্রতিশ্রুতি দিতে পারে না

ব্রাউজার অনুরোধ নতুন পরিবহন সংযোগ নয়; পুলিং পুরোনো সংযোগ দিয়েই অনুরোধ পাঠাতে থাকে। বিপরীতে, একটি UDP ফ্লো conntrack থেকে পুরোনো হয়ে যেতে পারে এবং পরের প্যাকেট নতুন করে শ্রেণিবদ্ধ হয়। ড্রেন ট্র্যাক করা ফ্লো অনুসরণ করে, অ্যাপ্লিকেশনের সেশন-ধারণা নয়।

যদি A-এর ফ্লো শেষ হওয়ার আগে A ব্যর্থ হয়, সংরক্ষিত মার্ক তাদের বাঁচায় না। তারা B দিয়ে পুনঃসংযোগ করে, অথবা একেবারেই সংযোগ করে না। পরিকল্পিত ড্রেন মূল পথ সুস্থ থাকা পর্যন্ত ধারাবাহিকতা কেনে; এটি স্বাধীন এক্সিটের মধ্যে অবস্থার প্রতিলিপি নয়।

দুই অর্ধেকই যাচাই করুন

পরিবর্তনের আগে একটি দীর্ঘস্থায়ী অনুমোদিত সংযোগ এবং পরে সত্যিকারের নতুন একটি শুরু করুন। প্রতিটি কোন টানেল ব্যবহার করে এবং দূরের প্রান্ত কোন পাবলিক সোর্স ঠিকানা দেখে তা নিশ্চিত করুন, তারপর যাচাই করুন যে ফেরত ট্রাফিক ফিরে আসছে।

নতুন পছন্দ দেখাতে conntrack টেবিল ফ্লাশ করবেন না। এটি ঠিক সেই অবস্থাটি ধ্বংস করে যা ড্রেন সংরক্ষণ করার কথা, এবং একটি নিয়ন্ত্রিত মাইগ্রেশনকে পরিষ্কার দেখানো পরীক্ষাসহ বিভ্রাটে পরিণত করে।

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