9.7. الشبكات الخاصة وترجمة عناوين الشبكة (NAT)

صُمّم IPv4 ليوفر أربعة مليارات عنوان، وهو ما بدا كافيًا في حينه. لكنه ليس كذلك. فكل منزل ومكتب ومصنع متصل بالإنترنت يحتاج إلى كتلة خاصة به من العناوين لأجهزته الداخلية، وإضافة ما يعادل كاميرات العالم وهواتفه وأجهزته لا يترك أربعة مليارات عنوان كافية للجميع.

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

9.7.1. نطاقات العناوين الخاصة

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

  • 10.0.0.0 -- 10.255.255.255 (16 مليون عنوان؛ شائعة في الشبكات المؤسسية الكبيرة).

  • 172.16.0.0 -- 172.31.255.255 (نحو مليون عنوان؛ أقل شيوعًا في الواقع العملي).

  • 192.168.0.0 -- 192.168.255.255 (65 ألف عنوان؛ النطاق الافتراضي لكل موجّه منزلي تقريبًا).

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

9.7.1.1. كيف يُستخدم قناع الشبكة

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

  • إذا كانت الوجهة تشترك في بتات الشبكة مع عنوان الكاميرا نفسها، فإن الوجهة على الشبكة المحلية نفسها. وعندها ترسل الكاميرا الحزمة إليها مباشرة.

  • إذا كانت الوجهة لا تشترك في بتات الشبكة، فلا بد أنها على شبكة أخرى. وعندها ترسل الكاميرا الحزمة إلى البوابة الافتراضية الخاصة بها (الموجّه الذي يُهيَّأ تلقائيًا عند إنشاء الوصلة) وتترك البوابة تتولى البقية.

ذلك الاختبار الوحيد -- "هل نشترك في بتات الشبكة؟" -- هو الغرض من قناع الشبكة. وهو أيضًا السبب في أن الشبكات المنزلية تعتمد افتراضيًا على /24: فحدٌّ أقصى قدره 254 جهازًا يناسب أسرة بكل أريحية ويُبقي الشبكة بسيطة.

9.7.2. ترجمة عناوين الشبكة (Network Address Translation)

لا تستطيع كاميرا على العنوان 192.168.1.50 أن ترسل ببساطة حزمة إلى خادم على الإنترنت العام -- فالإنترنت العام لا يوجّه إلى 192.168.x.x. ويحل الموجّه المنزلي ذلك عبر ترجمة عناوين الشبكة أو NAT، ويفعل ذلك بشفافية.

A diagram with three blocks. On the left, two devices on a private network labelled "camera 192.168.1.50" and "laptop 192.168.1.51", both connected to a central box labelled "router". The router has two faces -- a private face labelled "192.168.1.1" toward the devices, and a public face labelled "203.0.113.5" toward the internet. The internet is drawn as a cloud on the right. Arrows from the devices pass through the router and emerge as if from the public address.

تعيد NAT كتابة عنوان المصدر للحزم الصادرة إلى العنوان العام للموجّه، وتعكس إعادة الكتابة على الردود الواردة، فتبدو الأجهزة الخاصة وكأنها تتشارك عنوانًا عامًا واحدًا.

للموجّه عنوانان: عنوان خاص على الشبكة المحلية (وهو عادة 192.168.1.1) وعنوان عام يخصصه مزود خدمة الإنترنت. وعندما ترسل الكاميرا حزمة إلى عنوان عام، فإن الموجّه

  1. يسجّل عنوان الكاميرا الخاص + المنفذ ويقرنه بمنفذ صادر مؤقت خاص به؛

  2. يعيد كتابة عنوان المصدر على الحزمة إلى عنوانه العام الخاص (ومنفذ المصدر إلى المنفذ الصادر المختار)؛

  3. يرسل الحزمة المعاد كتابتها عبر الجهة العامة.

وعندما يعود الرد موجَّهًا إلى عنوان الموجّه العام + المنفذ، يبحث الموجّه عن الاقتران، ويعيد كتابة الوجهة لتعود إلى عنوان الكاميرا الخاص + المنفذ، ويسلّمه على الجهة المحلية. ولا تعلم الكاميرا قط أن إعادة الكتابة قد حدثت؛ ولا يعلم الخادم قط بالمصدر الأصلي.

إن NAT هي ما يجعل الشبكات المنزلية عملية. ولها أيضًا نتيجتان جديرتان بالمعرفة.

9.7.3. ما الذي تغيّره NAT

الاتصال الصادر سهل. فالكاميرا الموجودة على شبكة خاصة تستطيع التحدث إلى الخارج بحرية. ففي كل مرة تفتح فيها اتصال TCP أو ترسل حزمة UDP إلى خادم بعيد، تُنشئ NAT الاقتران تلقائيًا. ومعظم تطبيقات الكاميرا تعمل في هذا الاتجاه: التقاط صورة، ودفعها إلى خادم ما، واستقبال الرد.

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

ثمة ثلاثة حلول بديلة شائعة لحالة الاتصال الوارد، مرتّبة تقريبًا بترتيب تصاعدي من حيث العملية:

  • إعادة توجيه المنفذ (Port forwarding). هيّئ الموجّه لتوجيه كل الحزم الواردة على منفذ عام مختار إلى جهاز خاص محدد. ويتطلب ذلك صلاحية وصول إدارية إلى الموجّه؛ وهو هشّ عندما يتغير العنوان العام للموجّه.

  • VPN. شغّل شبكة خاصة افتراضية تضع الكاميرا على الشبكة المنطقية نفسها التي يقع عليها من يحتاج إلى الوصول إليها. وهي ثقيلة؛ وخارج نطاق معظم عمليات نشر الكاميرا.

  • اتصال يبدأ من الخارج. تتصل الكاميرا بخادم معروف في مكان ما على الإنترنت العام وتُبقي ذلك الاتصال مفتوحًا؛ ويستخدم الخادم الاتصال القائم لدفع الرسائل إليها. هكذا تعمل الإشعارات الفورية ومعظم بروتوكولات الأجهزة المتصلة بالسحابة، وهو النمط الذي ينتهي معظم تطبيقات الكاميرا إلى استخدامه.

إن NAT غير مرئية لشيفرة Python على الكاميرا. فالبرنامج النصي يتحدث ببساطة إلى أي وجهة يحتاجها؛ والموجّه يتولى الترجمة خلف الكواليس. لكن اتجاه الاتصال يهمّ فعلًا، وNAT هي السبب في أن نمط "الكاميرا تمدّ يدها إلى خادم سحابي" أيسر بكثير من نمط "خادم سحابي يمدّ يده إلى الكاميرا".