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

জায়গায় প্রতিস্থাপন আর সমান্তরাল কাটওভার আলাদা কাজ

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

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

QuestionIn-place swapParallel endpoint
Rollback in one step?Only if you can get the old address backPoint DNS back; old host still up
Blast radiusEvery client at onceOnly the clients you moved
Best whenThe address is yours to reassignThe old address is gone for good

পুরোনো ঠিকানাটি যেখানে লেখা আছে এমন প্রতিটি জায়গা খুঁজুন

টেক্সট সার্চ দিয়ে শুরু করুন, কারণ কনফিগারেশন ফাইলগুলো সহজ অর্ধেক। ডেমন কনফিগ, ফায়ারওয়াল ফ্র্যাগমেন্ট, মনিটরিং টার্গেট আর ডিস্কে থাকা যেকোনো তৈরি ক্লায়েন্ট বান্ডল খুঁজুন। IPv6 ঠিকানা প্রকাশ করলে সেটিও অন্তর্ভুক্ত করুন; কেবল A রেকর্ড অনুসরণ করা সরানো ডুয়াল-স্ট্যাক ক্লায়েন্টদের পুরোনো পথে ফেলে রাখে।

OLD=203.0.113.10
grep -RIn -- "$OLD" /etc /root
ss -lunpt | grep -F "$OLD"
nft list ruleset | grep -F "$OLD"
iptables-save | grep -F "$OLD"
wg show all endpoints

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

কিছু বদলানোর আগে ইনভেন্টরিটি লিখে রাখুন; এটি রোলব্যাক স্ক্রিপ্ট হিসেবেও কাজ করে।

হোস্টনেম ক্লায়েন্টরা সেরে ওঠে; লিটারেল-IP ক্লায়েন্টরা চুপ হয়ে যায়

ক্লায়েন্টরা হোস্টনেম দিয়ে সার্ভারে পৌঁছালে কাটওভার মূলত একটি DNS সমস্যা, আর গতকাল আপনি যে TTL সেট করেছেন তা ঠিক করে কতটা খারাপ হবে। রিজলভার ক্যাশ করে, স্টাব রিজলভার আবার ক্যাশ করে, আর অনেক ক্লায়েন্ট কেবল নতুন সংযোগে নামটি খোঁজে, তাই প্রতিষ্ঠিত টানেল তার শুরুর ঠিকানা ধরে রাখে।

এন্ডপয়েন্ট লিটারেল ঠিকানা হলে কিছুই আবার রিজলভ হয় না আর কিছুই অভিযোগ লগ করে না। WireGuard একটি রিজলভ হওয়া সকেট ঠিকানা সংরক্ষণ করে: Endpoint = vpn.example.net:51820 ওই মুহূর্তেই একটি IP হয়ে যায় যখন wg-quick up চলে, আর আপনি বদলানো পর্যন্ত সেই IP-ই থাকে। OpenVPN বেশি সহনশীল: এটি সংযোগের সময় remote হোস্টনেম রিজলভ করে এবং resolv-retry infinite থাকলে পুনঃসংযোগে আবার DNS চেষ্টা করে। লিটারেল IP দিলে দুটোই এমন একটি মেশিনে ডায়াল করতে থাকে যা আর নেই।

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

ঠিকানার সঙ্গে বিশ্বাস সরে না

WireGuard পরিচয়কে পৌঁছানোর ক্ষমতা থেকে আলাদা করে, যা ঠিকানা সরানোকে প্রায় বিনামূল্যে করে তোলে। পিয়াররা পাবলিক কী দিয়ে চিহ্নিত হয়, আর এন্ডপয়েন্ট কেবল সেটাই যেখানে প্যাকেট এখন যায়; হোস্ট সাম্প্রতিকতম প্রমাণিত প্যাকেটের উৎস ঠিকানা থেকে পিয়ারের এন্ডপয়েন্ট হালনাগাদ করে। নিষ্ক্রিয় পিয়ারের তবুও নতুন জায়গার সঙ্গে কথা বলার কারণ দরকার, আর সে ঠিকানাটি কেবল তখনই জানতে পারে যখন তার সেশন পুরোনো হয়ে যায় আর হ্যান্ডশেকের পুনঃপ্রচেষ্টা দৃশ্যমান কোনো জায়গায় ব্যর্থ হয়। WireGuard-এর দ্রুত গাইড এন্ডপয়েন্ট ফিল্ডটি আলোচনা করে।

