KXDPGUN(8) Knot DNS KXDPGUN(8)

kxdpgun - ابزار ارزیابی و سنجش کارایی DNS مبتنی بر XDP

kxdpgun [گزینه‌ها] -i نام_فایل هدف

تولیدکننده قدرتمند ترافیک DNS که ارسال و دریافت بسته‌ها را از طریق XDP انجام می‌دهد.

پرس‌وجوها بر اساس یک فایل متنی تولید می‌شوند که به صورت ترتیبی در یک حلقه تا زمان سپری شدن مدت‌زمان پیکربندی‌شده خوانده می‌شود. ترتیب پرس‌وجوها تضمین‌شده نیست. پاسخ‌ها (مگر در صورت غیرفعال بودن) دریافت و شمارش می‌شوند، اما با پرس‌وجوها تطبیق داده نمی‌شوند.

شمار رشته‌های موازی به طور خودکار بر اساس تعداد صف‌های پیکربندی‌شده برای رابط شبکه تشخیص داده می‌شود.

نام_فایل
مسیر فایل پرس‌وجوها. برای اطلاع از ساختار فایل به توضیحات زیر مراجعه کنید.
هدف
نام دامنه، آدرس IPv4 یا IPv6 یک مقصد راه دور.

مدت زمان تولید ترافیک بر حسب ثانیه به عنوان یک عدد اعشاری مشخص می‌شود (پیش‌فرض ۵٫۰ است).
ارسال پرس‌وجوها روی TCP. فهرست حالت‌های اشکال‌زدایی اختیاری را در زیر ببینید.
ارسال پرس‌وجوها روی QUIC. فهرست حالت‌های اشکال‌زدایی اختیاری را در زیر ببینید.
تعداد تقریبی پرس‌وجوها در ثانیه برای ارسال (پیش‌فرض ۱۰۰۰ است). این برنامه برای سرعت‌های پایین بهینه‌سازی نشده است و ممکن است در سرعت‌های کم بسته‌های ارتباطی را از دست بدهد. حداقل سرعت توصیه‌شده ۲ بسته به ازای هر رشته (صف Rx/Tx) است.
ارسال پرس‌وجوهای بیشتر در یک دسته. مقدار QPS را بهبود می‌بخشد اما ممکن است بر اتلاف بسته در سمت مقابل تأثیر بگذارد (پیش‌فرض ۱۰ برای UDP و ۱ برای TCP/QUIC است).
دور ریختن پاسخ‌های دریافتی. مقدار QPS را افزایش می‌دهد، اما آمار پاسخ‌ها را غیرفعال می‌سازد.
درگاه مقصد راه دور (پیش‌فرض ۵۳ برای UDP/TCP و ۸۵۳ برای QUIC است).
وابستگی پردازنده (CPU affinity) برای تمام رشته‌ها که در قالب [<cpu_start>][s<cpu_step>] مشخص می‌شود؛ که در آن <cpu_start> شناسه CPU برای نخستین رشته و <cpu_step> گام افزایش شناسه CPU برای رشته بعدی است (پیش‌فرض 0s1 است).
مسیر فایلی شامل الگوهای پرس‌وجو.
مشخص کردن اینکه فایل ورودی در قالب باینری است. این قالب مشابه قالب پیام‌های DNS مبتنی بر TCP است. این فایل شامل رکوردهایی در قالب طول ۲ بایتی (ترتیب شبکه) است که پس از آن پیام در فرمت سیم (wire format) دی‌ان‌اس قرار می‌گیرد.
رابط شبکه برای ارتباطات خروجی. این گزینه در شرایطی کاربرد دارد که برای نمونه رابط‌ها در یک پیوند (bond) قرار دارند.
بازنویسی آدرس IP مبدأ که به صورت خودکار شناسایی شده است. اگر به جای آن یک محدوده آدرس تعیین شود، IPهای مختلف از آن محدوده به صورت یکنواخت برای پرس‌وجوهای گوناگون استفاده خواهند شد (محدوده آدرس در حالت QUIC پشتیبانی نمی‌شود).
بازنویسی آدرس MAC محلی شناسایی‌شده به صورت خودکار.
بازنویسی آدرس MAC مقصد شناسایی‌شده به صورت خودکار.
افزودن هدر VLAN 802.1Q با شناسه مشخص‌شده. ویژگی VLAN offloading باید غیرفعال باشد.
اندازه محموله EDNS UDP، در محدوده ۵۱۲ تا ۴۰۹۶ (پیش‌فرض ۱۲۳۲ است). توجه داشته باشید که روی XDP حداکثر MTU پشتیبانی‌شده برابر ۱۷۹۰ است.
تنظیم حالت XDP. مقادیر پشتیبانی‌شده عبارتند از:
  • auto (پیش‌فرض) – حالت XDP به صورت خودکار برای دستیابی به بالاترین کارایی انتخاب می‌شود، به این معنی که پشتیبانی درایور بومی (native) بر حالت عمومی ترجیح داده شده و در صورت در دسترس بودن، از zero-copy استفاده می‌شود.
  • copy – حالت کپی سوکت XDP اجبار می‌شود حتی اگر zero-copy در دسترس باشد. این گزینه می‌تواند مشکلات گوناگون درایور را حل کند، اما به بهای کاهش کارایی تمام می‌شود.
  • generic – پیاده‌سازی عمومی XDP اجبار می‌شود حتی اگر پیاده‌سازی بومی در دسترس باشد. این حالت نیازی به پشتیبانی درایور یا سخت‌افزار ندارد، اما پایین‌ترین کارایی را ارائه می‌دهد.
