اذهب إلى المحتوى

مقدمة في التوجيه الشبكي في نظام التشغيل لينكس


زينب الزعيم

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

لا بد أن نضبط على أي حاسوب متصل بشبكة بعض تعليمات التوجيه لرزم packets الشبكة من نموذج TCP/IP التي يرسلها المضيف المحلي. تكون هذه العملية سهلةً عادةً لأن معظم البيئات الشبكية بسيطة جدًا، ولا يوجد إلا خيارين للرزم المغادِرة، فهي إما ترسَل إلى جهاز موصول على الشبكة المحلية أو على جهاز موجود في شبكة بعيدة.

نسمي الشبكة "المحلية" بالشبكة المنطقية logical، وأحيانًا نسميها أيضًا بالشبكة الفيزيائية physical التي يوجد المضيف المحلي local host فيها. تعود تسميتها بالشبكة المنطقية لأنها الشبكة الفرعية subnet المحلية التي يسنَد فيها IP من مجال عناوينها إلى المضيف، أما تسميتها بالفيزيائية لأن المضيف موصول إلى مبدل واحد switch أو أكثر، الذي يكون بدوره موصولًا مع بقية أجزاء الشبكة المحلية.

نموذج TCP/IP الشبكي

يفضَّل قبل البدء بالحديث عن التوجيه، فهم آلية إيجاد الرزم للمسار المؤدي إلى المضيف الصحيح على الشبكة. يعرّف نموذج TCP/IP الشبكي مجموعةً مؤلفةً من 5 طبقات تشرح آلية إرسال رزم البيانات من مضيف إلى آخر، سواءً كان المضيف الذي سيستقبل الرزم موصولًا على الشبكة المحلية أو في الطرف الآخر من العالم. سنذكر في الشرح التالي عن هذا النموذج رقم كل طبقة، وأسماء وحدات البيانات data units التي تعالجها هذه الطبقة.

الطبقة الخامسة: طبقة التطبيقات Application layer: الرسالة. تضم هذه الطبقة بروتوكولات الاتصال اللازمة لتواصُل تطبيقات الشبكة المختلفة، مثل بروتوكولات HTTP و DHCP و SSH و FTP و SMTP و IMAP وغيرها. عندما تطلب صفحة موقع من موقع إلكتروني بعيد، يرسَل طلب اتصال إلى خادم الويب web، ويعاد إرسال الرد إلى مضيفك ضمن هذه الطبقة، ثم يعرض المتصفح صفحة الموقع في نافذته.

الطبقة الرابعة: طبقة النقل Transport layer: مقطع TCP segment. توفر هذه الطبقة نقل البيانات من طرفٍ إلى طرف ودفق الخدمات الإدارية المنفصلة عن البيانات وأنواع البروتوكولات التي تنقََل. تستخدم المنافذ مثل المنفذ 80 لبروتوكول HTTP ومنفذ 25 لبروتوكول SMTP في إنشاء الاتصالات بين المضيف المرسل والمضيف البعيد.

الطبقة الثالثة: طبقة الإنترنت Internet layer: الرزمة. ينفَّذ توجيه الرزم في هذه الطبقة، فهي الطبقة المسؤولة عن توجيه الرزم عبر شبكتين أو أكثر حتى تصل إلى وجهتها النهائية. تستخدم هذه الطبقة عناوين IP وجدول التوجيه routing table في تحديد الجهاز التالي الذي سترسَل إليه الرزم، فإذا كان الجهاز التالي موجِّهًا، فإن كل موجه مسؤول عن إرسال رزم البيانات حصرًا إلى الموجه الذي يليه في المسار، وهو ليس مسؤولًا عن رسم كامل المسار بدءًا من المضيف المحلي وانتهاءً بالمضيف الوجهة. تتمحور معظم طبقة الإنترنت حول موجّهات تتواصل مع موجّهات أخرى لتحدد الموجه التالي في السلسلة.

الطبقة الثانية: طبقة ربط البيانات Data Link layer: الإطار Frame. تدير هذه الطبقة الاتصالات المباشرة بين العتاد الصلب للمضيفين في الشبكة المحلية أو المنطقية أو الفيزيائية الواحدة. تستخدم هذه الطبقة عناوين التحكم بالوصول إلى الوسط MAC المدمجة في بطاقات الشبكة NICs لتحديد الأجهزة الفيزيائية المتصلة بالشبكة المحلية. لا تستطيع هذه الطبقة الوصول إلى المضيفين غير المتصلين بالشبكة المحلية.

