طرق استرداد عنوان IP المصدر للعميل

January 18, 2024

Technology

في بعض الحالات، تتطلب خدماتنا استخدام عنوان IP العميل لأسباب تجارية أو أمنية محددة. ومع ذلك، فإن السيناريو المعتاد يتضمن مرور حركة المرور عبر عدة شبكات، أو موازنات تحميل، أو خدمات وكيل قبل الوصول إلى الخدمة الفعلية. في كل طبقة من هذه العملية، قد يتم فقدان عنوان IP الأصلي للعميل، مما يترك خدمتنا مع عنوان IP للشبكة السابقة فقط. هذه النتيجة ليست مثالية بالنسبة لنا.

نظرًا للطبيعة المعقدة لتقنيتنا، فإن الحصول على عنوان IP العميل يتطلب استخدام طرق مختلفة، أحيانًا بشكل مشترك.

إدارة عنوان IP العميل عبر NAT

في بعض البنى التحتية لمراكز البيانات (IDC) التي تم إنشاؤها أو استئجارها من قبل المستخدمين، قد تقع خدماتنا في شبكة LAN منفصلة خلف بوابة. عندما يحاول العملاء الاتصال بخدماتنا من شبكة خارجية، يتم توجيه حركة المرور عبر البوابة.

قد يحدث سيناريو مشابه عند استخدام خدمات السحابة. تعمل شبكة VPC التي توفرها منصات السحابة العامة كشبكة LAN مستقلة، معزولة عن شبكات VPC الأخرى وعن الإنترنت. نتيجة لذلك، هناك حاجة إلى بوابة لتسهيل الوصول إلى الإنترنت الخارجي والاتصال بالخدمات الخارجية.

هذه البوابة، التي يمكن أن تكون جهاز توجيه أو جدار حماية، توفر عادةً خدمات ترجمة عنوان DNAT (Destination NAT) للخدمات الداخلية. يتضمن ذلك أن البوابة تحتفظ بواحد أو أكثر من عناوين IP العامة وتقوم بتوجيه حركة المرور من منافذ محددة على عنوان IP العام إلى منافذ محددة على عنوان IP داخلي. تدير البوابة توجيه حركة المرور وتعيين المنافذ. ومع ذلك، نظرًا لتعديل عنوان المصدر في رأس حزمة IP الأصلية بواسطة البوابة، يمكن لخدماتنا داخل الشبكة الداخلية فقط التعرف على عنوان IP الخاص بالبوابة، وليس عنوان العميل الفعلي.

تاريخيًا، كانت قدرات DNAT التي توفرها أجهزة الشبكات أو البرمجيات أساسية نسبيًا. كانت تعمل بشكل رئيسي في الطبقة الثالثة وافتقرت إلى القدرة على التعرف على الحمولات الأعمق ومعالجتها. كان الغرض الرئيسي منها هو تعريض الخدمات، ولم تكن قادرة على تمرير عنوان IP العميل إلى الأسفل. بالإضافة إلى ذلك، نظرًا للقيود على أداء هذه الأجهزة أو البرمجيات، كانت هناك قيود على عدد الاتصالات النشطة والحد الأقصى لعدد الاتصالات الجديدة التي يمكنها التعامل معها. كان التوسع بدون ترقية الأجهزة أمرًا صعبًا في كثير من الأحيان، مما جعلها أقل مرونة في البيئة الديناميكية اليوم.

لحل هذه القيود، نلجأ إلى موازنة التحميل، التي تمتلك قدرات أكثر تقدمًا في معالجة حركة المرور.

عنوان IP العميل في موازنة التحميل

بشكل عام، يتم تصنيف موازنة التحميل بشكل أساسي إلى نوعين بناءً على طبقة عملها: الطبقة الرابعة والطبقة السابعة، والتي تتوافق مع تدفقات بيانات TCP وحركة التطبيقات (الممثلة بـ HTTP) على التوالي.

على عكس بوابات IP، تمتنع موازنة التحميل عن تعديل رأس حزمة IP. على مستوى حزمة IP، تقوم فقط بالتمرير الشفاف. نتيجة لذلك، وعلى عكس DNAT الذي تمت مناقشته سابقًا، تضمن موازنة التحميل تمرير عنوان IP المصدر الموجود في حزمة IP بشكل صحيح إلى المكونات الموجودة خلف موازن التحميل.

بالنسبة لموازنة التحميل في الطبقة الرابعة، بعد إنجاز توجيه حركة المرور الأساسية، يمكن للخدمات اللاحقة استرداد عنوان IP العميل بدقة دون الحاجة إلى أي معالجة خاصة. في الحالات الاستثنائية، يمكنها الاستفادة من بروتوكول الوكيل (Proxy Protocol). يتضمن ذلك إضافة قسم جديد قبل الحمولة الأصلية لحركة المرور، والذي يتضمن عنوان IP العميل. يمكن بعد ذلك لخوادم الوكيل العكسي الأخرى أو الخدمة نفسها الموجودة خلف موازن التحميل تفسير بيانات بروتوكول الوكيل للحصول على عنوان IP العميل.

