Pi-hole v6 পোর্ট 53-এ একটি DNS কোয়েরি গ্রহণ করে এবং তারপর সিদ্ধান্ত নেয় যে আসা প্যাকেটটির উত্তর দেওয়া অনুমোদিত কিনা। WireGuard হোস্টে দ্বিতীয় এই সিদ্ধান্তটিই সাধারণত কারণ হয় কেন ক্লায়েন্ট টাইমআউট পায়, অথচ LAN থেকে রিজলভার সুস্থ দেখায়। পোর্ট খোলা, FTL চলছে, তবুও 10.90.0.1 থেকে কিছুই ফিরে আসে না। উত্তর বের হওয়ার আগে তিনটি জিনিস মিলিতভাবে কাজ করে: dns.interface, dns.listeningMode এবং দুটোর সামনে থাকা ফায়ারওয়াল।

লিসেনিং সকেট ঠিক করে না কে উত্তর পাবে

FTL পোর্ট 53-এ UDP ও TCP লিসেনার খোলে। ডিফল্ট কনফিগারেশনে সকেট প্রায়ই wildcard হয়, তাই ss -lunp | grep :53 দেখায় 0.0.0.0:53 এবং [::]:53, VPN ক্লায়েন্ট পরিবেশিত হোক বা না হোক। wildcard সকেট প্যাকেট গ্রহণ করে, তারপর উত্তর দেওয়ার আগে FTL তার ইন্টারফেস ও সোর্স নিয়ম প্রয়োগ করে। এজন্যই "পোর্ট শুনছে" কথাটি টানেল ক্লায়েন্ট সম্পর্কে খুব কমই প্রমাণ করে।

যে ফাইলটি সক্রিয় বলে আপনি মনে করেন তার বদলে চলমান কনফিগারেশন পড়ুন। pihole-FTL --config dns.interface এবং pihole-FTL --config dns.listeningMode কার্যকর মান দেখায়, এবং সেগুলো হোস্ট ফাইল থেকে আলাদা হতে পারে যখন কোনো কন্টেইনার, এনভায়রনমেন্ট ভেরিয়েবল বা ডিপ্লয়মেন্ট ম্যানেজার সেটিংটির মালিক হয়। Pi-hole FTL কনফিগারেশন রেফারেন্স মোডগুলো তালিকাভুক্ত করে এবং কোনটি ইন্টারফেসের উপর নির্ভর করে।

LOCAL জিজ্ঞেস করে কোন সাবনেট, SINGLE জিজ্ঞেস করে কোন ইন্টারফেস

LOCAL, ডিফল্ট, সেই কোয়েরিগুলোর উত্তর দেয় যাদের সোর্স ঠিকানা হোস্ট ইন্টারফেসের একটিতে কনফিগার করা সাবনেটের অন্তর্গত। 10.90.0.1/24 সহ সাধারণ wg0 এই পরীক্ষায় পাস করে, কারণ 10.90.0.2-এর ক্লায়েন্ট টানেল সাবনেটের ভেতরে থাকে। পিয়ারের ওপারে রাউটেড ক্লায়েন্ট, বা ভিন্ন প্রিফিক্সে NAT-এর পেছনে লুকানো ক্লায়েন্ট, এটি পাস করে না যদিও প্যাকেট wg0-তে এসেছে, এবং লগে কোনো কোয়েরি দেখা যায় না।

SINGLE প্রশ্নটি বদলে দেয়। এটি সেই কোয়েরিগুলো গ্রহণ করে যা dns.interface দ্বারা নামকৃত ইন্টারফেসে আসে, লুপব্যাক সহ, এবং সোর্স সাবনেট উপেক্ষা করে। এই মোডটিই চেইনড বা রাউটেড VPN টোপোলজিতে টিকে থাকে। দুটি কী একসাথে সেট করুন, কারণ নামকৃত ইন্টারফেস ছাড়া কোনো মোড সম্পূর্ণ নির্দেশ নয়:

sudo pihole-FTL --config dns.interface "wg0"
sudo pihole-FTL --config dns.listeningMode "SINGLE"

BIND সকেট বদলায়, এবং এর একটি মূল্য আছে