الطبقة الأولى: الطبقة الفيزيائية Physical layer: البتات Bits. هذه طبقة العتاد الصلب التي تتألف من بطاقات الشبكة وكبل الإيثرنت Ethernet الفيزيائي إضافةً إلى البروتوكولات التي تعمل على مستوى العتاد الصلب والتي تستخدَم في نقل البتات المنفردة التي تشكل أطر البيانات بين أي مضيفين أو بين عقد الشبكة الأخرى المتصلة محليًا.

مثال بسيط

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

  1. في طبقة التطبيقات سينشئ المتصفح رسالة طلب اتصال بالمضيف البعيد عن طريق بروتوكول HTTP، ولتكن www.example.com، ليعيد إرسال البيانات التي تكوِّن محتويات صفحة الموقع. هذه هي الرسالة التي لا تحتوي إلا على عنوان IP خادم الويب البعيد.
  2. تغلّف طبقة النقل الرسالة المتضمنة طلب صفحة الموقع في مخطط بيانات datagram من نمط بروتوكول TCP مع عنوان IP خادم الويب البعيد باعتباره الوجهة. أصبحت هذه الرزمة الآن تتضمن المنفذ port المصدر الذي سيولّد الطلب، الذي يكون عادةً منفذًا عشوائيًا برقم مرتفع، حتى تعلم البيانات التي يعاد إرسالها أي منفذ يستمع المتصفح إليه، والمنفذ الوجهة على المضيف البعيد (الذي يكون 80 في هذه الحالة)، وذلك إضافةً إلى رزمة الطلب الأصلية.
  3. تغلف طبقة الإنترنت مخطط بيانات TCP في رزمة تتضمن أيضًا كلًا من عنواني IP المصدر والوجهة.
  4. تستخدم طبقة ربط البيانات بروتوكول استبيان العناوين ARP لتحديد عنوان MAC الفيزيائي للموجه الافتراضي، وتغلف رزمة الإنترنت في إطار يتضمن كلًا من عنواني MAC المصدر والوجهة.
  5. يرسَل الإطار عبر سلك يكون عادةً CAT5 أو CAT6 من بطاقة شبكة المضيف المحلي إلى بطاقة شبكة الموجه الافتراضي.
  6. يفتح الموجه الافتراضي مخطط البيانات ليطلع على العنوان IP الوجهة، ثم يحدد الموجه عنوان IP الموجه التالي الذي سينقل الإطار إلى الخطوة التالية في رحلته عن طريق جدول التوجيه الخاص به. ثم يعيد الموجه تغليف الإطار بمخطط بيانات جديد يتضمن عنوان MAC الخاص به بصفته العنوان المصدر وعنوان MAC الخاص بالموجه التالي، ثم يرسله عبر الواجهة interface الصحيحة. يؤدي الموجه مهمته في التوجيه في الطبقة الثالثة وهي طبقة الإنترنت.

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

استخدم الأمر arp [-n]‎ لعرض جميع عناوين MAC المخزنة في جدول arp الخاص بمضيفك، ستكون دائمًا عناوين لمضيفين موصولين على شبكتك المحلية.

جدول التوجيه

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

يستخدم جدول التوجيه المشابه للجدول البسيط في النموذج الأول في تحديد المسار الوحيد المتاح للمضيف المحلي ولتحديد هل يجب إرسال الرزم إلى الموجه الذي يعد البوابة الافتراضية default gateway router. يعرض الأمر route -n جدول التوجيه، ومهمة الخيار n- أن لا تعرَض في النتيجة إلا العناوين IP دون أن يحاول إجراء بحث DNS عن أسماء المضيفين hostnames المرتبطة بتلك العناوين واستبدالها بها إن وجدت. يعرض الأمر netstat -rn نتائج مشابهة إلى حد كبير لنتائج الأمر route -n.

