الرئيسية
» كيف
»
فشل البحث عن نظام أسماء النطاقات (DNS) في دبيان 12: إصلاح systemd-resolved
فشل البحث عن نظام أسماء النطاقات (DNS) في دبيان 12: إصلاح systemd-resolved
إذا عرض نظام Debian 12 رسالة "فشل مؤقت في تحليل الاسم"، فتحقق من خدمة تحليل الاسم، ثم /etc/resolv.confالرابط، ثم خوادم نظام أسماء النطاقات (DNS) المدرجة resolvectl- بهذا الترتيب. إعادة تشغيل الخدمة مفيدة فقط في حالة توقفها؛ أما في حالة وجود رابط معطل أو خادم مصدر غير متاح، فيتطلب الأمر حلاً مختلفاً.
تنطبق هذه التعليمات على أنظمة دبيان 12 (بوكوورم) المُهيأة لاستخدام مُحلل أسماء النطاقات systemd-resolved. قامت دبيان بفصل هذا المُحلل إلى حزمة منفصلة ولم تجعله المُحلل الافتراضي، كما هو موضح في ملاحظات إصدار دبيان 12. إذا كان نظامك يستخدم مُدير DNS آخر، فاحتفظ بهذا المُدير مُتحكمًا بدلاً من فرض هذه الإعدادات عليه.
1. تحديد مواضع فشل تحليل اسم النطاق
ابدأ بتحديد مسار الشبكة والبحث عن اسم المضيف. شغّل الأوامر محليًا أو في نافذة طرفية تبقى مفتوحة في حال حدوث تغييرات في الشبكة.
ip -br address
ip route
ping -c 2 1.1.1.1
resolvectl status
resolvectl query debian.org
getent ahosts debian.org
يشير وجود مسار افتراضي واتصال IP رقمي فعال إلى قدرة الجهاز على الوصول إلى الشبكة دون الحاجة إلى نظام أسماء النطاقات (DNS). لا يُعدّ فشل اختبار الاتصال (ping) دليلاً قاطعاً على وجود خلل في المسار، إذ قد تحظر الشبكات ردود ICMP echo. إذا كانت الواجهة تفتقر إلى عنوان أو مسار، فقم بتصحيح اتصال الشبكة أولاً.
resolvectl statusيعرض خوادم نظام أسماء النطاقات (DNS) والنطاقات المخصصة عالميًا أو لواجهات فردية. resolvectl queryيختبر محلل systemd؛ getent ahostsويختبر مسار البحث عن اسم المضيف الذي تستخدمه تطبيقات Linux عادةً. يساعد هذا التمييز في تحديد العطل.
ملاحظة
التحقق التالي
لا يوجد عنوان أو مسار افتراضي
قم بإصلاح إعدادات الواجهة أو البوابة أو بروتوكول DHCP قبل إعداد نظام أسماء النطاقات (DNS).
resolvectlلا يمكن الاتصال بخدمتها
تحقق مما إذا systemd-resolvedكان البرنامج مثبتًا ويعمل.
resolvectl queryينجح، getentيفشل
قم بفحص /etc/resolv.confإعدادات مضيفي NSS.
فشلت كلتا عمليتي البحث مع وجود مسار صالح
افحص عناوين نظام أسماء النطاقات (DNS) الخاصة بالخوادم الخارجية، وتوجيه نظام أسماء النطاقات، والوصول إلى جدار الحماية.
يعرض عرض الطرفية مسار الشبكة الافتراضي، وتعيين خادم DNS، والبحث عن اسم المضيف على مستوى التطبيق للتشخيص الأولي.
2. تأكد من تثبيت systemd-resolved وتفعيله
في نظام Debian 12، لا يضمن وجود systemd تثبيت حزمة محلل أسماء النطاقات المنفصلة. تحقق من الحزمة والوحدة قبل تغيير أي ملفات DNS.
dpkg-query -W -f='${Status}\n' systemd-resolved
systemctl status systemd-resolved --no-pager
إذا كانت الحزمة مثبتة ولكن الخدمة غير نشطة، فقم بتشغيلها وتمكينها لعمليات إعادة التشغيل المستقبلية:
إذا كانت الحزمة مفقودة، فقم بتثبيتها sudo apt install systemd-resolvedفقط بعد التأكد من إمكانية الوصول إلى مستودع الحزم. سيؤدي تثبيتها إلى تغيير التحكم في النظام /etc/resolv.conf، لذا راجع إعدادات NetworkManager أو VPN أو DNS الثابت أولاً. توثق دبيان هذا التغيير في الحزمة في ملاحظات ترقية Bookworm .
توضح شاشة حالة الخدمة مكان البحث عن الوحدة المحملة، والحالة النشطة، ورسائل بدء التشغيل.
3. أصلح رابط المُحلِّل فقط إذا كان خاطئًا
systemd-resolvedيستمع البرنامج القياسي على 127.0.0.53. ملف التوافق الموصى به هو /run/systemd/resolve/stub-resolv.conf، والذي يمكن ربطه من /etc/resolv.conf. تحقق من وضعك الحالي أولاً:
ls -l /etc/resolv.conf
readlink -f /etc/resolv.conf
cat /etc/resolv.conf
resolvectl status
/run/systemd/resolve/resolv.confيُعدّ الربط بـ ` < ...
إذا كنت تستخدم الرابط المحلي عمدًا، وكانت الخدمة قيد التشغيل، ومستمع الرابط مُفعّلًا، وكان الرابط الحالي /etc/resolv.confمفقودًا أو معطلًا أو يشير إلى مُحلِّل قديم، فاستعد الرابط المُوصى به. أولًا، أنشئ نسخة احتياطية من ملف أو رابط موجود؛ تخطَّ عملية النسخ إذا لم يكن هناك ملف موجود.
لا تُشغّل هذا الاستبدال على مضيف تُديره خدمة أخرى عمدًا /etc/resolv.conf. يتطلب الإدخال المحلي nameserver 127.0.0.53أيضًا مُستمعًا فرعيًا فعالًا؛ فمجرد كتابة هذا العنوان لا يُنشئ خدمة DNS. على جهاز بعيد، احتفظ بطريقة وصول ثانية قبل تعديل إعدادات المُحلِّل.
يُظهر فحص الارتباط الرمزي الهدف المتوقع عندما يتم تكوين Debian عمدًا لاستخدام stub المحلي الذي تم حله بواسطة systemd.
4. تصحيح خادم DNS العلوي الغائب أو غير القابل للوصول
عندما resolvectl statusلا يظهر خادم DNS مناسب في المصدر، أو عندما يكون الخادم المُكوّن غير قابل للوصول، قم بتصحيح مصدر هذا التعيين. قد تأتي إعدادات DNS الديناميكية من DHCP أو NetworkManager أو systemd-networkd أو VPN. تحقق من الواجهة التي تحمل المسار الافتراضي وخادم DNS التابع لتلك الواجهة.
لإجراء اختبار تشخيصي سريع على شبكة تسمح باستخدام نظام أسماء النطاقات العام (DNS)، قم بتعيين خوادم DNS عامة معروفة لتلك الواجهة. استبدل ens33بالواجهة الفعلية من ip -br address:
sudo resolvectl dns ens33 1.1.1.1 1.0.0.1
resolvectl query debian.org
هذان العنوانان موثقان لدى Cloudflare كعنواني مُحلِّل DNS العامين . resolvectl dnsالتغيير هو إعداد وقت التشغيل؛ وقد يقوم مدير الشبكة باستبداله عند إعادة الاتصال. إذا نجح البحث الآن، فقم بإصلاح مصدر DNS الدائم بدلاً من الاعتماد على هذا الأمر المؤقت.
باستخدام NetworkManager، افحص الاتصال النشط nmcli connection show --activeوعدّل إعدادات DNS أو سلوك DHCP الخاص به. أما باستخدام systemd-networkd، فضع DNS=الإعدادات المطلوبة في الملف المناسب .network، ثم أعد تحميل الشبكة أو تهيئتها في وقت مناسب. راجع دليل Debian systemd.network ودليل تهيئة Debian NetworkManager . قد يؤدي إعادة الاتصال بواجهة مُدارة إلى مقاطعة جلسة SSH.
يُفضّل استخدام خوادم نظام أسماء النطاقات (DNS) الخاصة بالمؤسسة أو شبكة VPN للأسماء الداخلية. لا يُمكن افتراض أن خوادم DNS العامة تُجيب على النطاقات الخاصة؛ إذ قد يؤدي توجيه جميع الاستعلامات إليها إلى تعطيل نظام DNS المُجزأ أو الكشف عن أسماء المضيفين الداخلية. يُمكن أن تعمل DNS=الإدخالات العامة resolved.confجنبًا إلى جنب مع نظام DNS الخاص بكل رابط بدلاً من استبداله تلقائيًا؛ راجع دليل ملف resolved.conf الخاص بـ Bookworm .
5. امسح ذاكرة التخزين المؤقت وتأكد من أن مساري البحث يعملان.
بعد تصحيح الخدمة أو رابط المُحلِّل أو إعدادات المصدر، قم بمسح الإجابات المخزنة مؤقتًا وأعد الاختبار:
تكون عملية الإصلاح فعّالة عندما resolvectl queryتُعيد عناوين IP getent ahostsوسجلات عناوين IP، وتبقى خوادم DNS المقصودة مرئية بعد إعادة الاتصال بالشبكة. يختبر الأمران واجهتين مختلفتين، لذا لا تعتبر نجاح أحدهما دليلاً على إصلاح جميع التطبيقات. يوثّق دليل Debian resolvectl الاستعلام والحالة ومسح ذاكرة التخزين المؤقت.
يعرض العرض النهائي للطرفية الفحصين اللذين يجب أن يعيدا سجلات العناوين بعد إصلاح تكوين نظام أسماء النطاقات (DNS).
إذا resolvectl queryنجحت العملية ثم getentفشلت مرة أخرى، فافحص grep "^hosts:" /etc/nsswitch.confوتأكد من وجود وحدة NSS مناسبة dnsأو مثبتة resolveفي مسار البحث. إذا استمر الفشل في كلتا الحالتين، فراجع سجل المُحلِّل وأي قيود جدار الحماية على حركة مرور DNS، ثم اختبر باستخدام عنوان DNS الفعلي للشركة أو جهاز التوجيه أو مزود الخدمة. لا يكفي نجاح عملية البحث بشكل منفرد: كرر عمليات الفحص بعد إعادة الاتصال وبعد إعادة التشغيل للتحقق من استمرار الإصلاح.