يستقبل Pi-hole v6 استعلام DNS على المنفذ 53 ثم يقرّر ما إذا كان مسموحًا بالرد على الحزمة التي وصلت. على مضيف WireGuard يكون هذا القرار الثاني عادةً سبب حصول العميل على مهلة بينما يبدو المُحلِّل سليمًا من الشبكة المحلية. المنفذ مفتوح وFTL يعمل، ومع ذلك لا يعود شيء من 10.90.0.1. تتفاعل ثلاثة أمور قبل أن يخرج أي رد: dns.interface، dns.listeningMode والجدار الناري أمام الاثنين.

مقبس الاستماع لا يقرّر من يحصل على رد

يفتح FTL مستمعي UDP وTCP على المنفذ 53. في الإعداد الافتراضي يكون المقبس غالبًا شاملًا، لذا ss -lunp | grep :53 يُظهر 0.0.0.0:53 و[::]:53 سواء قُدِّمت خدمة لعملاء VPN أم لا. يقبل المقبس الشامل الحزمة، ثم يطبّق FTL قواعد الواجهة والمصدر قبل الرد. لهذا لا تُثبت عبارة «المنفذ يستمع» إلا القليل جدًا عن عميل النفق.

اقرأ الإعداد قيد التشغيل بدلًا من الملف الذي تظنّه نشطًا. pihole-FTL --config dns.interface و pihole-FTL --config dns.listeningMode يطبعان القيم الفعلية، وقد تختلف عن ملف المضيف عندما تتولّى حاوية أو متغيّر بيئة أو مدير نشر ضبط هذا الإعداد. دليل إعداد FTL في Pi-hole يسرد الأوضاع وأي واحد منها يعتمد على الواجهة.

LOCAL يسأل عن الشبكة الفرعية، وSINGLE يسأل عن الواجهة

يجيب LOCAL، وهو الافتراضي، عن الاستعلامات التي ينتمي عنوان مصدرها إلى شبكة فرعية مُهيّأة على إحدى واجهات المضيف. ينجح wg0 بسيط بعنوان 10.90.0.1/24 في هذا الاختبار، لأن العميل على 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 مقبسًا شاملًا؛ بل يربط المنفذ 53 بالعناوين الموجودة على الواجهة المسمّاة فقط، فيرفض النواة الحزم التي تصل من مكان آخر. إنه أشد من SINGLE وليس مرادفًا له. يظهر الثمن عند الإقلاع: إذا لم تكن wg0 قائمة حين يبدأ FTL، فقد لا يوجد عنوان للربط، ويمكن أن يعمل المُحلِّل بلا مستمع حتى تظهر الواجهة ويُعاد تشغيل FTL.

اختر BIND عندما تتحكّم في ترتيب بدء التشغيل، مثل وحدة systemd مرتّبة بعد واجهة WireGuard، وعندما تريد أن تُسقط النواة الحزم الشاردة قبل أن يراها FTL. اختر SINGLE عندما يأتي النفق ويذهب، أو عندما تُنشأ الواجهة بأداة تبدأ بعد FTL.

الجدار الناري هو البوابة الثانية

لا يزال وضع FTL الصحيح يفشل إذا أسقط جدار المضيف المنفذ 53 على wg0. اسمح بنطاق مصدر VPN للبروتوكولين وأبقِ جهة الإنترنت مغلقة. في nftables، مع سلسلة input القائمة في جدول inet filter، تبدو القواعد هكذا:

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، وضعها قبل سياسة الإسقاط في السلسلة. إذا كان المضيف يستخدم 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. الاستعلام الذي يعمل حتى إعادة التشغيل التالية فقط ليس تغييرًا مكتملًا.

مقالات ذات صلة