AdGuard হোম আপনার LAN ঠিকানা থেকে WireGuard ক্লায়েন্টদের উত্তর দেয়
0.0.0.0 বাইন্ড কের্নেলকে উত্তর উৎস নির্বাচন করতে দেয়। একটি মাল্টি-হোমড হোস্টে সেই উত্তর এমন একটি ঠিকানা থেকে আসতে পারে যেখানে টানেল পৌঁছাতে পারে না।
টানেলটি চালু আছে, ফায়ারওয়াল পোর্ট 53 অনুমোদন করছে, AdGuard হোম চলছে, এবং WireGuard ক্লায়েন্টের জন্য নামগুলো এখনও রেজলভ হচ্ছে না। ক্যোয়ারিটি সাধারণত আসে এবং একটি উত্তর সাধারণত যায়, তাই রেজলভারের প্যাকেট কাউন্টারগুলো সুস্থ দেখাচ্ছে এবং সার্ভিসটি নির্দোষ মনে হচ্ছে। যা ভুল হয়ে যায় তা হলো সেই উত্তরের সোর্স ঠিকানা: এটি এমন একটি লোকাল ঠিকানার থেকে যায় যা ক্লায়েন্ট কখনো চায়নি, এবং ক্লায়েন্টের স্টাব রেজলভার এটি ফেলে দেয়। AdGuard হোমের কনফিগারেশনের একটি তালিকা এটি নির্ধারণ করে, এবং এর সাধারণ ডিফল্ট সিদ্ধান্তটা কার্নেলকে দেয়।
ক্যোয়ারিটি আসে, উত্তর অন্য কোথাও থেকে যায়
একটি ক্লায়েন্ট যা 10.6.0.1 কে তার রিজলভার হিসেবে কনফিগার করেছে, 10.6.0.1 পোর্ট 53-এ UDP কুয়েরি পাঠায়। সেই প্যাকেট টানেল অতিক্রম করে হোস্টে পৌঁছে, এবং AdGuard Home এটি উত্তর দেয়। কিন্তু তার তারের ওপর, উত্তরটি একটি নতুন প্যাকেট, যার সোর্স ঠিকানা হোস্টের স্ট্যাক দ্বারা নির্বাচিত হয়, ক্লায়েন্টের প্রত্যাশা অনুসারে নয়।
যখন ক্লায়েন্টের রিজলভার একটি সংযুক্ত সকেট হয়, যা systemd-resolved, dnsmasq এবং বেশিরভাগ স্টাব রিজলভার ব্যবহার করে, এটি শুধুমাত্র সেই সঠিক ঠিকানা থেকে উত্তর গ্রহণ করে যেটিতে এটি কুয়েরি পাঠিয়েছে। 10.6.0.1-এ পাঠানো কুয়েরির জন্য 192.168.1.10 থেকে আসা একটি উত্তর পার্সিং হওয়ার আগেই বাতিল হয়ে যায়। রিজলভার একটি সফল উত্তর লগ করে, ক্লায়েন্ট একটি টাইমআউট লগ করে, এবং উভয়ই সত্য বলছে।
সুতরাং কাউন্টারগুলি মিথ্যা বলছে না এবং ক্লায়েন্টও নয়। আপনার প্রয়োজনীয় প্রমাণ তিনটি জায়গায় রয়েছে, এই ক্রমে: যে ঠিকানায় শ্রোতাকে বাঁধা হয়েছে, সেই রুট যা কার্নেলটি ক্লায়েন্টের দিকে ফিরে ব্যবহার করবে, এবং প্রকৃত উত্তর প্যাকেটে সোর্স ঠিকানা।
কার্নেল কিভাবে উত্তর সোর্স নির্বাচন করে
একটি UDP সকেট যা0.0.0.0-এর সাথে বাঁধা, তার নিজের কোনো সোর্স ঠিকানা নেই, তাই প্রতিটি আউটগোয়িং উত্তর গন্তব্যের জন্য একটি রুট খোঁজ প্রক্রিয়া ঘটায়। তারপর কার্নেল রুট থেকে সোর্স নেয়: রুট দ্বারা পিন করা ঠিকানা, অথবা আউটগোয়িং ইন্টারফেসের প্রাথমিক ঠিকানা। প্রশ্নের গন্তব্য ঠিকানা সম্পর্কে কিছুই মনে রাখা হয় না।
একক-হোমড হোস্টে এটি অদৃশ্য, কারণ কেবল একটাই যুক্তিসঙ্গত উত্তর রয়েছে। একটি মেশিনে একটি ল্যান ঠিকানা, একটি WireGuard ঠিকানা এবং একটি ব্যবস্থাপনা ঠিকানা থাকলে, একাধিক উত্তর যৌক্তিক হতে পারে, এবং বিজয়ী সেই মুহূর্তের রাউটিং টেবলের উপর নির্ভর করে। একটি অতিরিক্ত রুট যোগ করুন, একই ইন্টারফেসে দ্বিতীয় ঠিকানা দিন, রিসলভার এর সামনে একটি NAT রিডাইরেক্ট চালান, বা AdGuard কে তার নিজস্ব namespace সহ একটি কনটেইনারে চালান, এবং নির্বাচিত উৎসটি ক্লায়েন্ট যা অনুরোধ করেছিল তার থেকে ভিন্ন হতে পারে।
ss -lunp | grep :53কোন খেলায় আপনি আছেন তা দেখায়।0.0.0.0:53-তে একটি লিসেনার হলো ওয়াইল্ডকার্ড ক্ষেত্রে;10.6.0.1:53-তে একটি লিসেনার ইতিমধ্যেই উত্তর নির্ধারণ করেছে। সকেট পড়া YAML পড়ার চেয়ে দ্রুত এবং এটি যা বর্তমানে চলছে তা প্রতিফলিত করে, শেষবার যা সংরক্ষণ করা হয়েছে তা নয়।
bind_hosts আসলেই কী নিয়ন্ত্রণ করে
AdGuard Home-এরdns.bind_hostsএটি হল স্থানীয় ঠিকানাগুলির তালিকা যা DNS শ্রোতা ব্যবহার করে। ডিফল্টভাবে শিপ করা হয়েছে ওয়াইল্ডকার্ড, যার অর্থ প্রতিটি স্থানীয় ঠিকানায় গ্রহণ করা এবং প্রতিউত্তরের জন্য কের্নেলকে উৎস নির্বাচন করতে দেওয়া। ক্লায়েন্টরা যেই ঠিকানায় কুয়েরি করে তা দিয়ে ওয়াইল্ডকার্ড প্রতিস্থাপন করলে সকেট পরিবর্তিত হয়, এবং প্রতিটি উত্তরেই এর উৎস ঠিকানা পরিবর্তন হয়।
তালিকায় একাধিক এন্ট্রি থাকতে পারে, যা দুটি নেটওয়ার্কে সেবা দেওয়া রেজলভারগুলোর ক্ষেত্রে গুরুত্বপূর্ণ। তালিকায়10.6.0.1এবং192.168.1.10দেওয়া হলে দুটি বাঁধা সকেট তৈরি হয়, এবং যে কোন একটি সকেটে পৌঁছানো কুয়েরির উত্তর সেই ঠিকানা থেকে দেওয়া হয় যা দিয়ে এটি এসেছে। এটি সেই আচরণ যা বেশিরভাগ লোক ধরে নেন যে ওয়াইল্ডকার্ড ইতিমধ্যেই প্রদান করে।
YAML সাধারণ, এবং এতে থাকা ঠিকানাটি হল সেই ঠিকানা যা আপনার টানেল ক্লায়েন্টদের ব্যবহার করার জন্য বলা হয়েছে, হোস্টের প্রধান ঠিকানা নয়:
dns:
bind_hosts:
- 10.6.0.1
port: 53কেন এক রেজলভারের দুইটি ইনস্টলেশন একমত নয়
এই প্রসঙ্গে প্লাগইন-পরিচালিত বলতে বোঝায় যে রিজলভারটি অন্য একটি প্যাকেজ দ্বারা ইনস্টল করা হয়েছে এবং তদারকি করা হচ্ছে: একটি রাউটার ফার্মওয়্যার প্যাকেজ, একটি NAS প্যাকেজ, বা একটি হোম-অটোমেশন অ্যাড-অন। সেই প্যাকেজ সাধারণত AdGuard Home-এর YAML-এর নিজস্ব কপি প্রদান করে এবং নিজস্ব সময়সূচিতে প্রক্রিয়াটি পুনরায় চালু করে, যখন একটি স্ট্যান্ডঅ্যালোন ইনস্ট্যান্স হলো ভেন্ডরের বাইনারি বা কন্টেইনার যেটি আপনি নিজেই কনফিগার করেন। যেভাবেই হোক না কেন, আপনি দুটি স্বতন্ত্র প্রক্রিয়ার দিকে তাকাচ্ছেন যাদের আলাদা কনফিগারেশন ফাইল এবং আলাদা বাইন্ড পছন্দ রয়েছে, এমনকি যখন উভয় একই আপস্ট্রিম তালিকা এবং একই ফিল্টার তালিকা পড়ে। একজন নির্দিষ্ট টানেল ঠিকানা বাইন্ড করতে পারে, যখন অন্যজন ওয়াইল্ডকার্ড গ্রহণ করে, এবং ওয়েব ইন্টারফেস উভয় পক্ষ থেকে একইরকম দেখায়।
এটাই কারণ যে “মাইগ্রেশনের আগে একই রেজোলভার কাজ করছিল” বর্তমান বাইনডিং সম্পর্কিত কিছু প্রমাণ করে না। সকেটটি পরীক্ষা করুন, তারপর কনফিগারেশন ফাইলটি পরীক্ষা করুন যা চলমান প্রক্রিয়াটি প্রকৃতপক্ষে লোড করেছে। অন্য ডিরেক্টরিতে থাকা একটি পুরনো কপি সাধারণত সেই কারণে সম্পাদনা কোনো প্রভাব ফেলে না।
এটি পিন করুন, তারপর টানেল সাইড থেকে পরীক্ষা করুন
পরিবর্তন করুনbind_hostsটানেল ঠিকানায়, সার্ভিসটি পুনরায় চালু করুন, এবং নিশ্চিত করুন যে সকেটটি স্থানান্তরিত হয়েছে:ss -lunp | grep :53এখন দেখানো উচিত10.6.0.1:53এবং কোনো ওয়াইল্ডকার্ড এন্ট্রি নেই। যদি এটি এখনও দেখায়0.0.0.0,তাহলে চলমান প্রক্রিয়াটি আপনি যে ফাইলটি সম্পাদনা করেছেন তা পড়ছে না।
তারপর ক্লায়েন্ট থেকে পরীক্ষা করুন, কারণ শুধুমাত্র সেই দিকটি গুরুত্বপূর্ণ। একটি কুয়েরি যার সাথেdig @10.6.0.1 example.comরয়েছে ব্যবহারকারী যে পথটি ব্যবহার করে তা পরীক্ষা করে, এবং হোস্টে একটি ক্যাপচার দিয়েtcpdump -ni wg0 udp port 53ওয়্যার-এ উত্তরটির উত্স ঠিকানা প্রদর্শন করে। এটি ক্লায়েন্টের রেজলভার সেটিং-এ থাকা ঠিকানার সাথে তুলনা করুন; যখন এরা সমান হয়, তখন টাইমআউট আর রহস্য থাকে না।
ip route get 10.6.0.2বাকি কোনো অদ্ভুততা ব্যাখ্যা করে, কারণ এটি ইন্টারফেস এবং উৎস প্রিন্ট করে যা হোস্ট ক্লায়েন্টের কাছে ফেরত ব্যবহার করবে। যদি সেই আউটপুটে ল্যান ইন্টারফেসের নাম থাকে, তবে বাইন্ড পরিবর্তন পুরো সমাধান নয় এবং নেক্সট পড়ার জিনিস হল রাউটিং টেবিল।
যা বাইন্ড সেটিং ঠিক করতে পারে না
লিসেনার পিন করা সেই অ্যাক্সেস লিস্টকে মেরামত করে না যা টানেল সাবনেট বাদ দেয়, এমন একটি ফায়ারওয়াল নিয়ম যা কোয়েরিকে অনুমোদন করে কিন্তু উত্তরের জন্য নয়, বা ওয়্যারগার্ড পুলে ফেরার জন্য একটি অনুপস্থিত রুট। এর ফলে উৎস ঠিকানার আগে বা পরে ব্যর্থ হয়, এবং প্রতিটির আলাদা মালিক আছে।
এটি এছাড়াও পরিবর্তন করে নারেজলভারকে কোন আপস্ট্রিমে ফরওয়ার্ড করতে হবে।, পুনঃবন্ধন সুরক্ষা একটি ব্যক্তিগত নামে ব্যক্তিগত উত্তর প্রত্যাখ্যান করে কিনা, বা ক্লায়েন্ট তার নিজের সার্চ ডোমেইন কিভাবে প্রয়োগ করে। এগুলো আলাদা নিয়ন্ত্রণ। যখন উত্তর উৎস ভুল হয় তখন বাইন্ড ঠিকানা পরিবর্তন করুন, এবং যখন তা ভুল নয় তখন অন্য কিছু পরিবর্তন করুন।