الخلاصة

  • تفصل RFC 2784 بين delivery header وGRE header وpayload. تحدد القاعدة ذات الأربع octets نوع البروتوكول الداخلي، لكنها لا تقرر سبب النفق أو من يحق له استخدامه أو ما إذا كانت الحمولة آمنة.
  • شارك Tony Li في تأليف سجل GRE لعام 1994 ومواصفة Standards Track لعام 2000. تكشف RFCs اللاحقة عبء التشغيل: Key علامة للسياق وليس سراً، وSequence Number ينشئ state قابلة للهجوم، وحمل IPv6 يفرض اختبار MTU وحدود integrity بصورة مستمرة.

حين يحمل packet عنوانين مختلفين

عند ingress يصبح packet الأصلي payload. يسبقه GRE header، ثم يحيط بهما delivery header. يقرأ underlay الوجهة الخارجية وينقل البنية كلها إلى egress. هناك تُنزع الطبقات الخارجية ويعود العنوان الداخلي إلى توجيه packet.

توجد إذن ثلاثة سجلات لا يحل أحدها محل الآخر. يحدد delivery header طرفي النفق. يبين GRE نوع ما في الداخل والخيارات المستخدمة. ويحتفظ payload بالمصدر والوجهة ومدة الحياة ومعنى الطبقات الأعلى. يثبت وصول outer route أن الظرف بلغ المخرج فقط؛ لا يثبت وجود inner route ولا التفويض بعد decapsulation ولا مرور الحمولة بنقطة التفتيش الصحيحة.

نُشرت RFC 2784 على Standards Track في مارس 2000، وتحمل أسماء Dino Farinacci وTony Li وStan Hanks وDavid Meyer وPaul Traina. سبقتها Informational RFC 1701 لمؤلفيها Hanks وLi وFarinacci وTraina. ويوفر ملف Tony Li في IETF Datatracker هويته العامة وفهرس RFC والأدوار في النسخة المجمدة. يثبت ذلك مساهمة جماعية، لا اختراعاً منفرداً ولا جهة عمل حالية ولا سيطرة شخصية على tunnels عاملة.

الدلالة المرتبطة بالشخص أضيق: يظهر Li في الوصف العام الأول ثم في النص الذي صغّر النواة المشتركة. لم تكن المساهمة سلطة على كل استعمال، بل انضباطاً في ترك ما لا يحتاجه الطرفان خارج الرأس المشترك.

ظرف واحد بدلاً من مصفوفة أزواج

إذا احتاج كل payload protocol إلى طريقة مستقلة فوق كل delivery protocol، اتسعت التركيبات كمصفوفة. تصف RFC 2784 المسألة بأنها O(n²) وتعيد ترتيبها: payload، ثم GRE مشترك، ثم delivery.

ولا تدعي أن العمومية أفضل دائماً. فهي تتجاهل بعض الفروق الخاصة بالبروتوكولات، وقد يكون حل X over Y المخصص أنسب. والأهم أن النص يتعمد عدم تحديد متى ينبغي encapsulate packet. إنه يقدم grammar، لا مبرراً للنفق.

قد تصل مؤسسة شبكتين خاصتين، أو ينقل provider خدمة فوق underlay، أو يختبر مختبر بروتوكولاً لا يفهمه النقل. لا يمنح الشكل الصحيح شرعية لأي غرض. يبقى على المشغل تسمية المالك والطرفين والحمولات المقبولة والسعة وحد الأمن وشرط الإنهاء.

يخفض الظرف المشترك كلفة implementation والتنسيق، لكنه لا يتحمل leak أوblack hole أوinspection gap أوdependency منسية. من يوفر باستخدام GRE يبقى صاحب العواقب التشغيلية.

أربع octets لا تخفي سلطة

من دون optional checksum، يتألف الرأس الأساسي في RFC 2784 من كلمتين طول كل منهما 16 bit. تحمل الأولى checksum-present وreserved bits وversion، وتحمل الثانية Protocol Type، أي EtherType للحمولة. قيمة النسخة الأساسية صفر.

لا يوجد global tunnel ID أوowner أوpolicy أوroute أووعد بالتشفير أوservice level. يقول الرأس فقط كيف تُقرأ bytes التالية. ينبغي رفض Protocol Type غير المعروف. تُرسل reserved bits صفراً، وتُسقط مواضع قديمة غير صفرية عندما لا ينفذ المستقبل معناها القديم.

