گلوگاه پل‌های نرم‌افزاری در پردازش داده‌های رمزگذاری‌شده

مدیریت سرورهای گیت‌وی VPN با تراکم بالا و چندین مشترک (Multi-Tenant) نیازمند دو اصل پایه‌ای است: جداسازی دقیق فضای کاری کاربران و حفظ حداکثر سرعت انتقال بر روی سخت‌افزار فیزیکی مشترک. هنگام پیاده‌سازی نمونه‌های مجزا درون کانتینرها یا ماشین‌های مجازی KVM، مهندسان شبکه معمولاً رابط‌های مجازی را به پل‌های نرم‌افزاری لینوکس (br0) یا سامانه‌های سوییچ نرم‌افزاری متصل می‌کنند.

در ترافیک معمولی، این سازوکار به خوبی پاسخگوست. اما هنگامی که مجموع پهنای باند به ۱۰، ۲۵ یا ۱۰۰ گیگابیت بر ثانیه نزدیک می‌شود، سوئیچینگ نرم‌افزاری با محدودیت‌های پردازشی جدی روبرو می‌شود:

۱. کپی‌های مکرر حافظه و کاهش کارایی حافظه نهان (Cache): هر بسته اترنت دریافتی توسط کارت شبکه فیزیکی، ابتدا در بافر سوکت هسته (sk_buff) ذخیره شده، سپس درون منطق پل پردازش می‌شود و بار دیگر به حلقه بافر virtio-net منتقل می‌گردد. این جابه‌جایی‌های متوالی، پهنای باند رم را کاهش داده و خطوط کش L2 و L3 پردازنده را تخلیه می‌کند. ۲. هزینه‌های تغییر زمینه و تداخل وقفه‌های نرم‌افزاری: رابط‌های tap به شدت به فرآیندهای کاری vhost-net و روتین‌های وقفه نرم‌افزاری (ksoftirqd) وابسته‌اند. پردازش میلیون‌ها بسته در ثانیه منجر به پرش‌های متوالی بین هسته‌ها شده و منابع محاسباتی مورد نیاز الگوریتم‌های رمزنگاری را مصرف می‌کند. ۳. تداخل صف‌ها میان مشترکان مختلف: هنگامی که یکی از مشترکان جریان داده‌های رمزگذاری‌شده سنگینی ارسال می‌کند، قفل‌های داخلی پل نرم‌افزاری بسته‌های دیگر کاربران را معطل نگه می‌دارد و پدیده نوسان تاخیر (Jitter) ایجاد می‌کند.

برای پروتکل‌های جدید رمزنگاری مانند WireGuard و RiceGuard، هدر رفتن ۳۰ تا ۵۰ درصد از توان پردازشی فقط برای جابه‌جایی نرم‌افزاری بسته‌ها قابل قبول نیست. راهکار اصولی، انتقال مستقیم بار مجازی‌سازی شبکه به سیلیکون فیزیکی PCIe با استفاده از SR-IOV و درایور Macvtap است.

ساختار SR-IOV: تفکیک توابع فیزیکی (PF) و توابع مجازی (VF)

استاندارد SR-IOV که توسط کنسرسیوم PCI-SIG تعریف شده است، به یک آداپتور فیزیکی PCIe امکان می‌دهد تا در سیستم‌عامل لینوکس به عنوان چندین دستگاه سخت‌افزاری مجزا شناخته شود. این معماری در دو سطح عمل می‌کند:

+-------------------------------------------------------------------------+
|                    کارت شبکه فیزیکی PCIe (سخت‌افزار سرور)               |
|                                                                         |
|  +-------------------------------------------------------------------+  |
|  |           Physical Function (PF): مدیریت کامل سخت‌افزار           |  |
|  |           - پیکربندی پورت، به‌روزرسانی سفت‌افزار، تخصیص منابع     |  |
|  +-------------------------------------------------------------------+  |
|         |                     |                     |                   |
|         v                     v                     v                   |
|  +--------------+      +--------------+      +--------------+           |
|  |  VF 0 (PCIe) |      |  VF 1 (PCIe) |      |  VF 2 (PCIe) |           |
|  |  - صف RX/TX  |      |  - صف RX/TX  |      |  - صف RX/TX  |           |
|  |  - وقفه MSI-X|      |  - وقفه MSI-X|      |  - وقفه MSI-X|           |
|  |  - موتور DMA |      |  - موتور DMA |      |  - موتور DMA |           |
|  +--------------+      +--------------+      +--------------+           |
+---------|---------------------|---------------------|-------------------+
          | DMA                 | DMA                 | DMA
          v                     v                     v
