يتطلب تشغيل بوابات الشبكات الافتراضية الخاصة (VPN) ذات الكثافة العالية وشبكات التراكب (Overlay Fabrics) في مراكز البيانات قدرات متقدمة لمعالجة عدد الحزم في الثانية (PPS) عبر الخوادم متعددة الأنوية. ومع توسع الروابط الفيزيائية إلى سرعات 40GbE و 100GbE، اصطدمت بروتوكولات الأنفاق التقليدية في الطبقة الثالثة (Layer 3) بعوائق عتادية تقيد كفاءة النظام.

تعتمد طرق التغليف التقليدية—مثل IP-in-IP (بروتوكول IP 4) و IPv6-in-IPv4 (بروتوكول IP 41) و GRE (بروتوكول IP 47)—على وضع الحزمة الداخلية مباشرة خلف ترويسة IP الخارجية. ورغم بساطة هذا التركيب، فإن غياب ترويسة طبقة النقل الرابعة (UDP أو TCP) يفرض قيوداً تشغيلية واضحة على العتاد الشبكي الحديث:

  1. تعطل موازنة الاستقبال العتادية (RSS): تعتمد بطاقات الشبكة (NIC) الحديثة على محركات تجزئة حسابية عتادية (خوارزمية Toeplitz) لتوزيع الحزم الواردة على عدة طوابير استقبال (RX queues) متصلة بأنوية المعالج المختلفة. وفي غياب منافذ الطبقة الرابعة، تضطر البطاقة لإجراء التجزئة اعتماداً على عناوين IP الخارجية فقط. ونتيجة لذلك، يتم توجيه كامل حركة النفق الضخمة نحو طابور استقبال مفرد ونواة معالجة وحيدة، مما يؤدي إلى اختناق مقاطعات النظام (softirq) وفقدان الحزم بينما تبقى سائر الأنوية في حالة خمول.
  2. خلل التوجيه متعدد المسارات (ECMP): تقوم محولات مراكز البيانات (Spine-Leaf) وموجهات الخطوط الرئيسية بموازنة الأحمال عبر مسارات متساوية التكلفة (ECMP) بالاعتماد على التجزئة الخماسية (عناوين IP، والبروتوكول، ومنافذ الإرسال والاستقبال). وبسبب غياب المنافذ، تحصر المحولات كامل حركة النفق في رابط فيزيائي واحد، مما يعطل استغلال سعة الألياف الضوئية المتاحة.

ولمعالجة هذا الاختناق، أدخلت نواة Linux تقنيتي Foo-over-UDP (FOU) والتغليف العام عبر UDP (GUE، المعتمد بموجب معيار IETF RFC 8150). فمن خلال إدراج البروتوكولات الشبكية داخل حزم UDP قياسية، تتيح Linux استغلال تسريع العتاد، وتوزيع الحمل عبر الأنوية، وتحقيق كفاءة عالية في التوجيه.

