পিয়ার রিবুটের পর strongSwan নিচে থাকে: একটি টানেল পুনরুদ্ধার
ডেমন রিস্টার্ট ছেড়ে দিন। যে সংযোগটিকে ফিরতে হবে তার উপরেই ইনিশিয়েশন ও DPD বসান, তারপর নাম দিয়ে যাচাই করুন এবং ডেমন নয়, সার্ভিসটিই প্রমাণ করুন।
রিমোট গেটওয়ে রিবুট হয়, এক মিনিটের মধ্যেই ফিরে আসে, আর লোকাল strongSwan ডেমন চলতে থাকে অথচ টানেল নিচেই থাকে। ESTABLISHED খুঁজে ডেমন রিস্টার্ট করা একটি cron জব শেষ পর্যন্ত এটিকে ঢেকে দেবে, আর একইসাথে মেশিনের প্রতিটি অসম্পর্কিত টানেলও কেটে দেবে, হয়তো ব্যর্থ টানেলটিই মিস করবে। পুনরুদ্ধার ওই সংযোগেরই অংশ যা ফিরতে হবে, এবং তা এমন সেটিংসে প্রকাশিত হয় যা রিলোডে টিকে থাকে। এই রানবুক একটি একক সংযোগের জন্য সেটাই সাজায় এবং ফলাফলটি নাম দিয়ে প্রমাণ করে।
গ্লোবাল রিস্টার্ট ছেড়ে দিন, তার প্রমাণ রাখুন
ডেমন রিস্টার্টের দুটি নির্দিষ্ট ত্রুটি আছে: এটি প্রতিটি সংযোগের স্টেট নষ্ট করে, আর কোন ইভেন্টটি আসলে ব্যর্থ হলো তা আপনাকে বলে না। আপনি যে স্ট্যাটাস টেক্সট খুঁজেছিলেন তা অন্য সংযোগ থেকে আসতে পারে, অথচ প্রয়োজনীয় child নিষ্ক্রিয় পড়ে ছিল কারণ কিছুই সেটিকে চালু করেনি।
কিছু বদলানোর আগে লোড করা সংযোগ ও সক্রিয় অ্যাসোসিয়েশনগুলো পড়ুন, যাতে পিয়ার ফেরার পর তুলনার জন্য একটি আগের চিত্র আপনার হাতে থাকে।
swanctl --list-conns
swanctl --list-sas
ফিরে আসা সংযোগের উপরেই ইনিশিয়েশন ও পুনরায় চেষ্টা বসান
swanctl.conf ডিপ্লয়মেন্টে এই সেটিংসগুলো গ্লোবাল পলিসিতে নয়, সংযোগ ও child স্তরে থাকে। নিচের টুকরোটি ইনিশিয়েটর পক্ষের একটি উদাহরণ, যা ধরে নেয় প্রস্তাব, প্রমাণীকরণ ও সিলেক্টর ইতিমধ্যেই ঠিক আছে।
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
child লোড হওয়ার সময় কী হবে তা start_action ঠিক করে: start সাথে সাথে ইনিশিয়েট করে, আর trap এমন একটি পলিসি বসায় যা মিলে যাওয়া ট্রাফিক এলে ইনিশিয়েশন চালু করে। trap|start লিখতে strongSwan 5.9.6 বা তার পরে প্রয়োজন, তাই লাইনটি কপি করার আগে ভার্সন দেখে নিন। পিয়ারকে মৃত ঘোষণা করার পর dpd_action=restart নতুন দরকষাকষি চায়, আর সংযোগ স্তরে keyingtries=0 সফলতা বা স্থায়ী ত্রুটি পর্যন্ত আরও চেষ্টার অনুমতি দেয়। IKEv2-এর অধীনে dpd_timeout-এর কোনো প্রভাবই নেই, কারণ সাধারণ পুনঃপ্রেরণই ঠিক করে পিয়ার কখন সাড়া দিচ্ছে না।
সেই উদাহরণের বিলম্বটি একটি শুরুর বিন্দু, কোনো সর্বজনীন সময়সীমা নয়। পিয়ারের রিবুট কত সময় নেয় এবং কতটা পুনঃপ্রেরণ আপনি সহ্য করতে রাজি, তা দেখে এটি বাছুন।
কোন ইভেন্ট থেকে আপনি পুনরুদ্ধার করছেন তা জানুন
তিনটি ব্যর্থতা ড্যাশবোর্ডে একই রকম দেখায় আর আলাদা সেটিংস চায়। কখনোই না-ওঠা প্রাথমিক সংযোগ হলো কনফিগারেশন বা পৌঁছানোর সমস্যা। সাড়া দেওয়া বন্ধ করা পিয়ার হলো DPD-এর কেস। পিয়ার স্পষ্টভাবে বন্ধ করা child হলো নিজস্ব close_action-সহ একটি পলিসি ইভেন্ট, যা DPD কখনো দেখে না। আউটেজের আশপাশের লগ পড়লেই বোঝা যায় তিনটির মধ্যে কোনটি আপনার, আর উত্তরটি সমাধান বদলে দেয়।
অপারেটররা রক্ষণাবেক্ষণের জন্য ইচ্ছাকৃতভাবে বন্ধ করে এমন সংযোগে আক্রমণাত্মক পুনরায়-ইনিশিয়েশন যোগ করবেন না, নইলে উইন্ডোর মাঝখানে টানেল আবার হাজির হয়। অন-ডিমান্ড ডিজাইনে সংরক্ষিত trap-ই যথেষ্ট, কারণ মিলে যাওয়া ট্রাফিক কোনো টাইমার ছাড়াই child পুনঃস্থাপন করে।
ডেমন স্ট্যাটাসে নয়, নাম দিয়ে যাচাই করুন
পিয়ার এখনো নিচে থাকতেই সংযোগ ও তার child নাম দিয়ে পড়ুন, তারপর ফিরে এলে আবার; এই দুটি আউটপুটের পার্থক্যই প্রমাণ।
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
তারপর অ্যাসোসিয়েশন নয়, সার্ভিসটি নিশ্চিত করুন। নতুন child সিকিউরিটি অ্যাসোসিয়েশন আর তার পেছনের প্রাইভেট গন্তব্যে সফল অনুরোধ—এই দুটি তথ্যই গুরুত্বপূর্ণ, আর চলমান ডেমন ও সুস্থ অসম্পর্কিত টানেল দুটির কোনোটিই প্রমাণ করে না।
child কখনো ইনিশিয়েট না করলে দেখুন টেস্ট ট্রাফিক কনফিগার করা সিলেক্টরগুলোর সাথে ঠিক মেলে কি না, প্রোটোকল ও পোর্টসহ। ইনিশিয়েট করে ব্যর্থ হলে প্রমাণীকরণ বা প্রস্তাবের ত্রুটিটি পড়ুন, অসীম লুপে লুকাবেন না, কারণ keyingtries=0 স্থায়ী প্রত্যাখ্যান চিরকাল পুনরাবৃত্তি করবে।
উইন্ডোতে পরিবর্তনটি লোড করুন এবং আবার পরীক্ষা করুন
রিলোড করা ডেমন রিস্টার্টের চেয়ে নিরাপদ, তবুও তা বিনামূল্যে নয়: child প্রতিস্থাপন বা আনলোড করা একটি চালু অ্যাসোসিয়েশন বন্ধ করতে বা তার trap ফেলে দিতে পারে।
রক্ষণাবেক্ষণ উইন্ডোর সময় লোড করুন, আগের ফাইলটি রাখুন, আর নিশ্চিত করুন সংযোগটি ডিফল্টে নয়, আপনার ইচ্ছাকৃত সেটিংস নিয়েই দেখা যাচ্ছে।
swanctl --load-conns
swanctl --list-conns
আগের ফাইলটি ফিরিয়ে এনে আবার লোড করে রোলব্যাক করুন, তারপর একই দুটি কমান্ড পুনরাবৃত্তি করুন। যে টানেল কেবল ডেমন রিস্টার্টের পরেই ফেরে, সেটি মেরামত হয়নি—রিসেট হয়েছে।