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

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

একই বিভ্রাটের জন্য দুটি DNS নকশা

নকশা A রিজলভারকে টানেলের পেছনের আরেকটি সাধারণ সেবা হিসেবেই দেখে। ফায়ারওয়াল নিয়ম UDP ও TCP 53 কেবল টানেল ইন্টারফেসে অনুমতি দেয়, আর ক্লায়েন্টকে যে ঠিকানা দেওয়া হয় তা টানেলের ভিতরের রিজলভার। টানেল নামলে লুকআপ থেমে যায়, আর এটাই কাঙ্ক্ষিত ফল, কোনো ত্রুটি নয়।

নকশা B স্থানীয় নেটওয়ার্কে একটি রিজলভার নাগালে রাখে, সাধারণত 192.168.1.1-এ রাউটার বা 127.0.0.53-এ অপারেটিং সিস্টেমের স্টাব, এই যুক্তিতে যে নাম রিজলভিং টানেলের সঙ্গে মরা উচিত নয়। বাড়ির LAN-এ এটি সুবিধাজনক, যেখানে রাউটার পুরো বাড়ির জন্য রিজলভ করে। হোটেল বা বিমানবন্দরের Wi-Fi-তে একই ব্যতিক্রম অন্যের সার্ভারের দিকে ইঙ্গিত করে, আর আপনি যে নামই টাইপ করেন তা প্রকাশ হয়ে যায়, যদিও আপনার ওয়েব ট্রাফিক ব্লকডই থাকে।

সীমারেখাটি হলো রিজলভারটি কার মালিকানায়। স্থানীয়টির উপর আস্থা থাকলে ব্যতিক্রমটি ছোট ও সৎ একটি ফুটো। আস্থা না থাকলে কেবল-টানেল নকশাটিই একমাত্র টেকে, আর দাম হলো নামিয়ে দেওয়া টানেল সব নাম সঙ্গে নিয়ে যায়।

কেন VPN ক্লায়েন্টের নিজের লুকআপ এখনও কাজ করে

টানেল তৈরির আগেই ক্লায়েন্টকে গেটওয়ে হোস্টনেম রিজলভ করতে হয়, তাই কঠোর ব্লক ক্লায়েন্টের বুটস্ট্র্যাপ পথ ঢাকতে পারে না। বেশিরভাগ ক্লায়েন্ট হয় এন্ডপয়েন্ট ঠিকানা ক্যাশ করে, নয়তো ওই একটি হোস্টের জন্য নথিভুক্ত বুটস্ট্র্যাপ ব্যতিক্রম দেয়। আপনার নিয়মের সেট ওই লুকআপ ব্লক করলে টানেল আর কখনও ফিরে আসে না এবং লগ দেখায় এমন ক্লায়েন্ট যা নিজের সার্ভারেই পৌঁছাতে পারে না—এটি DNS-এর নয়, নীতির ত্রুটি।

স্প্লিট DNS হলো এর প্রকাশের আরেক জায়গা। ক্লায়েন্ট একটি অভ্যন্তরীণ জোন প্রাইভেট রিজলভারে ঠেলে দেয় আর বাকি সব সিস্টেম রিজলভারের কাছে রাখে। নামার পর পাবলিক নাম হয়তো রিজলভ হয়, কিন্তু অভ্যন্তরীণ নাম সময় শেষে ব্যর্থ হয়, কারণ প্রাইভেট জোনের আর কোনো রুট নেই। ব্যবহারকারীর কাছে এটি "VPN ইন্টারনেট ভেঙে দিয়েছে"; রিজলভার লগের কাছে এটি এমন একটি কোয়েরি যা কখনও পৌঁছায়নি।

systemd-resolved-এর অধীনে আপনি বিভাজনটি সরাসরি দেখতে পারেন।resolvectl statusপ্রতিটি লিংকের DNS সার্ভার ও রাউটিং ডোমেইন দেখায়, আর টানেল নামার পর অভ্যন্তরীণ ডোমেইন এমন একটি লিংকের সার্ভারের দিকে ইঙ্গিত করতে থাকে যা আর নেই। 127.0.0.53-এর স্টাব কোয়েরিটি এখনও গ্রহণ করে, তারপর এমন আপস্ট্রিমের জন্য অপেক্ষা করে যা উত্তর দেবে না, তাই ব্যর্থতাটি সঙ্গে সঙ্গে ফেরার বদলে কয়েক সেকেন্ড নেয়।

এনক্রিপ্টেড DNS প্যাকেট ফিল্টারকে পাশ কাটায় না