+--------------------------------------------------------------------------+
|          مقارنة بنية الحزم: النفق التقليدي IPIP مقابل FOU و GUE          |
+--------------------------------------------------------------------------+
|                                                                          |
| 1. نفق IP-in-IP التقليدي:                                                |
|    +-------------------+-----------------------------------------------+ |
|    | ترويسة IP الخارجية| الحزمة الداخلية (البيانات المنقولة)           | |
|    | البروتوكول: 4 IPIP| (لا توجد منافذ L4 لتفعيل التجزئة العتادية RSS)| |
|    +-------------------+-----------------------------------------------+ |
|                                                                          |
| 2. تقنية Foo-over-UDP (تغليف UDP مباشر دون ترويسات وسيطة):               |
|    +-------------------+-------------------+---------------------------+ |
|    | ترويسة IP الخارجية| ترويسة UDP (8 بايت| الحزمة الداخلية           | |
|    | البروتوكول: 17 UDP| منفذ مصدر ديناميكي| البروتوكول محدد بالمنفذ   | |
|    +-------------------+-------------------+---------------------------+ |
|                                                                          |
| 3. التغليف العام GUE (معيار RFC 8150):                                   |
|    +-------------------+-------------------+-------------+-------------+ |
|    | ترويسة IP الخارجية| ترويسة UDP (8 بايت| ترويسة GUE  | الحزمة      | |
|    | البروتوكول: 17 UDP| منفذ مصدر ديناميكي| 4 بايت (+)  | الداخلية    | |
|    +-------------------+-------------------+-------------+-------------+ |
|                                                                          |
+--------------------------------------------------------------------------+

آلية عمل تقنية Foo-over-UDP (FOU)

توفر تقنية Foo-over-UDP (FOU) تغليفاً مباشراً لبروتوكولات الطبقة الثالثة داخل ترويسة UDP قياسية دون إضافة حقول وسيطة. وتبدأ حمولة UDP مباشرة من البايت الأول لترويسة حزمة IP الداخلية.

التوليد الديناميكي لمنفذ المصدر

يكمن الابتكار الرئيسي لتقنية FOU في طريقة تحديد منفذ المصدر الخارجي لـ UDP (sport). فعند إرسال حزمة عبر نفق FOU، تحسب نواة Linux قيمة تجزئة مبنية على معاملات التدفق الداخلي (عناوين IP الداخلية والمنافذ الخاصة بجلسة المستخدم).

يتم بعد ذلك تحويل قيمة التجزئة إلى نطاق المنافذ المؤقتة (بين 32768 و 60999) واستخدامها كمنفذ مصدر خارجي:

  • يحصل كل اتصال TCP أو تدفق UDP داخلي للمستخدمين على منفذ مصدر خارجي متباين.
  • تقرأ المحولات والموجهات الوسيطة ترويسة UDP وتوزع التدفقات توازياً عبر روابط ECMP المتعددة.
  • تقوم بطاقة الشبكة في بوابة الاستقبال بفحص المعاملات الخمسة وتوجيه الحزم نحو طوابير RX المختلفة بواسطة تقنية RSS، مما يحقق توازناً متكاملاً بين أنوية المعالج.
+--------------------------------------------------------------------------+
|          توزيع التدفقات العتادي RSS عبر منافذ FOU/GUE الديناميكية        |
+--------------------------------------------------------------------------+
|                                                                          |
|   تدفقات المستخدمين داخل نفق VPN:                                        |
|   - تدفق A: 10.0.0.2:443 -> 10.0.0.8:5201  (تجزئة A -> منفذ: 41205)      |
|   - تدفق B: 10.0.0.3:80  -> 10.0.0.9:38192 (تجزئة B -> منفذ: 53891)      |
|   - تدفق C: 10.0.0.4:53  -> 10.0.0.10:53   (تجزئة C -> منفذ: 36712)      |
|                           │                                              |
|                           v (النقل عبر نفق فيزيائي جامع)                 |
|   الوصول إلى بطاقة الشبكة في بوابة الاستقبال                             |
|                           │                                              |
|                           v [تجزئة Toeplitz العتادية للمعاملات الخمسة]   |
|             ┌─────────────┼─────────────┐                                |
|             ▼             ▼             ▼                                |
|        [طابور RX 0]  [طابور RX 1]  [طابور RX 2]  (طوابير العتاد في NIC)  |
|             │             │             │                                |
|             ▼             ▼             ▼                                |
|          النواة 0      النواة 1      النواة 2   (سياق المقاطعات SoftIRQ) |
|                                                                          |
|   النتيجة: استغلال متساوٍ لكافة الأنوية وإنهاء اختناق النواة المنفردة    |
|                                                                          |
+--------------------------------------------------------------------------+

التغليف العام الموحد GUE (RFC 8150)

تعد تقنية FOU مثالية للروابط الثابتة المخصصة لبروتوكول واحد لكل منفذ، بينما تتطلب بيئات VPN المشتركة نقل بروتوكولات متنوعة وحمل بيانات تحكم تشغيلية. وهنا يأتي دور معيار Generic UDP Encapsulation (GUE، RFC 8150).

تضيف بنية GUE ترويسة مدمجة بحجم 4 بايت مباشرة بعد ترويسة UDP:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver|C|  Hlen   |  Proto/Ptype  |            Flags              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    حقول التوسعة الاختيارية                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

الحقول الأساسية في ترويسة GUE تشمل:

  • الإصدار (Ver, 2 بت): محدد بالقيمة 00b طبقاً لمعيار RFC 8150.
  • التحكم (C, 1 بت): للتمييز بين حزم البيانات (C=0) ورسائل التحكم التشغيلي والتشخيص (C=1).
  • طول الترويسة (Hlen, 5 بت): يحدد حجم حقول التوسعة بوحدات 32 بت.
  • نوع البروتوكول (Proto/Ptype, 8 بت): يحدد البروتوكول المنقول (4 لـ IPv4، و 41 لـ IPv6، و 47 لـ GRE).
  • أعلام التوسعة (16 بت): تتيح تفريغ حساب مجاميع التحقق عن بعد (RCO)، ونقل معرفات الشبكات الافتراضية (VNI)، وتتبع المسار.

مقارنة الخصائص التقنية: FOU مقابل GUE

+--------------------------------------------------------------------------+
|                  مقارنة المواصفات: تقنية FOU مقابل GUE (RFC 8150)        |
+--------------------------------------------------------------------------+
| المعيار التقني          | تقنية Foo-over-UDP     | تقنية GUE (RFC 8150)  |
+-------------------------+------------------------+-----------------------+
| الحجم الإضافي للترويسة  | 8 بايت فقط (UDP)       | 12+ بايت (UDP + GUE)  |
| تعدد البروتوكولات       | بروتوكول واحد لكل منفذ | متعدد البروتوكولات    |
| الحزم المدعومة          | IPv4, IPv6, GRE        | IPv4, IPv6, GRE, Eth  |
| إشارات التحكم والتشخيص  | غير مدعومة             | رسائل OAM مدمجة       |
| مجاميع التحقق CRC       | فحص UDP المعتاد        | تفريغ عن بعد (RCO)    |
| سهولة الإعداد           | بسيطة جداً             | مرونة تشغيلية عالية   |
| نطاق الاستخدام الأمثل   | روابط النقل المباشرة   | شبكات التراكب المعقدة |
+--------------------------------------------------------------------------+

خطوات التثبيت والتشغيل في Linux

يدعم نواة Linux الرسمية تقنيتي FOU و GUE عبر الوحدة البرمجية CONFIG_NET_FOU.

الخطوة الأولى: تحميل وحدات النواة المطلوبة

التأكد من تفعيل الوحدات الداعمة للأنفاق:

modprobe fou
modprobe ipip
modprobe ip_gre

الخطوة الثانية: إعداد نفق Foo-over-UDP (FOU)

تجهيز نفق FOU لنقل حزم IPv4 عبر منفذ UDP 5555:

# تسجيل منفذ الاستماع لبروتوكول IPv4 (ipproto 4)
ip fou add port 5555 ipproto 4

# إنشاء واجهة النفق المغلفة
ip link add name fou0 type ipip \
    remote 198.51.100.2 local 198.51.100.1 \
    ttl 64 \
    encap fou \
    encap-sport auto \
    encap-dport 5555 \
    encap-csum

# تعيين العنوان الداخلي وتشغيل الواجهة
ip addr add 10.200.1.1/30 dev fou0
ip link set dev fou0 up

تضمن المعاملة encap-sport auto توليد منافذ مصدر متغيرة تلقائياً بالاعتماد على تجزئة التدفق الداخلي، مما يفعل موازنة RSS في الطرف المستقبل.

الخطوة الثالثة: إعداد نفق Generic UDP Encapsulation (GUE)

تشغيل واجهة GUE متعددة البروتوكولات عبر المنفذ 6666:

# تسجيل منفذ استقبال بروتوكول GUE
ip fou add port 6666 gue

# إنشاء واجهة نفق GRE المغلفة داخل GUE
ip link add name gue0 type gre \
    remote 198.51.100.2 local 198.51.100.1 \
    ttl 64 \
    encap gue \
    encap-sport auto \
    encap-dport 6666 \
    encap-csum

# تفعيل الواجهة
ip addr add 10.200.2.1/30 dev gue0
ip link set dev gue0 up

الخطوة الرابعة: التحقق من ميزات التسريع العتادي

التأكد من دعم بطاقة الشبكة لتفريغ مهام تقطيع حزم UDP:

ethtool -k eth0 | grep -E "tx-udp_tnl|rx-udp_tunnel"

المخرجات القياسية المتوقعة:

tx-udp_tnl-segmentation: on
tx-udp_tnl-csum-segmentation: on
rx-udp_tunnel-port-offload: on

عند تفعيل هذه الخيارات، تتولى شريحة بطاقة الشبكة (ASIC) معالجة التجزئة وحساب مجاميع التحقق ذاتياً، مما يخفف العبء الحسابي عن المعالج المركزي.

التكامل مع بنية RiceGuard وخوادم VPNRice

في الشبكة العالمية لمنظومة VPNRice، تشكل تقنيتا FOU و GUE ركائز أساسية لنقل البيانات بين مراكز البيانات:

  1. التوزيع المتوازن عبر الأنوية: تجمع العقد الطرفية حركة المستخدمين المشفرة وتنقلها عبر قنوات الربط الرئيسية. وبفضل التغليف في UDP، تقوم ميزة RSS بتوزيع التدفقات بالتساوي على كافة الأنوية المتاحة، مما يحافظ على تدفقات تتجاوز 40 جيجابت/ثانية لكل خادم دون اختناق.
  2. الاستغلال الأمثل لمسارات Spine-Leaf: يتيح تنوع منافذ المصدر لموجهات ECMP توزيع الحزم بدقة على كافة مسارات الألياف الضوئية المتوازية، مما يمنع حدوث اختناقات في قنوات النقل.
  3. العبور الآمن عبر الشبكات الوسيطة: غالباً ما تواجه الحزم المجردة من منافذ L4 (مثل بروتوكول GRE النقي) قيوداً من بوابات CGNAT والجدران النارية. ويوفر التغليف داخل UDP عبوراً موثوقاً دون عوائق.

معايير تشغيلية للمنشآت الحية

عند تشغيل FOU و GUE في البيئات الإنتاجية، يجب الانتباه للضوابط التالية:

  • ضبط سعة MTU: يضيف التغليف 8 بايت (في FOU) أو 12 بايت (في GUE) بجانب ترويسة IP الخارجية. يجب ضبط قيمة MTU لواجهة النفق بين 1420 و 1440 بايت، أو تفعيل ضبط MSS التلقائي (TCPMSS --clamp-mss-to-pmtu).
  • فحص مجاميع التحقق في IPv6: يفرض معيار IPv6 وجود مجموع تحقق UDP سليم (RFC 8200). احرص دائماً على إضافة الخيار encap-csum لتفادي إسقاط الحزم من قبل الموجهات الوسيطة.
  • تثبيت الإعدادات عند إعادة التشغيل: لا يتم حفظ أوامر ip fou add تلقائياً بعد إعادة تشغيل الخادم. ينبغي تضمين الإعدادات ضمن خدمات الشبكة (systemd-networkd) أو نصوص الإقلاع التلقائية.

إن دمج FOU و GUE مع آليات التجزئة العتادية يمنح خوادم Linux كفاءة تضاهي أجهزة التوجيه المخصصة، مما يوفر أساساً متيناً لشبكات VPN الحديثة.