بالنسبة لموازنة التحميل في الطبقة السابعة، فإنها تمتلك قدرات أعمق في معالجة حركة المرور. يمكنها نقل عنوان IP المصدر مباشرة على مستوى بروتوكول HTTP. أحد الأساليب الشائعة هو استخدام رأس HTTP X-Forwarded-For. يقوم مكون موازنة التحميل باستخراج عنوان IP المصدر من حزمة IP لحركة المرور، ثم يقوم بتحليل وإعادة كتابة طلب HTTP. يقوم بإدخال حقل XFF جديد في رأس الطلب، متضمنًا قيمة عنوان IP العميل.

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

  • بدون متطلبات محددة، يمكن التعامل مع حركة المرور HTTPS كحركة TLS قياسية وتوجيهها مباشرة في الطبقة الرابعة. في هذا السيناريو، يمكن نقل عنوان IP العميل إلى الخدمة الموجودة خلف موازن التحميل عبر رأس حزمة IP.

  • عند الحاجة إلى وظائف الطبقة السابعة، يمكن استضافة شهادة TLS على مكون موازنة التحميل، مما يتيح إنهاء TLS. تتضمن هذه العملية إزالة تشفير TLS في طبقة موازنة التحميل، واستخدام HTTP عادي على الشبكة المحلية خلف موازن التحميل، أو إنشاء اتصال HTTPS جديد إلى الخدمة بدلاً من التوجيه المباشر. هذا يسمح لمكون موازنة التحميل بالتعامل مرة أخرى مع حركة HTTP الأصلية ومواصلة تمرير عنوان IP باستخدام طريقة XFF.

من خلال التعامل الدقيق مع حركة المرور، توفر موازنة التحميل طرقًا مختلفة لنقل عنوان IP العميل إلى الخدمة الخلفية. تشمل التطبيقات التمثيلية لمكونات موازنة التحميل خدمات ELB السحابية، وF5 BIG-IP القائمة على الأجهزة، وLinux Virtual Server (LVS) القائمة على نواة لينكس، وNGINX القائمة على برمجيات المستخدم.

Client_IP_1

نقل عنوان IP العميل في خدمات CDN

في بعض الأحيان، نستفيد من خدمات CDN التي توفرها منصات السحابة العامة لتعزيز سرعة وصول المستخدمين إلى خدماتنا. تعمل هذه الخدمات بشكل مشابه لخادم وكيل عكسي في الطبقة السابعة، ولكن في سياق أوسع، يمكن اعتبار شبكات CDN جزءًا من مجال موازنة التحميل.

توفر خدمات CDN عادةً قدرات إنهاء TLS ويمكنها تضمين عنوان IP العميل في طلبات HTTP المرسلة إلى الخدمة. على سبيل المثال، تدعم خدمة AWS CloudFront CDN تمرير عنوان IP العميل باستخدام طريقة XFF، مما يشبه الأسلوب المستخدم في موازنة التحميل في الطبقة السابعة.

استخدام بوابة API

بينما توفر مكونات موازنة التحميل عادةً قدرات تحكم أساسية في حركة المرور، يمكن أن تكون واجهات برمجة التطبيقات (APIs) التي توفرها موازنات التحميل السحابية أو القائمة على الأجهزة صعبة التطابق مع احتياجاتنا التجارية المحددة. في مثل هذه السيناريوهات، نلجأ إلى مكونات أكثر مرونة لتطبيق استراتيجيات مخصصة على خدماتنا. هنا تأتي بوابة API، مثل Apache APISIX أو API7 Enterprise، لتلعب دورًا.

يدعم APISIX وAPI7 Enterprise بروتوكول الوكيل، مما يتيح استرداد عنوان IP العميل من موازن التحميل.

علاوة على ذلك، يتميزان بملحق يسمى "real-ip"، يشبه وحدة ngx_http_realip_module في NGINX. يقوم هذا الملحق باسترداد عنوان IP العميل من مصدر واستخدامه للإرسال اللاحق والتسجيل. يعزز ملحق real-ip في APISIX وAPI7 Enterprise الوظائف الموجودة في NGINX. يسمح بتنشيط أو إلغاء تنشيط ميزة عنوان IP الحقيقي بشكل ديناميكي، ويوسع مصادر عنوان IP العميل بما يتجاوز قيود ngx_http_realip_module، التي تقتصر على رؤوس HTTP وبروتوكول الوكيل. يمكنه الاستفادة من أي متغير ممتد في NGINX أو APISIX، مثل معلمات الاستعلام أو حقول النموذج POST.

Client_IP_2

الخلاصة

من خلال الاستفادة من مجموعة من التقنيات في طبقات مختلفة، يمكننا نقل عنوان IP العميل بشكل فعال عبر كل مكون من مكونات الخدمة، مما يلبي الاحتياجات التجارية والأمنية.

لمعرفة المزيد عن حلول إدارة واجهات برمجة التطبيقات (API)، اتصل بـ API7.ai.

Tags: