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

DNS লাইনটি কী হিসেবে পার্স হয়

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

DNS = 10.24.8.53, lab.internal.example

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

Apple-এর দুটি ফিল্ড, দুটি আলাদা কাজ

Apple তার DNS সেটিংস অবজেক্টে এই পার্থক্য প্রকাশ করে। সার্চ-ডোমেইন তালিকাটি একক-লেবেল হোস্টনেম যোগ্য করার জন্য ব্যবহৃত তালিকা হিসেবে নথিভুক্ত: একটি খালি হোস্টনেম টাইপ করুন আর সিস্টেম পালাক্রমে প্রতিটি সাফিক্স যোগ করতে পারে। এটি একটি সমাপ্তির নিয়ম, রাউটিংয়ের নিয়ম নয়। ওই তালিকায় কিছুই ঠিক করে না কোন সার্ভারকে জিজ্ঞাসা করা হবে।

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

তাই ওই লাইনের একটি ডোমেইন নেমস্পেস নির্বাচক নয়। আরেকটি যোগ করলে টানেল কোন কোয়েরি ব্যবহার করে তা সংকুচিত হয় না, আর সরালেও তা প্রসারিত হয় না। কেবল যা বদলায় তা হলো কতগুলো ছোট নাম সম্পূর্ণ হয়।

কেন প্রতিটি নাম এখনও টানেল রিজলভারে পৌঁছায়

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

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

স্প্লিট DNS আসলে কী দরকার হতো

নেমস্পেস-সীমিত রিজলভার নীতি এমন একটি ক্লায়েন্ট চায় যা আপনাকে এটি প্রকাশ করতে দেয়: Apple প্ল্যাটফর্মে ডোমেইন ম্যাচ করুন, অথবা আপনি যে পণ্যটি ব্যবহার করেন তাতে সমতুল্য সেটিং। এমন কনফিগারেশন ফিল্ড যা কেবল সার্ভার আর সাফিক্স নেয় তা এটি প্রকাশ করতে পারে না, যেভাবেই যতিচিহ্ন দেওয়া হোক। একটি প্রোফাইল এই নীতি বহন করতে পারে, কারণ এটি সংযোগ-সময়ের ইঙ্গিত নয় বরং একটি ব্যবস্থাপিত কনফিগারেশন বর্ণনা করে। এটি ডোমেইন, সার্ভারগুলি এবং ওই ডোমেইনে পৌঁছানো না গেলে কী হওয়া উচিত তা নাম দিতে পারে। এটাই একটি সেটিং আর একটি চুক্তির পার্থক্য।

ব্যবস্থাপিত Apple ডিভাইসে এটি সাধারণত এমন একটি কনফিগারেশন প্রোফাইলের মাধ্যমে দেওয়া হয় যা ডোমেইন-নির্দিষ্ট DNS সেটিংস বহন করে। এটি WireGuard কনফিগারেশন ফাইল থেকে আলাদা প্রক্রিয়া, আর দুটো একসাথে থাকতে পারে কেবল যদি ক্লায়েন্ট প্রোফাইলটিকে মানে। দুটি পণ্য একইভাবে আচরণ করে ধরে নেওয়ার আগে দেখুন আপনার ক্লায়েন্ট ফিল্ডটিকে আসলে কী বলে। Mac-এ একটি wg-quick স্ক্রিপ্ট আর iPhone-এ WireGuard অ্যাপ একই ধরনের লাইন পড়ে এবং সেগুলি ভিন্ন স্তরের মাধ্যমে ইনস্টল করে।

ইনস্টল করা সেটিংস পড়ুন, কনফিগ নয়

Mac-এ আপনি দেখতে পারেন সিস্টেম শেষ পর্যন্ত কী নিয়ে দাঁড়িয়েছে, যা আপনি যে ফাইল লিখেছেন তা আবার পড়ার চেয়ে বেশি তথ্য দেয়। রিজলভার তালিকা দেখায় কোন সার্ভারগুলি কোন ডোমেইনের জন্য কনফিগার করা, আর স্কোপড কোয়েরিগুলি দেখায় কোনটি জিতেছে। যে ক্লায়েন্ট লাইনটিকে বিকৃত করে তা আপনি যে ফাইলে লিখেছেন সেখানে নয়, এখানেই দেখায়। iOS-এ সমতুল্য কমান্ড লাইন নেই, তাই সেখানকার প্রমাণ একটি ফলাফল: একটি প্রাইভেট নাম যা টানেল দিয়ে রিজলভ হয়, আর একটি সর্বজনীন নাম যার উত্তর প্রকাশ করে কোন রিজলভার উত্তর দিয়েছে।

scutil --dns | grep -A3 resolver
networksetup -getdnsservers Wi-Fi

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

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