VPN কনফিগারেশন কনটেইনার পুনরায় তৈরি হলে কেবল তখনই টিকে থাকে যদি আপনি এটি মাউন্ট করেন
চলমান কনটেইনারের ভিতরে সম্পাদিত একটি ফাইল এমন একটি স্তরে থাকে যা হারিয়ে যায়। bind mount, volume ও secret তুলনা করুন, তারপর পুনরায় তৈরি করে চারটি বিষয় যাচাই করুন।
আপনি চলমান কনটেইনারের ভিতরে WireGuard কনফিগারেশন সম্পাদনা করেন, এটি কাজ করে, আর পরের image আপডেট তা মুছে দেয়। কিছুই ভুল কনফিগার করা হয়নি। ফাইলটি কনটেইনারের লেখনযোগ্য স্তরে ছিল, যা কেবল সেই কনটেইনার ইনস্ট্যান্সের জন্য বিদ্যমান। গুরুত্বপূর্ণ তুলনাটি হলো কোন টুল ব্যবহার করবেন তা নয়, বরং আপনার ডিপ্লয়মেন্ট কোন ইনপুট ঘোষণা করে। আপনি হাতে যা সম্পাদনা করেছেন তা এমন একটি ইনপুট যা ডিপ্লয়মেন্ট জানে না।
দুই ধরনের অবস্থা, একটির মূল্যহীন
একটি কনটেইনারের রানটাইমে করা পরিবর্তনের জন্য একটি লেখনযোগ্য স্তর থাকে, এবং কনটেইনার প্রতিস্থাপিত হলে সেই স্তরটি বাতিল হয়। এটি কোনো কনফিগারেশন ভান্ডার নয় এবং ব্যাকআপও নয়। image এবং ঘোষিত ইনপুটগুলোই কী চলবে তার সম্পূর্ণ সংজ্ঞা।
জিজ্ঞাসা করুন আপনার VPN ফাইলগুলোর মধ্যে কোনগুলো ঘোষিত ইনপুট আর কোনগুলো দুর্ঘটনা:
docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpndiff দেখায় লেখনযোগ্য স্তরে কী বদলেছে, আর সেটি ঠিক সেই জিনিসগুলোর সমষ্টি যা হারিয়ে যাবে। মাউন্ট তালিকা দেখায় কী টিকে থাকে। দুটোর তুলনা কিছু হারানোর আগেই প্রশ্নের উত্তর দেয়।
bind mount, named volume বা secret: প্রতিটি কী সুরক্ষা করে
তিনটিই একটি VPN প্রোফাইল ধরে রাখতে পারে, এবং কে এটি পড়তে পারে ও প্রতিস্থাপনে কী ঘটে তাতে তারা আলাদা।
| Mechanism | Survives recreation | Who can read it |
|---|---|---|
| Writable layer | No | Anyone with container access, until it is gone |
| Bind mount | Yes, while the host path exists | Whatever the host permissions allow |
| Named volume | Yes, until the volume is removed | Managed by the runtime |
| Secret | Yes, as a declared input | The container process, by design |
bind mount একটি হোস্ট পাথ ম্যাপ করে, তাই ফাইলটি সেই পাথ যতটা সুরক্ষিত ততটাই সুরক্ষিত এবং হোস্টের অনুমতি যতটা দেয় ততটাই দৃশ্যমান। named volume রানটাইম দ্বারা পরিচালিত হয় এবং কনটেইনার সরানো হলে টিকে থাকে, যা ডিপ্লয়মেন্টের মালিকানাধীন অবস্থার জন্য এটিকে নিরাপদ ডিফল্ট করে তোলে। secret ব্যবস্থা এমন উপাদানের জন্য যা আপনি image বা environment variable-এ চান না।
প্রতিটি environment variable আর হোস্ট ফাইলকে সমান সুরক্ষা ভেবো না, কারণ তারা সমান নয়।
কনটেইনারের ভিতরে সম্পাদনা করাই ফাঁদ
ফাঁদটি টুল নয়, সম্পাদনার দিক। চলমান কনটেইনারের ভিতরে করা পরিবর্তন ডিপ্লয়মেন্টের কাছে অদৃশ্য, তাই পরের পুনর্নির্মাণ তা নিঃশব্দে ফিরিয়ে দেয় এবং লক্ষণটি image-এ রিগ্রেশনের মতো দেখায়। ডায়াগনস্টিকের জন্য সেখানে পরিবর্তন করতে হলে সাথে সাথে তা বাইরে কপি করে ঘোষিত ইনপুটে রাখুন। তারপর পুনরায় তৈরি করে প্রমাণ করুন যে ডিপ্লয়মেন্ট এটি পুনরুৎপাদন করে।
একটি প্রোফাইলে ব্যক্তিগত কী ও অ্যাকাউন্ট উপাদান থাকতে পারে, যা সেই ফাইলের ব্যাকআপকে ফাইল কপির বদলে গোপনীয়তা ব্যবস্থাপনার কাজ করে তোলে। মালিকানা ও পড়ার অ্যাক্সেস কনটেইনারের প্রকৃত প্রসেসে সীমাবদ্ধ রাখুন, অনুমতি ত্রুটি সরাতে হোস্ট ডিরেক্টরি প্রশস্ত করবেন না।
সেই প্রশস্ত করাই কনটেইনারের সুবিধাকে হোস্টের প্রকাশে পরিণত করে।
সচেতনভাবে পুনরায় তৈরি করুন, তারপর চারটি বিষয় যাচাই করুন
image সংস্করণ, প্রয়োজনীয় ডিভাইস ও সক্ষমতা, নেটওয়ার্ক সংযুক্তি এবং স্থায়ী ইনপুট লিখে রাখুন। ডিভাইস ও সক্ষমতার তালিকা VPN কনটেইনারের জন্য বিশেষভাবে গুরুত্বপূর্ণ, কারণ টানেলের নেটওয়ার্ক ডিভাইস ও তা কনফিগার করার বিশেষাধিকার দরকার।
কোন উৎপন্ন রানটাইম অবস্থা সংরক্ষণের বদলে পুনর্নির্মাণ করা উচিত তা নিশ্চিত করুন। টানেল প্রথম শুরুতে যে কী তৈরি করেছিল তা অবস্থা, এবং সেগুলো রাখবেন না পুনরায় তৈরি করবেন তা পুরনো পাবলিক কী জানা প্রতিটি peer-এর জন্য পরিণতিসহ একটি সিদ্ধান্ত।
নিয়ন্ত্রিত পুনর্নির্মাণের পরে পরিচয়, রাউটিং, DNS এবং প্রয়োজনীয় ব্যর্থতা-ব্লক যাচাই করুন। ত্রুটি ছাড়া চালু হওয়া প্রসেস এই চারটির কোনোটিই প্রমাণ করে না। টানেল চালু থাকতে এবং তা বন্ধ করার পর আবার তা পরীক্ষা করুন, কারণ ব্যর্থতা-ব্লক কেবল তখনই দেখা দেয় যখন টানেল চলে যায়।
কনটেইনারের বাইরে পুনরুদ্ধার কপি রাখুন
কনটেইনার থেকে স্বাধীন একটি পুনরুদ্ধার কপি রাখুন, এবং নথিভুক্ত প্রক্রিয়ায় তা পুনরুদ্ধার পরীক্ষা করুন। VPN প্রোফাইলের অপরীক্ষিত ব্যাকআপ একটি আশা, বিশেষত যখন পুনরুদ্ধার পথে এমন অনুমতি লাগে যা কনটেইনার প্রসেসের দরকার।
VPN-এর মালিকানাধীন কনটেইনার প্রতিস্থাপিত হলে, তার নেটওয়ার্ক স্ট্যাক ভাগ করা অ্যাপ্লিকেশনগুলোকে রানটাইমের সমর্থিত লাইফসাইকেলে সমন্বয় করুন।
এই সমন্বয়ই পুনরায় চালু আর বিভ্রাটের মধ্যে পার্থক্য। ডিপ্লয়মেন্টের বর্ণনা করা উচিত কনফিগারেশন কোথা থেকে আসে, এবং volume ডকুমেন্টেশনই সেই জায়গা যেখানে রানটাইম আসলে কী সংরক্ষণ করে তা দেখবেন।