تولید فایل‌های qlog در دایرکتوری مشخص‌شده توسط مسیر. دایرکتوری باید از قبل وجود داشته باشد.

این گزینه در خارج از حالت QUIC نادیده گرفته می‌شود. کاربرد پیشنهادی آن با --quic=R یا با مقادیر کم QPS است، در غیر این صورت فایل‌های بیش از حدی تولید خواهد شد.

چاپ آمارها با فرمت JSON.
گزارش خودکار آمارها در هر دوره بر حسب میلی‌ثانیه.

این گزارش‌ها تنها حاوی معیارهای جمع‌آوری‌شده در دوره زمانی مشخص‌شده هستند.

چاپ راهنمای برنامه.
چاپ نسخه برنامه. گزینه -VV خلاصه پیکربندی زمان کامپایل را نیز چاپ می‌کند.

هر سطر یک پرس‌وجو را در قالب زیر توصیف می‌کند:

نام_پرس‌وجو نوع_پرس‌وجو [فلگ‌ها]

که در آن نام_پرس‌وجو نام دامنه‌ای است که باید پرسیده شود، نوع_پرس‌وجو نام نوع رکورد است، و فلگ‌ها یک نویسه واحد است:

E ارسال پرس‌وجو به همراه EDNS.

D درخواست DNSSEC (ترکیب EDNS به همراه فلگ DO).

0
انجام دست‌تکانی (handshake) کامل برای همه اتصالات (فقط QUIC).
1
صرفاً ارسال SYN (Initial) و دریافت SYN-ACK (Handshake).
2
انجام دست‌تکانی TCP/QUIC و ارسال نکردن هیچ چیز دیگر، و اجازه بستن اتصال از سوی طرف مقابل.
3
انجام دست‌تکانی TCP/QUIC و عدم واکنش پس از آن.
5
ارسال پرس‌وجوی ناقص (N-1 بایت) و عدم واکنش پس از آن.
7
ارسال پرس‌وجو و عدم ارسال تاییدیه (ACK) برای پاسخ یا هر پیام دیگر.
8
نبستن اتصال و نادیده گرفتن درخواست بستن از سوی طرف مقابل.
9
عملکرد عادی به جز عدم ارسال ACK برای آخرین FIN+ACK (فقط TCP).
استفاده مجدد از اتصالات به جای باز کردن اتصال جدید برای هر پرس‌وجو.

ارسال سیگنال USR1 به فرآیند در حال اجرا، تخلیه آمار فعلی را در خروجی استاندارد فعال می‌کند. در ترکیب با -S ممکن است باعث ناپایداری در زمان‌بندی چاپ شود.

هسته لینوکس ۴٫۱۸ یا بالاتر مورد نیاز است.

این ابزار باید با کاربر ریشه (root) یا با داشتن این قابلیت‌ها اجرا شود: CAP_NET_RAW ،CAP_NET_ADMIN ،CAP_SYS_ADMIN ،CAP_IPC_LOCK و CAP_SYS_RESOURCE (در لینوکس نسخه‌های کمتر از ۵٫۱۱).

این ابزار درگاه‌های مبدأ UDP/TCP را از محدوده ۲۰۰۰ تا ۶۵۵۳۵ تخصیص می‌دهد.

برای عملکرد صحیح حالت QUIC روی کارت‌های شبکه چندصفی Mellanox/NVIDIA، ممکن است نیاز به تنظیم دستور ethtool -X <dev> xfrm none باشد.

به دلیل ساختار چندرشته‌ای برنامه، اختلافات اندکی در بازه زمانی جمع‌آوری معیارها برای هر رشته مشخص وجود دارد. چاپ آماری این موضوع را نادیده می‌گیرد و بنابراین خروجی تا حد بسیار کمی نادقیق است. حاشیه خطا به طور متناسب با حجم داده‌ها و بازه زمانی که داده‌ها طی آن جمع‌آوری شده‌اند، کاهش می‌یابد.

وضعیت خروج ۰ به معنای اجرای موفقیت‌آمیز است. هر وضعیت خروج دیگری نشان‌دهنده یک خطاست.

فایل پرس‌وجوهای ایجادشده به صورت دستی:

abc6.example.com. AAAA
nxdomain.example.com. A
notzone. A
a.example.com. NS E
ab.example.com. A D
abcd.example.com. DS D

فایل پرس‌وجوهای تولیدشده از فایل ناحیه (منطقه) (قالب Knot DNS):

cat ZONE_FILE | awk "{print \,\}" | grep -E "(NS|DS|A|AAAA|PTR|MX|SOA)$" | sort -u -R > queries.txt

کاربرد پایه:

# kxdpgun -i ~/queries.txt 2001:DB8::1

استفاده از UDP با اندازه دسته افزایش‌یافته:

# kxdpgun -t 20 -Q 1000000 -i ~/queries.txt -b 20 -p 8853 192.0.2.1

استفاده از TCP:

# kxdpgun -t 20 -Q 100000 -i ~/queries.txt -T -p 8853 192.0.2.1

kdig(1).

CZ.NIC, z.s.p.o. and contributors https://www.knot-dns.cz

Copyright (C) CZ.NIC, z.s.p.o. and contributors

2026-06-12 3.5.5