
مقال 6 دقائق للقراءة
درس: أساسيات BGP — التوجيه بين الأنظمة المستقلة
في الدرس اللي فات ضبطنا الـ QoS: عطينا الصوت والفيديو أولوية، ووزّعنا الباندويث بالعدل بين الفئات. لكن كل ده كان داخل شبكة تعرفها. والسؤال يقف عند الحدود: شبكتك كيف تعرف الطريق لبقية العالم؟
OSPF و EIGRP يحلّون التوجيه داخل المؤسسة، لكنهم ما ينفعون لربط مئات آلاف الشبكات المستقلة — لا في الحجم، ولا في الثقة بين الأطراف، ولا في السياسات. هذا شغل BGP، البروتوكول اللي يحمل جدول توجيه الإنترنت.
ثبّت هذا الفرق: البروتوكولات الداخلية تختار المسار الأسرع حسب مقياس. BGP يختار المسار الأفضل حسب سياسة — مع مَن أتعامل، وأي طريق أوثق، وأي مسار أرخص. BGP بروتوكول قرارات قبل ما يكون بروتوكول مسافات.
وهذا الدرس اللي بعده في الفهرس حقك: «أساسيات التوجيه المتقدم ومفاهيم BGP». خلّنا ننتقل إليه على طول.
1.المفاهيم الأساسية
النظام المستقل (AS) هو مجموعة شبكات تحت إدارة واحدة وسياسة توجيه واحدة، وله رقم مميز هو ASN. الأرقام من 1 إلى 64511 عامة تُمنح من جهة التسجيل، ومن 64512 إلى 65534 خاصة للتدريب. والترقيم الحديث 32-bit يتسع لملايين الأنظمة.
eBGP و iBGP — الفرق مش اسمي:
· eBGP بين أنظمة مستقلة مختلفة: المسافة الإدارية 20، والـ TTL الافتراضي 1، يعني الجارين لازم يكونون متصلين مباشرة. · iBGP بين راوترات داخل النظام نفسه: المسافة 200، والـ TTL 255، والجيران ما لازم يكونون متصلين مباشرة.
هذا الفرق هو سبب معظم أخطاء الإعداد اللي بتشوفها بعدين.
Path Vector: كل تحديث يحمل سلسلة الأنظمة اللي مرّ بها المسار، وهي AS_PATH. الراوتر يشوف «من وين جاي» مش «كم بعيد» بس.
منع الحلقات: لو الراوتر لقى رقم نظامه داخل AS_PATH يرفض التحديث على طول. ما يحتاج SPF ولا عدّ قفزات.
اتصال الجلسة: BGP يشتغل فوق TCP على المنفذ 179. Keepalive كل 60 ثانية، وHold 180 ثانية. لو الرسائل انقطعت الجلسة تنهار والمسارات تنهار معاها.
2.الرسائل والحالات
أربع رسائل بس: OPEN لتبادل الأرقام والقدرات، وUPDATE لحمل المسارات، وKEEPALIVE لإبقاء الجلسة، وNOTIFICATION لإغلاقها بخطأ.
والجلسة تمر بست حالات: Idle ثم Connect ثم Active ثم OpenSent ثم OpenConfirm ثم Established. خذ بالك: Active مش معناها «نشطة»، معناها إن الراوتر فشل في الاتصال ويحاول مرة ثانية. الجلسة السليمة تظهر دايماً Established.
3.سمات المسار (Attributes)
السمة معلومة بترافق المسار وبتتحكم في قرار الاختيار، وثلاث عائلات:
· إلزامية معروفة: AS_PATH وNEXT_HOP وORIGIN — كل راوتر BGP يفهمها. · تقديرية معروفة: LOCAL_PREF وATOMIC_AGGREGATE — تُستخدم في القرار، لكنها مش إلزامية في كل تحديث. · اختيارية: COMMUNITY وMED وAGGREGATOR — ممكن الجار ما يفهمهاش، فتُنقل أو تُسقط حسب نوعها.
LOCAL_PREF تفضيل داخلي داخل نظامك بس، وما يتبعتش لجيران eBGP. الأعلى أفضل، والافتراضي 100. هذا أقوى أداة عندك للتحكم في خروج حركة شبكتك.
MED (Multi-Exit Discriminator) إشارة للنظام المجاور: «استخدم المدخل هذا لو ينفع». الأقل أفضل، والافتراضي 0. مجرد اقتراح، والجار حر يتجاهله.
Weight سمة خاصة بـ Cisco، محلية على الراوتر نفسه وما تتبعتش لأي جار. الأعلى أفضل، وهي رافعة سريعة تقف في أعلى أولويات القرار.
4.BGP كيف يختار المسار؟
يقارن المسارات للوجهة بالترتيب هذا، ويتوقف عند أول فرق:
· أعلى Weight · أعلى LOCAL_PREF · مسار منشأ محلياً عبر network أو redistribute · أقصر AS_PATH · أدنى ORIGIN — IGP أفضل من EGP، وEGP أفضل من Incomplete · أدنى MED · eBGP قبل iBGP · أدنى مقياس IGP للوصول إلى NEXT_HOP · أقدم مسار، ثم أدنى Router ID، ثم أدنى عنوان جار
عملياً: LOCAL_PREF وAS_PATH هما الأداتين اللي بتستخدمهم في معظم الحالات.
5.قاعدتان تحكمان iBGP
الأولى: المسار المتعلَّم من جار iBGP ما يُعلنش لجار iBGP ثاني. هذه قاعدة split-horizon لمنع الحلقات، ونتيجتها إن iBGP يحتاج full mesh.
الثانية: الحل عند التوسع هو Route Reflector يعكس المسارات للعملاء، أو Confederation يقسّم النظام الواحد إلى أنظمة داخلية.
وما تنساش next-hop-self: راوتر الحافة لازم يعلن نفسه كـ next-hop لما يمرر مسار eBGP لجار iBGP.
6.الإعداد العملي على Cisco IOS
المثال: R1 في AS 65001 متصل بـ R2 في AS 65002 عبر 10.0.0.0/30، وكل راوتر يعلن شبكته الداخلية.
R1:
``` router bgp 65001 bgp log-neighbor-changes neighbor 10.0.0.2 remote-as 65002 network 192.168.1.0 mask 255.255.255.0 ```
R2:
``` router bgp 65002 bgp log-neighbor-changes neighbor 10.0.0.1 remote-as 65001 network 192.168.2.0 mask 255.255.255.0 ```
ثلاث ملاحظات تحمي إعدادك:
· أمر network ما يعلنش شيء لو البادئة مش موجودة فعلاً في جدول التوجيه بنفس القناع. ضيف مسار إلى Null0 أو أعلن واجهة نشطة. · رقم AS في remote-as لازم يطابق اللي الجار شايفه منك، وإلا الجلسة تبقى في Active. · الجار غير المتصل مباشرة ما يشتغلش افتراضياً، ويحتاج neighbor 10.0.0.2 ebgp-multihop 2.
7.التحقق
``` show ip bgp summary show ip bgp show ip bgp neighbors 10.0.0.2 show ip route bgp ```
في summary بص على عمود State/PfxRcd: رقم معناه عدد البادئات المستلمة والجلسة سليمة، وكلمة Active أو Idle معناها مشكلة اتصال.
8.التحكم في المسار — أهم أمرين
تفضيل مسار داخل نظامك:
``` route-map PREFER_IN permit 10 set local-preference 200 router bgp 65001 neighbor 10.0.0.2 route-map PREFER_IN in ```
إضعاف مسار تعلنه للخارج:
``` route-map WEAKEN_OUT permit 10 set as-path prepend 65001 65001 router bgp 65001 neighbor 10.0.0.2 route-map WEAKEN_OUT out ```
9.تحدي عملي في Packet Tracer
ابنِ ثلاثة راوترات: R1 في AS 65001، وR2 في AS 65002، وR3 في AS 65003. R2 في النص متصل بالطرفين.
- اربط كل زوج بجلسة eBGP صحيحة، وأعلن شبكة داخلية خلف كل راوتر.
- تحقق إن R1 يشوف شبكة R3 عبر AS_PATH يساوي 65002 65003.
- ضيف وصلة مباشرة بين R1 وR3، وأعلن الشبكة نفسها من الطرفين.
- استخدم LOCAL_PREF على R1 لتفضيل المسار المباشر، ثم اعكسه وأعد الفحص بـ show ip bgp.
- جرّب as-path prepend على R3 وأعد التتبع بـ traceroute.
المطلوب في النهاية: لقطة من show ip bgp تثبت إنك تحكمت في الاختيار، مش إنك قبلت اللي البروتوكول اختاره.
10.اختبار الدرس
- BGP يشتغل على أي طبقة وأي منفذ، وليه اتختار TCP؟
- إيه المسافة الإدارية لـ eBGP و iBGP؟
- ليه iBGP ما يعلنش مسار متعلَّم من iBGP لجار ثاني، وإيه الحلين؟
- راوتر في AS 65001 استقبل تحديث شايل AS_PATH: 65003 65001 65002. يعمل إيه وليه؟
- رتّب سمات القرار: AS_PATH وLOCAL_PREF وMED وWeight.
تحدٍ إضافي: جار eBGP بين راوترين يفصلهم راوتر وسيط. ليه الجلسة تفشل افتراضياً، وإيه الحل، وإيه الخطر الأمني اللي يترتب على الحل؟
الخلاصة
BGP يربط الأنظمة المستقلة، ويشتغل فوق TCP 179، ويحمل سلسلة AS_PATH لمنع الحلقات. eBGP للخارج وiBGP للداخل، ولكل واحد قواعده. القرار يبدأ بالوزن ثم LOCAL_PREF ثم طول المسار، والسياسة فيه أهم من الأداء. أتقن show ip bgp وshow ip bgp summary تبقى قادر تشخّص معظم أعطال الحدود في شبكتك.