+------------------+   +------------------+   +------------------+
|  مشترک اول       |   |  مشترک دوم       |   |  مشترک سوم       |
|  فضای NetNS مجزا |   |  فضای NetNS مجزا |   |  فضای NetNS مجزا |
|  نود RiceGuard   |   |  نود RiceGuard   |   |  نود RiceGuard   |
+------------------+   +------------------+   +------------------+

تابع فیزیکی (PF)

تابع PF وظیفه مدیریت اصلی پورت کارت شبکه را بر عهده دارد و کنترل سخت‌افزار مانند وضعیت اتصال نوری، تغییرات فریم‌ور و مدیریت توان مصرفی را انجام می‌دهد. سیستم‌عامل میزبان با استفاده از درایورهای رسمی سرور (مانند Intel ice/ixgbe یا Mellanox mlx5_core) تابع PF را اداره می‌کند.

تابع مجازی (VF)

تابع مجازی، یک نقطه پایانی سبک و مستقل PCIe است که مستقیماً در سخت‌افزار کارت شبکه ایجاد می‌شود. هر تابع مجازی منابع کاملاً مستقل در اختیار دارد:

  • کانال‌های دسترسی مستقیم به حافظه (DMA) اختصاصی
  • حلقه‌های بافر دریافت و ارسال سخت‌افزاری (RX/TX ring buffers)
  • بردارهای وقفه سخت‌افزاری اختصاصی MSI-X
  • موتور فیلتر آدرس MAC و برچسب‌گذاری VLAN سخت‌افزاری

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

# ایجاد ۴ تابع مجازی سخت‌افزاری روی کارت شبکه enp4s0f0
echo 4 > /sys/class/net/enp4s0f0/device/sriov_numvfs

# بررسی شناسایی سخت‌افزارهای جدید در مسیر PCIe
lspci -d 8086: | grep "Virtual Function"

سپس مدیر سامانه با اعمال قواعد امنیتی سخت‌افزاری از تداخل و جعل هویت شبکه‌ای بین مشترکان جلوگیری می‌کند:

# ثبت آدرس فیزیکی و فعال‌سازی محافظت ضد جعل در لایه سخت‌افزار
ip link set dev enp4s0f0 vf 0 mac 52:54:00:12:34:01 spoofchk on trust off

# تعیین حداقل و حداکثر پهنای باند مجاز روی سیلیکون
ip link set dev enp4s0f0 vf 0 min_tx_rate 1000 max_tx_rate 5000

با فعال‌سازی گزینه spoofchk on، تراشه شبکه تمام بسته‌هایی که آدرس مبدأ آن‌ها با آدرس تأییدشده همخوانی نداشته باشد را بی‌درنگ کنار می‌گذارد و امنیت لایه فیزیکی را تثبیت می‌نماید.

پیوند مستقیم و بدون کپی داده‌ها با استفاده از Macvtap

در محیط‌های مبتنی بر کانتینر یا فضاهای نام شبکه لینوکس (netns)، انتقال کل کنترل کارت از طریق VFIO ممکن است انعطاف لازم را نداشته باشد. درایور Macvtap توازن مناسبی میان بهره‌وری سخت‌افزار و انعطاف نرم‌افزار ارائه می‌دهد.

درایور Macvtap جداسازی لینک در macvlan را با یک رابط کاراکتری (/dev/tapX) ادغام می‌کند. به جای عبور ترافیک از پل‌های نرم‌افزاری، Macvtap مستقیماً به توابع مجازی کارت شبکه وصل می‌شود.

+-------------------------------------------------------------------+
|                        فضای شبکه کاربر نهایی                      |
|                     دیمن مسیریابی / گیت‌وی VPN                    |
|                                 ^                                 |
|                                 | خواندن / نوشتن                  |
|                                 v                                 |
|                         فایل /dev/tapX                            |
+---------------------------------|---------------------------------+
                                  | سوکت داده مستقیم
+---------------------------------v---------------------------------+
|                        درایور هسته Macvtap                        |
|   - حذف سربار پل br0 و روتین‌های بررسی فایروال پل لینوکس          |
|   - دسته‌بندی مستقیم بسته‌ها بر پایه جدول سخت‌افزاری MAC          |
+---------------------------------|---------------------------------+
                                  | صف مستقیم سخت‌افزار
+---------------------------------v---------------------------------+
|                تابع مجازی SR-IOV (سخت‌افزار شبکه)                 |
+-------------------------------------------------------------------+

حالت‌های کاری مختلف درایور Macvtap

