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

কেন প্রতিটি নোডে একই ঠিকানা কাজ করে

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

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

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

এটি লুপব্যাকে দিন, টানেলে নয়

ঠিকানাটি একটি লুপব্যাক ইন্টারফেসে রাখলে তা যেকোনো টানেল ডিভাইসের আয়ু থেকে আলাদা হয়ে যায়, তাই পুনঃসংযোগ বা কনফিগারেশন পুনরায় লোড করলে তা সরে যায় না। হোস্ট যতদিন থাকে ঠিকানা ততদিন থাকে।

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

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

ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev lo

একটি রুট পাঠান এবং একটি গন্তব্য বোঝান

ক্লায়েন্টের ঠিকানার জন্য একটি হোস্ট রুট দরকার, যা সে যে সার্ভারে সংযোগ করে সেটি দেয়। যেহেতু প্রতিটি সার্ভার একই গন্তব্য দেয়, ক্লায়েন্ট সরে গেলেও প্রোফাইল বদলায় না।

পরিষেবাটিকে দোষ দেওয়ার আগে ক্লায়েন্ট কী ইনস্টল করেছে তা যাচাই করুন।

ip route get 10.250.0.1

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

ভাগ করা ঠিকানা যা করতে পারে না

এটি ফেলওভার দেয় না। নির্বাচিত নোড মরে গেলে ঠিকানাও তার সাথে মরে যায়, এবং ক্লায়েন্টকে অন্য কোথাও পুনঃসংযোগ করতে হয়।

এটি একটি চলমান TCP সেশন স্থানান্তর করে না, কারণ নতুন সংযোগ পুরোনো সম্পর্কে কোনো জ্ঞান ছাড়াই ভিন্ন হোস্টে শেষ হয়।

এটি সুস্থ নোড বেছে নেয় না, লোড ভারসাম্য করে না, বা নোডগুলির মধ্যে ডেটা সিঙ্ক করে না। এর প্রত্যেকটি নিজস্ব ব্যর্থতার ধরনসহ আলাদা ব্যবস্থা, এবং ঠিকানা-কৌশলটি সেগুলি ঢেকে দেয় বলে ভান করাই সরল নকশার অযোগ্য স্থিতিস্থাপকতার খ্যাতি অর্জনের পথ। একসাথে দুটি টানেল সক্রিয় থাকলে গন্তব্যের অর্থ অস্পষ্ট হয়ে যায়, তাই এক-সক্রিয়-টানেল অনুমানটি স্পষ্ট রাখুন।

পরিষেবা পরিচয় নামের সাথে রাখুন

ঠিকানাটির অর্থ লিখে রাখুন: এটি ক্লায়েন্ট যে নোডে এখন সংযুক্ত সেই নোডের পরিষেবায় পৌঁছায়। এই একক বাক্যই এই প্যাটার্নটি যে ভুল বোঝাবুঝি আকর্ষণ করে তার বেশিরভাগ রোধ করে।

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

যদি প্রয়োজনটি নোড-স্থানীয় পরিষেবার জন্য একটি স্থিতিশীল গন্তব্য হয়, তবে প্যাটার্নটি মানানসই এবং প্রায় কিছুই খরচ করে না।

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

শুরুতেই এটি ঠিক করলে ভাগ করা ঠিকানাটি যা তা-ই থাকে, একটি সুবিধাজনক লেবেল, বদলে এমন একটি উপাদান নয় যা নিঃশব্দে এমন কাজ করার প্রত্যাশা পায় যার জন্য এটি কখনও ডিজাইন করা হয়নি।

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