
مجموعة أدوات قياس DNS واستكشاف الأخطاء وإصلاحها وتدقيق الأمان
هل تساءلت يومًا ما إذا كان مزود خدمة الإنترنت الخاص بك يعترض حركة DNS الخاصة بك؟ هل لاحظت أي سلوك غير معتاد في استجابات DNS الخاصة بك، أو تمت إعادة توجيهك إلى عنوان خاطئ وشككت في وجود خطأ ما في DNS لديك؟ نحن نقدم مجموعة من الأدوات لإجراء تدقيق أساسي على طلبات واستجابات DNS الخاصة بك، مما يساعدك على ضمان أن DNS الخاص بك يعمل كما هو متوقع.
باستخدام dnsping، يمكنك قياس وقت الاستجابة لأي خادم DNS لاستعلامات عشوائية. على غرار أداة ping العادية، توفر dnsping وظائف مماثلة لطلبات DNS، مما يساعدك على مراقبة استجابة الخادم.
يمكنك أيضًا تتبع مسار طلب DNS الخاص بك إلى وجهته باستخدام dnstraceroute، للتحقق من عدم إعادة توجيهه أو اعتراضه. من خلال مقارنة استعلامات DNS المرسلة إلى نفس الخادم، يتيح لك dnstraceroute ملاحظة أي اختلافات في المسارات المتخذة، مما ينبهك إلى المشكلات المحتملة.
dnseval يقوم بتقييم عدة حلول DNS لمساعدتك في اختيار أفضل محلل DNS لشبكتك. على الرغم من أنه يُنصح باستخدام محلل DNS خاص بك لتجنب الاعتماد على محللي DNS من طرف ثالث، إلا أن dnseval يمكن أن يساعد في اختيار محلل DNS الأمثل عند الحاجة. يتيح لك مقارنة خوادم DNS بناءً على الأداء (زمن الاستجابة) والموثوقية (فقدان الحزم)، مما يمنحك نظرة شاملة لاتخاذ قرارات مستنيرة.
هناك عدة طرق لاستخدام هذه المجموعة من الأدوات، على الرغم من أننا نوصي بتشغيلها مباشرة من الكود المصدري لتحقيق أقصى مرونة وتحكم.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv هو مدير حزم Python سريع يمكنه تشغيل الأدوات مباشرة دون تثبيت:
# قم بتشغيل dnsping مباشرة دون تثبيت
uvx --from dnsdiag dnsping google.com
# قم بالتشغيل مع خيارات محددة
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# قم بتشغيل dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# قم بتشغيل dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
لتثبيت dnsdiag بشكل دائم:
# قم بتثبيت أدوات dnsdiag
uv tool install dnsdiag
# الترقية إلى أحدث إصدار
uv tool upgrade dnsdiag
من وقت لآخر، سيتم إصدار حزم ثنائية لنظامي Windows و macOS و Linux. يمكنك الحصول على أحدث إصدار من صفحة الإصدارات.
الملفات الثنائية المبنية مسبقًا متوفرة لـ:
Windows ARM64 غير مدعوم حاليًا بسبب اعتماديات البناء التي تتطلب سلاسل أدوات تجميع أصلية غير متوفرة بسهولة. إذا كنت تستخدم Windows على ARM، يمكنك تشغيل dnsdiag باستخدام نظام Windows Subsystem for Linux (WSL2) أو التثبيت مباشرة من المصدر.
إذا كنت تفضل عدم تثبيت dnsdiag على جهازك المحلي، يمكنك استخدام صورة Docker لتشغيل الأدوات في بيئة حاوية. على سبيل المثال:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
يسمح لك dnsping "بإجراء ping" لمحلل DNS عن طريق إرسال استعلام DNS عشوائي عدة مرات. للحصول على قائمة كاملة بخيارات سطر الأوامر المدعومة، استخدم --help. فيما يلي بعض العلامات الرئيسية:
--tcp أو --tls أو --doh أو --quic أو --http3 لتحديد بروتوكول النقل (الافتراضي هو UDP). هذه الخيارات متنافية؛ يمكن تحديد بروتوكول واحد فقط لكل أمر.--flags لعرض علامات الاستجابة، بما في ذلك علامات EDNS، لكل استجابة.--dnssec لطلب التحقق من DNSSEC، إذا كان متاحًا.--nsid لعرض معرف خادم الاسم (NSID) إذا كان متاحًا (RFC 5001).--ecs لتضمين معلومات شبكة العميل الفرعية الخاصة بـ EDNS لتحسين التوجيه الجغرافي.--cookie لعرض ملفات تعريف الارتباط DNS (RFC 7873) عند وجودها في الاستجابات../dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=73.703 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=2 time=69.523 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=3 time=58.058 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=4 time=54.235 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=5 time=57.806 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms
يوفر dnsping أيضًا إحصائيات مثل الحد الأدنى والحد الأقصى ومتوسط أوقات الاستجابة، بالإضافة إلى التذبذب (الانحراف المعياري) وفقدان الحزم.
فيما يلي بعض حالات الاستخدام المثيرة لـ dnsping:
--dnssec../dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66 bytes from 94.140.14.14: seq=1 time=31.407 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=2 time=29.156 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=3 time=30.892 ms NOERROR [ECS:203.0.113.0/24/24]
--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com
dnsping.py DNS: 8.8.8.8:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
68 bytes from 8.8.8.8: seq=1 time=36.399 ms NOERROR [NSID:gpdns-ams]
68 bytes from 8.8.8.8: seq=2 time=32.156 ms NOERROR [NSID:gpdns-ams]
--- 8.8.8.8 dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=32.156 ms, avg=34.278 ms, max=36.399 ms, stddev=2.122 ms
./dnsping.py -c 2 --cookie -s anyns.pch.net quad9.net
dnsping.py DNS: anyns.pch.net:53, hostname: quad9.net, proto: UDP, class: IN, type: A, flags: [RD]
82 bytes from anyns.pch.net: seq=1 time=30.552 ms NOERROR [COOKIE:27f609c017bb2ec4ea70de5c68eec3fc39f6a53ee49c55f8]
82 bytes from anyns.pch.net: seq=2 time=24.794 ms NOERROR [COOKIE:719631dd9fcce722d3ac859b68eec3fd2e5430b5c8a7f8cf]