درایور Macvtap چندین حالت کاری ارائه می‌دهد که با دستور ip link قابل تنظیم است:

۱. حالت VEPA (تجمع‌کننده درگاه اترنت مجازی): در این حالت (mode vepa)، رابط‌های متصل به یک پورت فیزیکی مشترک حق تبادل مستقیم داده را ندارند. همه بسته‌ها ابتدا به سوئیچ فیزیکی بالادست فرستاده می‌شوند تا پس از بررسی قوانین امنیتی به مقصد بازگردند. این سازوکار برای شبکه‌های امن چندکاربره بسیار مناسب است. ۲. حالت Bridge: در mode bridge، تبادل اطلاعات میان رابط‌ها مستقیماً در حافظه هسته انجام می‌شود که سرعت را بالا می‌برد اما دامنه خطا را مشترک می‌سازد. ۳. حالت Passthru: در mode passthru، تمام پورت والد به یک نمونه اختصاص می‌یابد تا بیشترین کنترل سخت‌افزاری در دسترس باشد.

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

# ایجاد رابط Macvtap با حالت VEPA روی تابع مجازی
ip link add link enp4s0f0v0 name mvtap0 type macvtap mode vepa

# انتقال رابط ایجاد شده به فضای نام شبکه کاربر
ip link set dev mvtap0 netns tenant-alpha

# راه‌اندازی و تخصیص آدرس IP درون محیط ایزوله
ip netns exec tenant-alpha ip link set dev mvtap0 up
ip netns exec tenant-alpha ip addr add 198.51.100.2/24 dev mvtap0

با دسترسی به فایل /dev/tapX، برنامه‌های کاربردی می‌توانند از فراخوانی mmap() استفاده کنند تا نیاز به کپی‌های اضافه بین هسته و فضای کاربری برطرف شود.

ارتقای عملکرد در بستر معماری RiceGuard

در زیرساخت توزیع‌شده شبکه VPNRice، افزایش تراکم میزبانی روی هر سرور و مراقبت از حریم داده‌های کاربران هدف اصلی است. پروتکل RiceGuard ارتباط منسجمی میان SR-IOV و Macvtap برقرار کرده است.

+-------------------------------------------------------------------+
|                      سرور اختصاصی VPNRice                         |
|                                                                   |
|   +-----------------------------------------------------------+   |
|   |         کارت شبکه فیزیکی ۱۰۰ گیگابیت اینتل / ملانوکس       |   |
|   +-----------------------------------------------------------+   |
|         |                      |                      |           |
|         v                      v                      v           |
|   [VF 0: 25G]            [VF 1: 25G]            [VF 2: 50G]       |
|         |                      |                      |           |
|         v                      v                      v           |
|     Macvtap 0              Macvtap 1              Macvtap 2       |
|         |                      |                      |           |
|         v                      v                      v           |
|  +-------------+        +-------------+        +-------------+    |
|  | RiceGuard   |        | RiceGuard   |        | RiceGuard   |    |
|  | کاربر الف   |        | کاربر ب     |        | کاربر ج     |    |
|  | هسته پردازش |        | هسته پردازش |        | هسته پردازش |    |
|  | رمزنگاری    |        | رمزنگاری    |        | رمزنگاری    |    |
|  +-------------+        +-------------+        +-------------+    |
+-------------------------------------------------------------------+

۱. حذف تداخل میان کاربران گوناگون

سازوکارهای پیشین بر مبنای جدول اتصالات conntrack با افزایش نشست‌ها دچار اشباع حافظه می‌شدند. با اتکا به SR-IOV و Macvtap در وضعیت VEPA، تفکیک داده‌ها به صورت خودکار توسط ثبات‌های سخت‌افزاری انجام می‌شود. جهش ترافیکی یک کاربر، هیچ خللی در صف‌های DMA یا پایداری سایر بخش‌ها ایجاد نمی‌کند.

۲. بهره‌گیری از شتاب‌دهنده‌های فیزیکی کارت شبکه

اتصال سرویس‌های RiceGuard به توابع مجازی امکان محاسبه سخت‌افزاری مجموع وارسی (TCP/UDP Checksum Offload) و ترکیب بسته‌های حجیم (LRO/LSO) را حفظ می‌کند. تراشه شبکه بسته‌های ورودی را از طریق توزیع RSS بین هسته‌های پردازنده تقسیم می‌کند تا توان پردازشی به عملیات رمزنگاری ChaCha20-Poly1305 اختصاص یابد.

۳. جلوگیری پایدار از نشت داده‌ها

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