يضيف checksum أربع octets ويغطي GRE header وpayload بحساب Internet العادي. يمكنه كشف بعض التلف العرضي، لكنه لا يثبت المرسل ولا يخفي المحتوى ولا يمنح permission. صحة checksum ليست دليلاً على أن النفق موثوق.

المواصفة الدنيا ليست غموضاً. إنها صرامة في الحقائق القليلة التي يجب أن يشترك فيها الطرفان، ووضوح في أن ما عداها قرار محلي.

بعد فتح الظرف يعود المسار إلى الحمولة

إذا كان payload هو IPv4، تطلب RFC 2784 من egress أن يعتمد الوجهة الداخلية ويخفض TTL الداخلي. انتهت مهمة الوجهة الخارجية، فلا تحل محل routing semantics للحمولة.

وتحدد المواصفة حالة loop دقيقة. إذا كانت الوجهة الداخلية هي encapsulator في الطرف المقابل، فقد يعود packet إلى العلاقة نفسها ويجب إسقاطه. يخفي النفق topology عن الداخل، لكنه لا يلغي نتيجة الدوران.

يفرض ذلك طريقة مختلفة للتشخيص. قد يصل outer traceroute إلى egress ولا توجد inner route. وقد يبقى interface في حالة up فيما يُرفض payload بعد decapsulation. والعطل المنسوب إلى GRE قد يكون في underlay أوreturn path أوfilter أوMTU. يجب مراقبة السجلات الثلاثة منفصلة ثم ربطها بالpacket نفسه.

صغّرت المواصفة الجديدة المشترك

أتاحت RFC 1701 حقول Routing وKey وSequence وStrict Source Route وRecursion Control. أخذت RFC 2784 التقاطع الذي نفذته جهات متعددة فعلاً وأخرجت هذه الوظائف من base profile. المستقبل الذي لا يعلن تنفيذ السلوك القديم يرفض bits المقابلة عندما تكون غير صفرية.

لم يكن التطور إضافة features بلا نهاية. صار المعنى المشترك أقل لكي تتفق implementations مستقلة على عدد أقل من الدلالات بثقة أكبر. يمكن للحاجة الاختيارية أن تعود في extension موثقة بدلاً من التخمين في reserved space.

التوافق هنا حد رفض قابل للشرح. لا يعالج قبول layout مجهول اختلاف قدرات الطرفين. ينبغي إثبات capability pair، وتفعيل profile المتفق عليها وحدها، والاحتفاظ بـrollback يعيد parsing contract السابقة.

الحقل المسمى Key ليس مفتاح أمن

عرّفت RFC 2890، لمؤلفها Govindan Dommety لا Li، لاحقاً Key وSequence Number الاختياريين. يميز Key ذو الأربع octets flow أوcontext بين الطرفين؛ أما طريقة تخصيصه فخارج النطاق.

الاسم يوحي باستنتاج خاطئ يرفضه النص صراحة: لا يشارك Key في أي أمن. يستطيع اتفاق محلي استخدامه للتمييز بين customers أوservices، لكن من يقدر على تكوين GRE يستطيع نسخ الرقم أو اختراعه ما لم تحمه طبقة أخرى. إنه context label لا password.

يوفر Sequence Number تسليماً غير موثوق لكنه مرتب. يحتفظ المستقبل بآخر قيمة نجح في decapsulate، ويرفض الأقدم، وقد يستخدم buffer محدوداً للترتيب. يفيد بعض الحمولات لكنه ينشئ state لكل flow. ويمكن لرقم عالٍ محقون أن يجعل traffic شرعية تبدو قديمة.

تطلب RFC 2890 استخدام IPsec AH أوESP أمام هذا التهديد. وتحذر من تكرار وظيفة الترتيب حين تقوم بها طبقة أعلى أو تتحمل reordering. تشغيل optional bit يعني memory وbuffer وcounters وlogs وattack surface عند الطرفين.

توضع الفلترة حيث يظهر المعنى الداخلي

