تتبّع استعلام DNS خطوة بخطوة للعثور على المصدر الحقيقي
عنوان ريزولفر المدفوع لا يحدّد المصدر الذي يراه ريزولفر. تتبّع العميل والممرّر والخادم المتلقّي، ثم اكتب المسار.
إعطاء العميل عنوان ريزولفر يحدّد إلى أين تُرسل الاستعلامات، لا المصدر الذي سيراه ريزولفر. التوجيه والتمرير والترجمة لكل منها دوره بين الطرفين. يتبع دليل العمل الخاص بأسئلة المصدر الاستعلام خطوة بخطوة ويسجّل ما رآه كل مراقب فعلاً. الترتيب مهم، لأن الادعاء الذي يُقدَّم قبل الملاحظة ليس إلا تخميناً بصياغة أفضل.
اكتب الترتيب قبل أن تجمع الأدلة
أربعة مواضع يمكن أن تخبرك بشيء عن مصدر DNS، وليست كلها تقول الشيء نفسه. نواة العميل تعرف المصدر الذي ستستخدمه، والممرّر يعرف ما أرسله إلى الأعلى، والجهاز المترجم يعرف ما أعاد كتابته، وريزولفر المتلقّي يعرف ما وصل. اكتب أيّها تستطيع الوصول إليه فعلاً قبل أن تجمع أي شيء.
| Observation point | What it can prove | What it cannot prove | How to read it |
|---|---|---|---|
| client kernel | which source address it would use for that resolver | anything a device in between rewrote | ip route get against the resolver address |
| forwarder | that it sent an upstream query, and from which source | what the client originally asked for | its own log and its cache state |
| translating device | that a source was rewritten, and to what | whether the query was legitimate | NAT policy and its counters |
| receiving resolver | the address that actually arrived | which client behind that address asked | a scoped capture on port 53 |
اكتب توقّعك أيضاً، بما في ذلك ريزولفر الذي تعتقد أنه قيد الاستخدام. قد يرسل المسار المنقسم الاستعلام إلى مكان آخر تماماً، وقد يجيب ذاكرة التخزين المؤقت دون أي تبادل إلى الأعلى، لذا فإن الافتراض المحفوظ في الذاكرة وحده لن يصمد أمام أول مفاجأة. أبقِ التصميم المعلن والمسار المرصود في عمودين منفصلين من الملاحظة نفسها؛ وحين يختلف الاثنان فقد وجدت السؤال الذي يستحق المتابعة.
تحقّق من العملية التي أرسلت الاستعلام فعلاً
ابدأ من العميل: سجّل عنوان ريزولفر واسم الاستعلام والوقت، ثم تأكّد من العملية التي أرسلته. يسمّي السطر الأول أدناه العملية التي تحتفظ بمقبس UDP، وهذا هو الفحص الذي يَعِد به هذا العنوان. إن كانت تلك العملية مساعد متصفح أو بيئة تشغيل حاوية بدلاً من ريزولفر النظام، فإن بقية الأثر تصف مساراً لم يطلبه أحد.
ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53
على مضيف ذي واجهات متعددة، اكتشف أولاً أي عنوان مصدر تختاره النواة لذلك الوجهة قبل أن تنظر في أي مكان آخر. هذه آخر نقطة يكون فيها المسار تحت سيطرتك بالكامل، وهي القيمة التي ستقارنها بما يبلّغه ريزولفر. الاختلاف إشارة إلى أن شيئاً في الوسط أعاد كتابة الحزمة، أو أن استعلامين مختلفين أُرسلا.
أبقِ أسماء الاختبار داخلية، لأن اسماً داخلياً يُرسل إلى ريزولفر عام لا يثبت شيئاً عن المسار الداخلي وينشر اسماً لم تكن بحاجة إلى نشره. المتصفح الذي يكون فيه DNS الآمن مفعّلاً لن يظهر إطلاقاً في قائمة المقابس تلك، وهذا الغياب هو نفسه الجواب.
يُجري الممرّر استعلاماً ثانياً منفصلاً
يحوّل الممرّر تبادلاً واحداً إلى اثنين. يصل الطلب من الأسفل، ثم يرسل الممرّر استعلامه الخاص إلى الأعلى من عنوان يختاره. إعداده، لا العميل، هو ما يحدّد ما يراه ريزولفر الأعلى.
دليل dnsmasq يستحق القراءة لهذا السبب: فهو يوثّق كيف يختار الممرّر خوادم الأعلى ويربط جانب الاستماع لديه، ولا شيء في ذلك الترتيب يحمل مصدر العميل إلى الأعلى. لذلك فإن سجل ريزولفر يُظهر عنوان بوابة أمر طبيعي وليس دليلاً على عطل. والغياب يُقرأ خطأ بالسهولة نفسها، لأن إصابة ذاكرة التخزين المؤقت لا تُنتج أي استعلام إلى الأعلى وتبدو مطابقة لاستعلام لم يصل قط. اقرأ إعداد الممرّر وحالة ذاكرة التخزين المؤقت لديه قبل أن تستنتج أيّاً من النتيجتين. سؤالان، وموضعان للنظر.
اقرأ المصدر عند ريزولفر المتلقّي
الملاحظة الوحيدة التي تحسم الأمر تُؤخذ على جانب الخادم. وكل ما يُستنتج من قائمة واجهات العميل يبقى فرضية حتى يبلّغ ريزولفر بما وصل فعلاً.
tcpdump -ni any port 53 and host 10.20.30.53
التقط على مضيف ريزولفر، وأبقِ الالتقاط قصيراً ومحدوداً، وخزّنه حيث تسمح السياسة. إن كان المصدر المرصود عنواناً مترجماً، فالسؤال التالي هو أي جهاز أجرى الترجمة وهل سياسته هي المقصودة. يجيب الالتقاط عمّا وصل؛ ولا يفسّر لماذا سمحت السياسة به. سمِّ المراقب والخطوة في الملاحظة، لأن ادعاء الخصوصية بشأن بوابة هو ادعاء بشأن تلك الخطوة لا بشأن المسار كله.
اكتب النتيجة كمسار، لا كعنوان
سجّل العميل وريزولفر وأي ممرّر والمصدر المرصود عند كل خطوة والسياسة التي تحكمه. هذا السجل يجيب عن معظم الأسئلة المستقبلية دون التقاط آخر. ارسمه كسلسلة، لأن قائمة العناوين تخفي أي خطوة أنتجت أيّاً منها.
أرفق بالرسم التاريخ وإصدار العميل ومراجعة الإعداد، ليتمكّن قارئ لاحق من معرفة ما إذا كان لا يزال سارياً. افصل مصدر النقل عن كل ما تعالجه الخدمة، لأن رؤية عنوان بوابة لا تقول شيئاً عمّا يُحتفظ به أيضاً. ولا موقع ريزولفر يقول شيئاً عن العميل الذي سأل. إن إبقاء هذه الادعاءات منفصلة هو ما يجعل النتيجة قابلة للدفاع عند المراجعة.