گلوگاه دسته‌بندی داده‌ها: ناکارآمدی فیلترهای نرم‌افزاری در ترافیک بالا

سرورهای تجمیع ترافیک و گیت‌وی‌های پرتراکم VPN حجم بسیار زیادی از داده‌های شبکه را پردازش می‌کنند. هنگامی که پهنای باند خطوط اتصال به ۲۵، ۴۰ یا ۱۰۰ گیگابیت بر ثانیه می‌رسد، نرخ ورود بسته‌ها غالباً از ده‌ها میلیون بسته در ثانیه (Mpps) فراتر می‌رود. در چنین مقیاسی، دسته‌بندی بسته‌ها—فرآیند استخراج داده‌های سرآیند برای مسیریابی، دیواره آتش، کنترل نرخ داده و تخصیص تونل—به اصلی‌ترین مانع کارایی سیستم تبدیل می‌شود.

پیش از این، مدیران شبکه معمولاً از زنجیره‌های iptables یا جداول اولیه nftables برای بازرسی بسته‌ها استفاده می‌کردند. با وجود کارایی در روترهای کوچک، این روش‌های مبتنی بر نرم‌افزار با محدودیت‌های پردازشی ساختاری روبرو هستند:

۱. پیمایش خطی و پیوسته قوانین در وقفه نرم‌افزاری هسته: دیواره‌های آتش نرم‌افزاری قوانین را به صورت تک‌تک و متوالی بررسی می‌کنند. هنگامی که میلیون‌ها بسته از طریق روال‌های وقفه نرم‌افزاری ksoftirqd وارد پشته شبکه می‌شوند، بررسی صدها قانون بخش اعظم چرخه‌های پردازنده را می‌بلعد. در صورت ارسال جریان‌های متراکم و تأییدنشده UDP به درگاه VPN، هسته‌های پردازنده قبل از تایید هویت بسته‌ها دچار اشباع کامل می‌شوند. ۲. شکنندگی محاسبات بیتی در فیلترهای قدیمی: کلاسیفایر قدیمی u32 در سامانه کنترل ترافیک لینوکس به محاسبات دستی جابه‌جایی بایت وابسته بود. تغییر طول در گزینه‌های سرآیند IPv4، سرآیندهای توسعه‌یافته IPv6 یا تونل‌های تودرتو موجب بروز خطاهای محاسباتی در u32 می‌شد. ۳. تراکم گذرگاه داده و تخلیه پی‌درپی حافظه نهان: در شیوه نرم‌افزاری، هر بسته دریافتی باید از مسیر PCIe عبور کرده و یک ساختار بافر سوکت (sk_buff) در رم سیستم باز کند. با افزایش حجم ترافیک، حافظه‌های نهان L2 و L3 پردازنده پیاپی تخلیه شده و توان لازم برای هسته‌های رمزنگاری ChaCha20-Poly1305 و AES-GCM باقی نمی‌ماند.

برای حفظ سرعت انتقال بر روی سیم فیزیکی و پایان دادن به اشباع وقفه‌های نرم‌افزاری، گیت‌وی‌های پرسرعت VPN به یک کلاسیفایر ساختاریافته نیاز دارند که بتواند منطق فیلترینگ را به سیلیکون فیزیکی کارت شبکه منتقل کند: Linux TC Flower (cls_flower).

معماری کلاسیفایر جریان Linux TC Flower (cls_flower)

کلاسیفایر Flower (cls_flower) با ادغام در هسته‌های امروزی لینوکس، بخش کنترل ترافیک (tc) را به یک موتور شناسایی جریان با کارایی بسیار بالا تبدیل می‌کند. برخلاف محاسبات ناپایدار در u32، ابزار Flower از موتور درونی بررسی پروتکل هسته (flow dissector) برای تفکیک دقیق لایه‌های ۲، ۳ و ۴ بهره می‌برد.

+-------------------------------------------------------------------------+
|                        فریم اترنت ورودی (Ingress)                       |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                  موتور تجزیه جریان هسته لینوکس                          |
|     - استخراج لایه ۲: مک‌آدرس‌ها، برچسب VLAN، نوع EtherType             |
|     - استخراج لایه ۳: نشانی‌های مبدأ و مقصد IPv4/IPv6، شاخص DSCP        |
|     - استخراج لایه ۴: درگاه‌های UDP/TCP، پرچم‌های TCP، نوع ICMP         |
|     - استخراج کلیدهای بسته‌بندی تونل (VNI، Tunnel ID)                   |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                   جدول هش مبتنی بر ماسک Flower                          |
|   - جستجوی سریع O(1) در زمان ثابت روی الگوهای پیکربندی‌شده              |
+-------------------------------------------------------------------------+
         |                                  |
   تطبیق موفق                         عدم تطبیق
         |                                  |
         v                                  v