TLS-ভিত্তিক সার্ভার হলো বিপরীত দিক। সার্টিফিকেট একটি নামের সঙ্গে বাঁধা, আর ঠিকানায় ডায়াল করা ক্লায়েন্ট তার ডায়াল করা জিনিসকে সাবজেক্ট অল্টারনেটিভ নামের সঙ্গে তুলনা করে। শুধু DNS SAN বহন করা সার্টিফিকেটে IP দিয়ে সংযোগ করলে যাচাই ব্যর্থ হয়: ক্লায়েন্ট যে নাম ব্যবহার করেছে তা সার্টিফিকেটে নেই। IP SAN দিয়ে পুনঃইস্যু করা ওই একটি সংযোগ সারায় আর পরের সরানোকে আরও খারাপ করে। প্রোফাইলে হোস্টনেম রাখা আর verify-x509-name যথাস্থানে রাখা যাচাইকে কঠোর রাখে, যদিও নিচের ঠিকানাটি বদলায়।

তারপর ডেমনটি কীসের সঙ্গে বাঁধা আছে তা যাচাই করুন; পুরোনো ঠিকানায় পিন করা সকেট নিঃশব্দে ব্যর্থ হয়। local 203.0.113.10 দিয়ে চালু করা OpenVPN সার্ভার সেই ঠিকানা চলে গেলেই উঠতে অস্বীকার করে, অথচ 0.0.0.0-এ থাকা লিসেনার বিনামূল্যে পরিবর্তনটি অনুসরণ করে। NAT একইভাবে ভাগ হয়: MASQUERADE বক্সের এখন যে ঠিকানা আছে তা অনুসরণ করে, আর স্ট্যাটিক SNAT --to-source 203.0.113.10 এমন ঠিকানায় পুনর্লিখন চালিয়ে যায় যা আর আপনার নয়, ফলে ফেরত ট্রাফিক উধাও হয়ে যায়। নতুন ঠিকানা ভিন্ন আপস্ট্রিম গেটওয়ে নিয়ে এলে rp_filter যাচাই করুন: রিভার্স-পাথ ফিল্টারিং কেবল এমন ইন্টারফেসে আসা ফেরত ট্রাফিক ফেলে দেয় যা কার্নেল আশা করেনি।

কাটওভারের ক্রম আর এটি কাজ করেছে তার প্রমাণ

এক দিন আগে TTL কমান, নতুন লিসেনার দাঁড় করান, আর কেবল আপনার কাছে থাকা একটি প্রোফাইল দিয়ে তা প্রমাণ করুন। একই নেটওয়ার্কের ভেতর থেকে পরীক্ষা প্রায় কিছুই প্রমাণ করে না, তাই সেলুলারে একটি ফোন ব্যবহার করুন এবং এন্ডপয়েন্টে পিং করার বদলে টানেলের বহন করার কথা এমন কিছু পরীক্ষা করুন।

জানালা জুড়ে দুটি ঠিকানাই লক্ষ্য করুন। নতুন হোস্টে wg show all latest-handshakes, বা OpenVPN স্ট্যাটাস ফাইল, বলে দেয় ঠিক কতজন পিয়ার সত্যিই সরে গেছে। নতুন এন্ডপয়েন্টে প্রত্যাশিত পিয়ার থাকলে আর পুরোনোটিতে কেবল পিছিয়ে থাকা কেউ থাকলে, পুরোনো লিসেনার অবসরে পাঠান, বাসি NAT নিয়ম সরান আর প্রোভাইডার ফায়ারওয়াল থেকে ঠিকানাটি বাদ দিন। পুরোনো লিসেনার সরানোই সেই ধাপ যা বাদ পড়ে, আর এটিই সেই ফাঁক বন্ধ করে যেখানে বাসি প্রোফাইল এখনো পুরোনো নেটওয়ার্কে পৌঁছায়।

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

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