পরবর্তী পুনঃসংযোগে পুল কোন ঠিকানা দেবে?
পুলের ঠিকানাগুলো এমন একটি ক্রম অনুসরণ করে যা এলোমেলো নয়: প্রথমে মনে রাখা ঠিকানা, তারপর সবচেয়ে দীর্ঘ সময় অব্যবহৃত খালি ঠিকানা। নিয়ম স্থির করার আগে এটি পড়ুন।
গতকাল যে নিয়ম মিলত আজ মেলে না, কারণ ক্লায়েন্ট অন্য টানেল ঠিকানায় ফিরে এসেছে। তবে বণ্টনকারী এলোমেলো নয়, এবং তার ক্রম জানলে সেই বিস্ময় পূর্বানুমেয় ঘটনায় পরিণত হয়। সে একই ক্লায়েন্টের আগের ঠিকানাকে প্রাধান্য দেয়, সবচেয়ে দীর্ঘ সময় নিষ্ক্রিয় খালি ঠিকানায় ফিরে যায়, এবং আপনি তাকে মনে রাখার জায়গা না দিলে সব ভুলে যায়। ভাড়ার উপর নির্ভর করা নিয়মগুলো সেই দিন পর্যন্ত মিলতে থাকে যেদিন তারা চুপচাপ তা করা বন্ধ করে দেয়।
বণ্টনকারী যে ক্রম অনুসরণ করে
প্রতি common name-এ একটি সেশন থাকলে বণ্টনকারী প্রথমে সেই ঠিকানা খোঁজে যা একই ক্লায়েন্ট আগে ব্যবহার করেছিল এবং এখন খালি আছে। সেই ঠিকানা না থাকলে সে সবচেয়ে দীর্ঘ সময় নিষ্ক্রিয় থাকা খালি ঠিকানাটি নেয়। একই নামের জন্য একসঙ্গে সেশন চালু থাকলে আগের ঠিকানার অগ্রাধিকার প্রযোজ্য হয় না এবং তার বদলে প্রথম খালি ঠিকানা ব্যবহার হয়, কারণ সেশনগুলোকে আলাদা সমকক্ষ নোড হিসেবে ধরা হয়।
| Situation | Address chosen | Practical effect |
|---|---|---|
| Reconnect, old address still free | The remembered address | Rules appear stable for days |
| Old address taken by another client | Least recently used free address | A working rule silently stops matching |
| Concurrent sessions, same name | First free address, per session | One identity can hold several leases |
এ থেকে সঙ্গে সঙ্গে দুটি ফল আসে। দ্রুত পুনঃসংযোগ করা ক্লায়েন্ট সাধারণত তার ঠিকানা ধরে রাখে, তাই কেউ প্রক্রিয়াটি বদলানোর আগে লক্ষ্য করে না। আর সেই ছোট জানালায় সংযোগ করা অন্য ডিভাইস ঠিকানাটি তখন নিতে পারে যখন তা অল্প সময় খালি থাকে, এরপর প্রথম ক্লায়েন্ট অন্য কিছু পায় এবং পুরোনো নম্বরে ভিত্তি করা প্রতিটি নিয়ম ভুল হয়ে যায়। দুটি ঘটনার কোনোটিই ত্রুটির মতো দেখতে লগ লাইন তৈরি করে না।
ভাড়া কেন স্থির দেখায় আর পরে সরে যায়
স্থিতিশীলতা এখানে পুনঃসংযোগগুলোর উদ্ভূত গুণ যা অন্য কেউ ঠিকানা দাবি করার আগে আসে। এটি প্রতিশ্রুতি নয়, এবং ক্লায়েন্ট বিচ্ছিন্ন থাকা অবস্থায় এটি প্রয়োগ হয় না। ঠিকানা বদলাবে বলে পরিকল্পনা করুন, তা দেখে অবাক হওয়ার বদলে। ডিভাইসসংখ্যার চেয়ে সামান্য বড় পুল সংঘর্ষকে সাধারণ ব্যাপার করে তোলে, কারণ সবচেয়ে দীর্ঘ সময় অব্যবহৃত ঠিকানায় ফেরার বেছে নেওয়ার মতো প্রায় কিছু থাকে না।
শীর্ষ সমবর্তিতা হলো যে সংখ্যার ভিত্তিতে মাপ নির্ধারণ করতে হয়, ব্যবহারকারীর সংখ্যা নয়। যে কেউ একসঙ্গে দুটি ডিভাইস থেকে পরীক্ষা করে, বা ক্লায়েন্ট যে পুরোনো সেশন শেষ হওয়ার আগে পুনঃসংযোগ করে, কিছু সময়ের জন্য দুটি ভাড়া দখল করে। শুধু মানুষের সংখ্যার ভিত্তিতে মাপা পুল ঠিক সেই বদলটাই তৈরি করবে যার দোষ মানুষ সার্ভারের উপর চাপায়।
স্থায়িত্ব ফাইল মনে রাখে, সংরক্ষণ করে না
সেবার পুনঃপ্রারম্ভ থেকে টিকে থাকা ঠিকানার জন্য স্থায়িত্ব ফাইল দরকার। এটি বন্ধ করার সময় ক্লায়েন্টের নাম ও ঠিকানা সংরক্ষণ করে এবং সেবা শুরুর সময় সেগুলো আবার পড়ে, তাই পরিকল্পিত পুনঃপ্রারম্ভ আর আপনার লেখা সব নিয়ম এলোমেলো করে না।
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 10.8.0.0 255.255.255.0
এটি যা করে না তা হলো ক্লায়েন্ট অনুপস্থিত থাকা অবস্থায় ঠিকানা ধরে রাখা। সেই বিরতিতে বণ্টনকারী নম্বরটি অন্য কাউকে দিতে স্বাধীন, এবং ফাইল তখন এমন একটি পুরোনো পছন্দ লিপিবদ্ধ করে যা পরবর্তী সংযোগ পূরণ করতে পারে না। এটিকে পুনঃপ্রারম্ভের আচরণ উন্নত করার সংকেত হিসেবে দেখুন, স্থির ঠিকানাব্যবস্থা হিসেবে নয়।
আপনি ফাইলে থাকা অবস্থায় পুলটি প্রতিটি রাউট করা সাবনেটের বিপরীতে যাচাই করুন। ওভারল্যাপিং পরিসর এমন ঠিকানা বিতরণ করে যেখানে সার্ভার রাউট করতে পারে না, এবং লক্ষণ হলো ক্লায়েন্ট সংযোগ করে, ঠিকানা পায় এবং কোথাও পৌঁছায় না।
ঠিকানা সঠিকভাবে স্থির করা
যখন ফায়ারওয়াল নিয়ম বা DNS রেকর্ডের সত্যিই স্থির ঠিকানা দরকার, তখন আশা করার বদলে তা বরাদ্দ করুন। প্রতি ক্লায়েন্টের কনফিগারেশন এন্ট্রি সরাসরি ঠিকানা ও মাস্ক পাঠাতে পারে, এবং সেই এন্ট্রি কার্যকর ক্লায়েন্ট নামে কী-বদ্ধ।
# client-config-dir entry for "laptop-acme"
ifconfig-push 10.8.0.50 255.255.255.0
স্থির ঠিকানাগুলো গতিশীল পুলের বাইরে রাখুন যাতে বণ্টনকারী কখনো একই নম্বর অন্য সেশনকে না দেয়। তারপর টানেলের গঠন যাচাই করুন, কারণ এটি বদলায় প্রতিটি ক্লায়েন্ট কত পুল ঠিকানা খরচ করে: পুরোনো বিন্দু-থেকে-বিন্দু বিন্যাস প্রতি ক্লায়েন্টে একটি ছোট ব্লক খরচ করে, যেখানে সাবনেট বিন্যাস প্রত্যেকের জন্য একটি ঠিকানা ব্যবহার করে। যে পুল একটি গঠনে উদার দেখায় তা অন্যটিতে নিঃশেষ হতে পারে।
ফলাফল ক্লায়েন্টে নিশ্চিত করুন, সার্ভারের হিসাবের উপর ভরসা করার বদলে। সেশন ফিরে এলে ইন্টারফেসের ঠিকানা ও পাঠানো রুট দেখুন, কারণ সার্ভারের লগ অনুরোধ করা ঠিকানা জানাতে পারে যখন ইন্টারফেস নিজেই অন্য একটি ধরে রাখে।
দূরবর্তী ঠিকানা আলাদা প্রশ্ন
ক্লায়েন্টের remote লাইনে থাকা ঠিকানা যেকোনো টানেল থাকার আগে পৌঁছানোর যোগ্য হতে হবে। সেখানে পুলের ঠিকানা রাখা, যেমন সার্ভারের নিজের টানেল শেষবিন্দু, মানে ক্লায়েন্ট এমন টানেল দিয়ে শেষবিন্দুতে পৌঁছাতে চায় যা সে এখনো বানায়নি, এবং ফলাফল শর্টকাটের বদলে লুপ বা নীরব অপেক্ষা হয়।
অপারেটরের দেওয়া সর্বজনীন শেষবিন্দু ব্যবহার করুন, এবং পুলটিকে যা জন্য তৈরি তা রেখে দিন: টানেলের ভেতরের ঠিকানা। পুলের পরিসর, স্থির বরাদ্দ এবং স্থায়িত্ব পথ এক জায়গায় লিখে রাখা পরবর্তী ব্যক্তিকে প্রতিটি ভাড়াকে খেয়ালখুশি হিসেবে দেখার থেকে বাঁচায়।