+-----------------------+          +-----------------------+
|  اقدام تعیین‌شده TC   |          | رفتار پیش‌فرض شبکه    |
|  - drop (حذف بسته)    |          | ورود به پشته معمول IP |
|  - mirred redirect    |          +-----------------------+
|  - police (مهار نرخ)  |
|  - skbedit priority   |
+-----------------------+

مزایای بارز معماری TC Flower

  • جداول هش تطبیق ماسک (Mask-and-Match): فیلتر Flower قوانین را بر پایه الگوهای بیتی دسته‌بندی می‌کند. به جای آزمودن تک‌تک خطوط، بسته ورودی فقط یک بار از میان فیلدهای مشخص هش می‌شود و جستجویی در زمان ثابت O(1) پدید می‌آورد که به تعداد قوانین بستگی ندارد.
  • شناسایی خودکار پروتکل‌های گوناگون: سامانه Flower بدون نیاز به اسکریپت‌های جانبی ویژگی‌های گوناگون شبکه را درک می‌کند؛ از جمله برچسب‌های شبکه محلی مجازی (vlan_id، vlan_prio)، اولویت‌بندی بسته‌ها (ip_tos)، پرچم‌های وضعیت TCP (tcp_flags syn) و امضای درگاه‌های UDP.
  • زنجیره اقدامات ترکیبی: پس از شناسایی جریان، سامانه‌های گوناگون واکنش فعال می‌شوند؛ از حذف آنی بسته (action drop) و هدایت سخت‌افزاری داده‌ها (action mirred egress redirect) گرفته تا مهار نرخ پهنای باند (action police) و تعیین اولویت بافر (action skbedit).

جهت راه‌اندازی فیلتر Flower روی یک رابط شبکه، ابتدا صف ورودی ingress ایجاد می‌گردد:

# ایجاد صف ورودی ingress روی کارت شبکه فیزیکی enp1s0f0
tc qdisc add dev enp1s0f0 ingress

# مسدودسازی آنی بسته‌های غیرمجاز UDP ارسالی به درگاه‌های داخلی
tc filter add dev enp1s0f0 ingress protocol ip prio 10 flower \
    ip_proto udp \
    dst_port 53 \
    action drop

دست‌یابی به حداکثر سرعت کابل با تخلیه بار سخت‌افزاری ASIC

با وجود سرعت بالای اجرای نرم‌افزاری Flower در رم هسته، قدرت اصلی آن در سازگاری ذاتی با تخلیه بار سخت‌افزاری (Hardware Offload) روی چیپست‌های ASIC از طریق بستر switchdev نهفته است.

کارت‌های شبکه پیشرفته سرور (مانند Intel Columbiaville E810 یا Mellanox ConnectX-5/6/7) پردازنده‌های درونی کنترل بسته همراه با حافظه TCAM (حافظه آدرس‌پذیر محتوای سه‌حالته) دارند. هنگام فعال‌سازی پرچم‌های سخت‌افزاری، هسته لینوکس قوانین Flower را به ریزکدهای سخت‌افزاری برگردانده و درون جداول پردازشی کارت شبکه می‌نشاند.

+-------------------------------------------------------------------+
|                     کابل فیبر نوری فیزیکی                         |
+-------------------------------------------------------------------+
                                  |
                                  v
+-------------------------------------------------------------------+
|                 بخش گیرنده نوری و لایه MAC/PHY                    |
+-------------------------------------------------------------------+
                                  |
                                  v