تقول RFC 2784 إن route filtering يظل قريباً من IPv4 العادي، لكن packet filtering يحتاج النظر داخل GRE أوالعمل عند endpoints. يمكن لـunderlay أن يسمح protocol 47 بين عنوانين بصورة صحيحة من دون معرفة البروتوكول أوالعنوان أوالمنفذ الداخلي.

تنقطع المسؤولية بسهولة هنا. يقول فريق النقل إن outer route مقيدة. ويقول فريق الأمن إن firewall يسمح GRE بين الطرفين فقط. ويفترض فريق الخدمة أن payload ورثت الإذنين. لكن أياً من الحقائق الخارجية لا يحدد ما يسمح به بعد decapsulation.

يسجل التصميم القابل للتدقيق inner prefixes والبروتوكولات المسموحة، ومكان decapsulation، ونقطة inspection، وما إذا كان IPsec مستخدماً فعلاً. GRE up ليست security status. الدليل هو policy الفعلية في الطبقتين على traffic شوهدت وهي تعبرهما.

حوّل IPv6 المسكوت عنه إلى gates للتفعيل

حددت RFC 7676، لمؤلفيها Carlos Pignataro وRon Bonica وSuresh Krishnan، IPv6 لاحقاً كـpayload أوdelivery protocol. ليست من أعمال Li، لكنها توضح كيف تولد التزامات محلية حين تقابل القاعدة النحيفة طبقة شبكة جديدة.

يجب أن يحمل النفق payload من IPv6 بحجم 1280 octets من ingress إلى egress من دون fragmentation للحمولة. يتحقق ingress قبل activation ودورياً بعدها، ويفعل أو يعطل وفق النتيجة. يساوي GMTU قيمة path MTU بين الطرفين ناقص delivery header وGRE overhead. وعند تجاوزها يُسقط packet في الحالات المبينة وتعود ICMPv6 Packet Too Big بالقيمة الممكنة.

لم يُلغ الرأس الصغير مشكلة الحجم. جعل overhead قابلة للحساب، وجعل الاختبار والfeedback مسؤولية الطرف. إذا ضاعت PTB نجحت probes الصغيرة وتوقفت flows الكبيرة وبقي control plane أخضر.

وللتكامل حد آخر. قد يقلل تعطيل GRE checksum حساباً مكرراً، لكن IPv6 delivery header لا يملك checksum خاصاً، وGRE لا يغطيه. تحلل RFC 7676 حالة نادرة: تتلف outer destination فيصل packet إلى VPN PE آخر؛ ومع private addresses متداخلة وstate مناسبة قد تدخل الحمولة VPN خاطئة. لا يجوز نشر GRE over IPv6 حيث لم يقبل operator هذا الخطر، ويمكن لـend-to-end authentication للحمولة أن يخففه.

لا تثبت RFC حدوث العطل في شبكة بعينها. إنها تفرض سؤالاً يجب أن يملك قرارَه شخص قبل الإنتاج. القدرة العامة على النقل لا تعني أمناً عاماً.

التنسيق النحيف يحتاج دليلاً كثيفاً عند الحافة

يقدم نص Lu Heng اللاحق Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption إطاراً تحليلياً لـSofia Ren. يمكن حصر المشترك في layout وversion وtype وextensions وrejection. وتحتفظ كل شبكة بحرية وواجب تقرير الغرض وendpoints وadmission وsecurity وretirement.

يرفع Running-Code Primacy مستوى الإثبات. Configuration object مجرد نية. أما السلسلة الفعلية فتربط outer route وflags المرسلة وProtocol Type وoverhead الفعلية وKey context وsecurity association وinner route وقرار filter وMTU feedback وcounters ونتيجة التطبيق.

نصا Heng إطار تحريري لاحق، لا دليل على نية Li الخاصة ولا على إجماع IETF خارج RFCs المذكورة. يساعدان في توزيع المسؤولية: المعيار يملك الظرف المشترك، وimplementation تملك parsing وstate، وoperator يملك كل سبب يسمح للظرف بأن يوجد.

استمر GRE لأنه لا يحكم payload. جعلته هذه الحدود قابلاً للنقل، لكنها تعني أيضاً أن لا مؤسسة داخل الأربع octets تنقذ deployment مهملاً. يستطيع الظرف حمل أي شيء تقريباً؛ ولا يستطيع إثبات ما ينبغي حمله إلا الطرفان.

المصادر