BIND wildcard সকেট ফিল্টার করে না; এটি পোর্ট 53 কেবল নামকৃত ইন্টারফেসে বিদ্যমান ঠিকানাগুলোর সাথে বাঁধে, তাই কার্নেল অন্যত্র আসা প্যাকেট প্রত্যাখ্যান করে। এটি SINGLE-এর চেয়ে কঠোর এবং তার সমার্থক নয়। মূল্যটি বুটে দেখা যায়: FTL শুরু হওয়ার সময় wg0 চালু না থাকলে বাঁধার কোনো ঠিকানা নাও থাকতে পারে, এবং ইন্টারফেস আবির্ভূত হয়ে FTL পুনরায় চালু না হওয়া পর্যন্ত রিজলভার লিসেনার ছাড়া চলতে পারে।

BIND বেছে নিন যখন আপনি স্টার্টআপ ক্রম নিয়ন্ত্রণ করেন, উদাহরণস্বরূপ WireGuard ইন্টারফেসের পরে সাজানো একটি systemd ইউনিট, এবং যখন চান কার্নেল FTL-এর দেখার আগেই বিচ্ছিন্ন প্যাকেট ফেলে দিক। SINGLE বেছে নিন যখন টানেল আসে-যায়, বা যখন ইন্টারফেসটি FTL-এর পরে শুরু হওয়া কোনো টুল তৈরি করে।

ফায়ারওয়াল হলো দ্বিতীয় দরজা

সঠিক FTL মোডও ব্যর্থ হয় যদি হোস্ট ফায়ারওয়াল wg0-তে পোর্ট 53 ফেলে দেয়। উভয় প্রোটোকলের জন্য VPN সোর্স পরিসর অনুমোদন করুন এবং ইন্টারনেট দিক বন্ধ রাখুন। nftables-এ, inet filter টেবিলে বিদ্যমান input চেইন সহ, নিয়মগুলো এমন দেখায়:

sudo nft add rule inet filter input iifname "wg0" ip saddr 10.90.0.0/24 udp dport 53 accept
sudo nft add rule inet filter input iifname "wg0" ip saddr 10.90.0.0/24 tcp dport 53 accept

টানেল IPv6 বহন করলে মিলে যাওয়া IPv6 নিয়ম যোগ করুন, এবং সেগুলো চেইনের drop নীতির আগে রাখুন। হোস্ট ufw বা firewalld ব্যবহার করলে টুল মেশানোর বদলে সেই ম্যানেজারেই একই মিল প্রকাশ করুন। ইন্টারনেট রাউটার থেকে পোর্ট 53 ফরওয়ার্ড করবেন না; ক্লায়েন্টদের টানেলের মধ্য দিয়ে রিজলভারের VPN ঠিকানায় পৌঁছানো উচিত।

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

উত্তর ও প্রত্যাখ্যান যাচাই করুন

একটি VPN ক্লায়েন্ট থেকে উভয় প্রোটোকলে রিজলভারের ঠিকানা জিজ্ঞেস করুন: dig @10.90.0.1 example.com এবং dig +tcp @10.90.0.1 example.com। তারপর অ্যাডমিন ইন্টারফেসের কোয়েরি লগ দেখে নিশ্চিত করুন FTL কোয়েরিটি রেকর্ড করেছে। লগ এন্ট্রি ছাড়া ক্লায়েন্ট টাইমআউট ফায়ারওয়াল বা ইন্টারফেস ফিল্টারকে নির্দেশ করে; উত্তর ছাড়া লগ এন্ট্রি আপস্ট্রিম রিজলিউশনকে নির্দেশ করে।

VPN-এর বাইরের হোস্ট থেকে নেতিবাচক পথটি পরীক্ষা করুন। dig @10.90.0.1 example.com টাইমআউট হওয়া উচিত, এবং ss -lunp রিজলভারে পোর্ট 53 কোনো পাবলিক ঠিকানায় বাঁধা দেখানো উচিত নয়। সেবাটি একবার রিস্টার্ট করুন, তারপর হোস্ট রিবুট করুন এবং নিশ্চিত করুন wg0 আবার দেখা দেওয়ার পরেও রিজলভার উত্তর দেয়। যে কোয়েরি কেবল পরবর্তী রিবুট পর্যন্ত কাজ করে তা সম্পূর্ণ পরিবর্তন নয়।

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