+-------------------------------------------------------------------+
|         پردازنده درونی کارت شبکه و جدول جریان TCAM                |
|               (قوانین Flower درون سیلیکون سخت‌افزار)               |
|                                                                   |
|   قانون: حذف سیلاب بسته‌ها (skip_sw)  --> [حذف کامل در سیلیکون]   |
|   قانون: درگاه ۵۱۸۲۰ RiceGuard        --> [انتقال مستقیم DMA به CPU|
+-------------------------------------------------------------------+
            | (تنها بسته‌های رمزنگاری‌شده تاییدشده عبور می‌کنند)
            v
+-------------------------------------------------------------------+
|                 گذرگاه PCIe و حافظه رم سرور                       |
+-------------------------------------------------------------------+
                                  |
                                  v
+-------------------------------------------------------------------+
|              هسته‌های چندشاخه پردازش رمزنگاری RiceGuard           |
+-------------------------------------------------------------------+

سه وضعیت اجرای فرآیند تخلیه بار در TC Flower

مدیران شبکه می‌توانند بستر پردازش را صراحتاً تعیین کنند:

۱. تخلیه خودکار (حالت پیش‌فرض): چنانچه درایور سخت‌افزار پشتیبانی کند، قانون درون تراشه کارت شبکه نصب شده و همزمان نسخه‌ای در رم نگه داشته می‌شود. با پر شدن جدول چیپ، ادامه کار به طور خودکار به نرم‌افزار محول می‌گردد. ۲. حالت skip_hw: اجرای فیلتر را صرفاً به حافظه هسته محدود ساخته و منابع سخت‌افزاری کارت شبکه را دست‌نخورده باقی می‌گذارد. ۳. حالت skip_sw (اجرای انحصاری در سخت‌افزار): ثبت قانون را فقط درون سیلیکون کارت شبکه الزامی می‌سازد. چنانچه سخت‌افزار قادر به اعمال دقیق شرایط یا اقدام نباشد، دستور tc بی‌درنگ با پیام خطا متوقف می‌شود.

نمونه‌ای از اعمال فیلتر تمام‌سخت‌افزاری روی یک درگاه ۱۰۰ گیگابیت:

# حذف بسته‌های نشانی‌های جعلی مستقیماً در سخت‌افزار کارت شبکه
tc filter add dev enp1s0f0 ingress protocol ip prio 1 flower \
    src_ip 198.51.100.0/24 \
    skip_sw \
    action drop

# هدایت مستقیم ترافیک معتبر VPN به صف سخت‌افزاری اولویت بالا
tc filter add dev enp1s0f0 ingress protocol ip prio 2 flower \
    ip_proto udp \
    dst_port 51820 \
    skip_sw \
    action skbedit priority 1

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

استقرار سیاست‌های امنیتی در زیرساخت RiceGuard

در شبکه گسترده و توزیع‌شده VPNRice، پلتفرم RiceGuard استانداردهای به‌روز رمزنگاری را با هدایت سخت‌افزاری جریان‌ها پیوند می‌زند تا ظرفیت شبکه همواره بالا مانده و حریم کاربران مصون باشد.

+-------------------------------------------------------------------+
|                      سرور لبه شبکه VPNRice                        |
|                                                                   |
|   +-----------------------------------------------------------+   |
|   |         کارت شبکه ۱۰۰ گیگابیت فیزیکی اینتل / ملانوکس       |   |
|   |         حافظه سخت‌افزاری TCAM: قوانین Flower (skip_sw)        |   |
|   +-----------------------------------------------------------+   |
|         |                                           |             |
|   [بسته‌های قانونی ۵۱۸۲۰]                 [ترافیک مخرب یا نامعتبر]|
|         |                                           |             |
|         v                                           v             |
|   انتقال مستقیم DMA به صف RX              حذف در سخت‌افزار شبکه   |
|         |                                 (بدون درگیری پردازنده)  |
|         v                                                         |
|  +-------------------------------------------------------------+  |
|  |                 هسته پردازش رمزنگاری RiceGuard              |  |
|  |                 رمزگشایی ChaCha20-Poly1305 با سرعت خط       |  |
|  +-------------------------------------------------------------+  |
|         |                                                         |
|         v                                                         |
|  +-------------------------------------------------------------+  |
|  | فضاهای نام ایزوله شبکه و سامانه‌های محلی DNS رمزنگاری‌شده   |  |
|  | پیشگیری جامع از خروج ناخواسته داده‌های رمزنشده              |  |
|  +-------------------------------------------------------------+  |
+-------------------------------------------------------------------+

۱. تفکیک سخت‌افزاری جریان‌های ورودی

سامانه RiceGuard به جای فرستادن کل داده‌ها به یک صف نرم‌افزاری مشترک، از فیلترهای TC Flower برای شناسایی سریع نشست‌های WireGuard/RiceGuard استفاده می‌کند. تراشه شبکه بسته‌ها را از طریق توزیع RSS مستقیماً به صف‌های ویژه هر هسته پردازشی انتقال می‌دهد؛ اقدامی که از قفل حافظه جلوگیری کرده و تاخیر را در مقیاس زیر میلی‌ثانیه تثبیت می‌کند.

۲. حفاظت سخت‌افزاری پیش از آغاز تبادل نشست

سیلاب بسته‌های نامعتبر می‌تواند کارایی گیت‌وی را با واداشتن به پاسخ‌های بی‌حاصل رمزنگاری با افت مواجه کند. سامانه‌های لبه با تعیین سقف‌های سخت‌افزاری پهنای باند (action police rate 100mbit burst 10k drop skip_sw)، نرخ ورود داده را از درون تراشه مهار می‌کنند. جریان‌های نامتعارف قبل از رسیدن به پردازنده مهار شده و رم و پردازنده برای رمزگشایی آزاد باقی می‌مانند.

۳. ایزوله‌سازی فضاهای نام و مسدودسازی نشت داده

هر بخش کاربری در RiceGuard درون فضاهای نام شبکه مجزای لینوکس (netns) قرار دارد. دستورات هدایت TC Flower مانع از آن می‌شوند که بسته‌های رمزنشده به خروجی‌های عمومی سیستم راه یابند. علاوه بر این، تعبیه کارگزاران محلی و ایمن DNS در درون هر فضا، از بروز هرگونه نشت در درخواست‌های DNS جلوگیری کرده و یکپارچگی اطلاعات کاربران را تضمین می‌نماید.