OpenVPN-এ স্প্লিট DNS: প্রতিটি অপারেটিং সিস্টেমে রাউটিং ডোমেইনকে কী করতে হবে
সার্চ সাফিক্স, রাউটিং ডোমেইন আর IP রুট তিনটি আলাদা জিনিস। প্রতিটি প্ল্যাটফর্মে নীতি ঠিক করুন, তারপর প্রমাণ করুন কোন সার্ভার কোয়েরির উত্তর দিয়েছে।
প্রতিটি স্প্লিট-DNS অনুরোধ একই বাক্য দিয়ে শুরু হয়: কোম্পানির নাম কোম্পানির DNS-এ যায়, বাকি সব কাজ করতে থাকে। সেই বাক্যটিকে কনফিগারেশনে রূপান্তর করতে হলে প্রতিটি অপারেটিং সিস্টেমের জন্য তিনটি প্রশ্নের উত্তর দিতে হয়, আর উত্তরগুলো প্রতিটিতে ভিন্ন প্রক্রিয়া ব্যবহার করে। Linux ল্যাপটপে কাজ করা প্রোফাইলগুলি প্রায়ই Windows-এ ব্যর্থ হয় এমন কারণে যার টানেলের সঙ্গে কোনো সম্পর্ক নেই। ফাঁকটি সাধারণত রাউট ভেবে ভুল করা একটি রিজলভার সেটিং।
আগে নীতিটির নাম দিন, তারপর সেই প্ল্যাটফর্মের প্রিমিটিভ বেছে নিন যা এটি প্রকাশ করে।
তিনটি সেটিং যা সহজেই গুলিয়ে যায়
সার্চ সাফিক্স একটি সংক্ষিপ্ত নাম প্রসারিত করে: files টাইপ করলে তা files.corp.example হয়ে যায় যখন রিজলভার ক্রমান্বয়ে সাফিক্স চেষ্টা করে। রাউটিং ডোমেইন ঠিক করে কোন রিজলভার একটি নেমস্পেসের ভেতরের কোয়েরির উত্তর দেবে। IP রুট শুধু নির্বাচিত রিজলভারটিকে পৌঁছনোযোগ্য করে। এই তিনটি আলাদা স্তরে থাকে, আর একটি অন্যটির জায়গায় বসালে এমন কনফিগারেশন তৈরি হয় যা ঠিক দেখায় কিন্তু কিছুই সমাধান করে না।
গুলিয়ে যাওয়ার একটি দাম আছে: সার্চ সাফিক্স যোগ করলে প্রতিটি সংক্ষিপ্ত নাম কাজের রিজলভারে চলে যায়, যার মধ্যে অন্য জায়গার নামও থাকে। রাউটিং ডোমেইন নির্বাচন করলে সম্পর্কহীন কোয়েরি স্থানীয় রিজলভারেই থাকে, আবার *.corp.example টানেল দিয়ে পাঠানো হয়।
Linux: শুধু রাউট ডোমেইন, সার্চ সাফিক্স নয়
systemd-resolved-এ টিল্ডা দিয়ে শুরু হওয়া ডোমেইন শুধু-রাউট ডোমেইন, অর্থাৎ ওই নেমস্পেসের কোয়েরি সংযুক্ত রিজলভারে যায় এবং একইসঙ্গে সার্চ সাফিক্সও হয়ে যায় না। resolvectl domain tun0 '~corp.example' এটি সেট করে, আর resolvectl dns tun0 10.8.0.1 সার্ভারটির নাম দেয়। দুটি সেটিংই ইন্টারফেসের অন্তর্গত, তাই সেটির সঙ্গে হারিয়ে যায়। টিল্ডাটাই মানুষ বাদ দেয়, আর এটি ছাড়া সংক্ষিপ্ত নাম কাজের রিজলভার দিয়ে সমাধান হতে শুরু করে।
একই ডোমেইনকে গ্লোবাল সার্চ সাফিক্স হিসেবেও ইনস্টল করবেন না। দুটি সেটিং অপ্রয়োজনীয় নয়; একটি রাউট করে, অন্যটি আপনি যা টাইপ করেছেন তা পুনর্লিখন করে।
Windows-এর নেমস্পেস নীতি দরকার, সাফিক্স নয়
Windows স্প্লিট-DNS নীতি অ্যাডাপ্টারের DNS সাফিক্সে নয়, বরং Name Resolution Policy Table-এ রাখে। একটি রুল নেমস্পেসকে নির্দিষ্ট সার্ভারের সঙ্গে যুক্ত করে: Add-DnsClientNrptRule -Namespace .corp.example -NameServers 10.8.0.1। শুধু সাফিক্স সেট করলে সংক্ষিপ্ত নামের চেহারা বদলায়; এটি কোয়েরিকে অন্য সার্ভারে পাঠায় না।
সংযোগের পরে Get-DnsClientNrptPolicy দিয়ে কার্যকর নীতি পরীক্ষা করুন, কারণ আগের সংযোগের একটি রুল টানেলের চেয়ে বেশি দিন টিকে থাকতে পারে। টানেল নামলে নাম ধরে রুলগুলি সরান, আর প্রদর্শিত নাম স্থির রাখুন যাতে পরিষ্কারকরণ সঠিক এন্ট্রিতে লাগে।
প্রতিটি প্ল্যাটফর্মে একজন রিজলভার মালিক রাখুন
একটি ডেস্কটপ ম্যানেজার, একটি OpenVPN up স্ক্রিপ্ট আর একটি স্থানীয় রিজলভার ডিমন—সবাই একই কনফিগারেশন লিখতে চেষ্টা করতে পারে। তারা মতভেদ করলে শেষে লেখা ব্যক্তিটি জেতে, আর ফল নির্ভর করে টিয়ারডাউনের ক্রমের উপর। রিজলভার অবস্থার মালিকানা দেওয়ার জন্য একটি উপাদান বেছে নিন, বাকিগুলোকে লেখার বদলে রিপোর্ট করতে দিন, এবং পুনঃসংযোগ পরীক্ষা করুন: নীতিটি রুল নকল না করেই টিকে থাকা উচিত। বিচ্ছিন্নতাও পরীক্ষা করুন, কারণ অবশিষ্ট অবস্থাই পরবর্তী সংযোগকে ভিন্নভাবে আচরণ করায়।
যেসব অ্যাপ্লিকেশন নিজেদের এনক্রিপ্টেড রিজলভার নিয়ে আসে তারা অপারেটিং সিস্টেমের নীতি সম্পূর্ণ উপেক্ষা করে। এটি অ্যাপ্লিকেশনের বৈশিষ্ট্য, টানেলের ত্রুটি নয়।
ফলাফল যাচাই করুন, প্রোফাইলের লেখা নয়
প্রতিটি প্ল্যাটফর্মে একটি নাম সমাধান করুন যা টানেল দিয়ে যাওয়া উচিত এবং একটি যা যাওয়া উচিত নয়, এবং নিশ্চিত করুন কোন সার্ভার উত্তর দিয়েছে। resolvectl query host.corp.example আর Resolve-DnsName host.corp.example দুটিই কোন সার্ভার সাড়া দিয়েছে তা জানায়। পুনঃসংযোগের পরে আবার করুন। তারপর নিশ্চিত করুন যে টানেলের রিজলভার প্রোফাইল যে ঠিকানায় পাঠায় সেখানে পৌঁছনোযোগ্য, কারণ অপ্রাপ্য সার্ভারের দিকে নির্দেশ করা সঠিক নীতিও কোনো নীতি না থাকার মতোই ব্যর্থ হয়।
প্রোফাইলের নোটে অভীষ্ট আচরণ লিখে রাখুন: কোন সাফিক্স রাউট হয়, কোন সার্ভার তার উত্তর দেয়, আর বাকি সবের কী হয়। আপনি যে পরবর্তী প্ল্যাটফর্ম সমর্থন করবেন তার কনফিগারেশন ফাইলের চেয়ে ওই বাক্যটির বেশি দরকার হবে।