[root@host1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 eno1
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eno1

تكون القيمة في عمود الوجهة destination هي 0.0.0.0 دومًا للبواية الافتراضية عندما يستخدم خيار n-. أما في حال لم يستخدم هذا الخيار تظهر كلمة "Default" في عمود الوجهة في خرج الأمر. إن تحديد قناع الشبكة للبوابة الافتراضية بالقيمة 0.0.0.0 يعني أن أية شبكة غير مرسلة إلى الشبكة المحلية أو إلى موجه خارجي آخر حددناه بسطر توجيه إضافي خاص به في جدول التوجيه، سترسَل إلى البوابة الافتراضية بغض النظر عن فئة class هذه الشبكة.

يشير عمود Iface (اختصارًا لكلمة Interface واجهة) إلى بطاقة الشبكة للبيانات الصادرة، وهو في هذه الحالة eno1. أما بالنسبة للمضيفين الذي يؤدون وظيفة الموجه يحتمَل أن يكون لها بطاقتي شبكة على الأقل وأحيانًا أكثر. ستكون كل بطاقة شبكة مستخدمة كموجه موصولة بشبكة فيزيائية ومنطقية مختلفة. تشير الرايات في عمود Flag إلى أن سطر التوجيه فعّالًا UP بالراية (U)، وتحدد أي سطر مخصص للبوابة الافتراضية ويرمز بالراية (G). كما توجد عدة رايات أخرى.

إن تحديد مسارات التوجيه أمر شديد البساطة في معظم المضيفين:

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

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

إن النموذج الثاني التالي هو لجدول توجيه أعقد بعض الشيء، لأنه ينتمي إلى مضيف يعمل بنظام تشغيل لينكس ويؤدي وظيفة موجه موصول بثلاث شبكات، تفضي إحداها إلى شبكة الإنترنت. إن الشبكتين المحليتين من الفئة C وهما: 192.168.0.0/24 على الواجهة eth1، والشبكة 192.168.25.0/24 على الواجهة eth2، لكل منهما أسطر توجيه في جدول التوجيه، إضافةً إلى المسار الافتراضي default route الذي يفضي إلى بقية العالم على الواجهة eth0.

[root@host2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use  Iface
192.168.1.24        0.0.0.0         255.255.255.252    U       0          0       0    eth0
192.168.0.0         0.0.0.0          255.255.255.0       U       0          0       0    eth1
192.168.25.0        0.0.0.0         255.255.255.0       U       0          0       0    eth2
0.0.0.0            192.168.1.25       0.0.0.0                UG     0           0      0    eth0

لاحظ أنه لا يزال لدينا بوابة افتراضية واحدة فقط وهي على الواجهة eth0. لكن إضافةً إلى سطر المسار الافتراضي الذي يشير مباشرةً إلى عنوان IP الموجه من طرف الشبكة المحلية LAN، يوجد أيضًا سطر لكامل الشبكة التي عنوانها 192.168.1.24/30. لا تتضمن هذه الشبكة إلا عنوانين يمكن استخدامهما، أحدهما 192.168.1.25/30 المخصص لطرف الشبكة المحلية على الموجه، والآخر 192.168.1.26/30 مخصص للمضيف نفسه.

ضبط التوجيه

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

في معظم الحالات يكون ضبط المسار الافتراضي في جدول التوجيه من خلال إضافة المسار الافتراضي إلى ملف ‎/etc/sysconfig/network مثل النموذج التالي:

GATEWAY=192.168.0.1

لا نضبط في ملف network إلا البوابة الافتراضية.

أما النهج الآخر المتَّبع في ضبط البوابة الافتراضية يدويًا هو إضافتها إلى ملف إعدادات الواجهة interface المناسب في مجلد ‎/etc/sysconfig/network-scripts. فمثلًا لضبط بوابة لملف إعدادات الواجهة eth0 نضيف السطر ذاته الذي أضفناه في النموذج السابق إلى ملف ifcfg-eth0. إذا أضفنا السطر هنا علينا أن نحذفه من ملف network.

أما في البيئات الأكثر تعقيدًا، مثل البيئة التي يكون فيها الحاسوب المضيف موصولاً لأكثر من شبكة باستخدام أكثر من بطاقة شبكة، وعندما يكون علينا إدخال سطري توجيه على الأقل إلى جدول التوجيه، وغالبًا تكون أكثر سطرين، يجب أن تستخدم ملف توجيه route في مجلد ‎/etc/sysconfig/network-scripts. إذا كانت بطاقة الشبكة enp7s1 سيكون ملف التوجيه route-enp7s1 وسنضيف إليه المُدخَل الموضَّح في النموذج التالي:

default via 192.168.0.1 dev enp7s1

ستنفَّذ عندها إعدادات البوابة الافتراضية في ملفات route-interface وسيتم تجاهل أية إعدادات للبوابة الافتراضية مذكورة في ملف network.

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

route del default
route add default gw 192.168.0.1

لاحظ أن ذكر اسم الجهاز اختياري في جميع الأوامر التي ذكرناها، ولم أستخدمه ضمن النص البرمجي.

الخاتمة

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

ترجمة -وبتصرف- للمقال ‎An introduction to Linux network routing لصاحبه.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...