DNS over HTTPS ও DNS over TLS 443 ও 853-এ চলে, তাই পোর্ট 53 ব্লক করা নিয়ম তাদের সম্পর্কে কিছুই বলেনি। পোর্ট দিয়ে "DNS" ব্লক করা পোর্ট নিয়ে নীতি, নাম রিজলভিং নিয়ে নয়। আপনার কিল সুইচ টানেলের বাইরের সব ট্রাফিক ব্লক করলে DoH দৈবক্রমে ঢেকে যায়। ক্যাপটিভ পোর্টাল বা পাবলিক রিজলভারের জন্য ছাড় রাখলে তা ঢাকে না।

ক্লায়েন্ট-সাইড নিয়ন্ত্রণই সস্তা লিভার। Firefox তার DoH রিজলভার ছেড়ে দেয় যখন ক্যানারি নামuse-application-dns.netরিজলভ হয় না, তাই ম্যানেজড নেটওয়ার্ক ওই ডোমেইনটিকে NXDOMAIN হিসেবে প্রকাশ করে; এন্টারপ্রাইজ নীতি এটিকে বন্ধ করে পিনও করতে পারে। Android Private DNS আর Chrome-এর সিকিউর DNS-এর নিজস্ব সুইচ ও নিজস্ব ডিফল্ট আছে। সেগুলো বন্ধ করা রিজলভার ঠিকানার পেছনে ছোটার চেয়ে বেশি নির্ভরযোগ্য, কারণ ঠিকানার তালিকা বদলায়, আপনার নিয়মের সেট বদলায় না।

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

উপসর্গকে স্তরের সঙ্গে মেলান

বেশিরভাগ রিপোর্ট আপনার কাছে এক বাক্যে আসে, আর সেই বাক্যটি সাধারণত স্তরের নামটাই বলে দেয়। নিচের টেবিলটি কোনো নিয়ম ছোঁয়ার আগে আমি যা দেখে নিই; উদ্দেশ্য হলো কোয়েরিটি ব্লক হয়েছিল, ভুল পথে গিয়েছিল, নাকি পাঠানোই হয়নি তা ঠিক করা।

SymptomLikely layerFirst check
Every name fails at once, instantlyResolver answering with a refusalQuery the resolver by address, not by name
Lookups hang for seconds, then time outPackets dropped with no responseWatch port 53 on the physical link
Public names resolve, internal ones do notSplit-DNS routing domainPer-link DNS servers on the tunnel
Names resolve, the page still failsNot DNS: routing or MTUConnect to the IP directly
Only one application failsPinned resolver or cached answerCheck that app's DNS setting

প্রথম দুটি সারিই মানুষ ভুল নির্ণয় করে। নীরব পতন আর প্রত্যাখ্যান ব্রাউজারে একইভাবে "DNS ভাঙা" দেখায়, কিন্তু তাদের একটিই বোঝায় আপনার কিল সুইচ নিজের কাজ করছে। প্রত্যাখ্যান মানে কিছু একটা উত্তর দিয়েছে, তাই ব্লকটি আপনি যেখানে ভাবছেন সেখানে নেই।

রিজলভার নীতি ফিরিয়ে আনুন, তারপর প্রমাণ করুন

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

তারপর এই ক্রমে যাচাই করুন। Linux-এresolvectl statusসক্রিয় লিংক দেখায়,dig +short example.comএকটি পাবলিক নাম পরীক্ষা করে,dig @10.8.0.1 internal.example.comপ্রাইভেটটি পরীক্ষা করে, আরsudo tcpdump -ni any port 53দেখায় দুটোই চালানোর সময় প্যাকেটগুলো কোন ইন্টারফেস ব্যবহার করে। Windows-এGet-DnsClientServerAddress -AddressFamily IPv4ওResolve-DnsName example.comএকই দুটি তথ্য দেয়: কে কনফিগার করা আছে, আর কে উত্তর দিচ্ছে।

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

টিকিট বন্ধ করার আগে চেকলিস্ট:

  • বিভ্রাটের সময় ব্যবহৃত রিজলভারটিই নীতির অভীষ্ট।
  • ক্লায়েন্টের নিজের এন্ডপয়েন্ট লুকআপ এখনও অনুমোদিত—ক্যাশ বা ব্যতিক্রমে।
  • DoH ও DoT হয় ব্লকে ঢাকা, নয়তো নীতিতে নিষ্ক্রিয়।
  • টানেল চলে গেলে প্রাইভেট জোনগুলো খোলা নয়, বন্ধ অবস্থায় ব্যর্থ হয়।

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