1 בינו׳ 2015







BGP Regular Expression

התמונה באה להמחיש, זה לא מדענות חלל.. :)

בגדול בעולם שלנו (עולם התקשורת) ברוב המקרים אנחנו משתמשים בפונקציה זו על מנת לפלטר\למצוא ניתובים שנמצאים תחת (AS (Autonomous System מסוים בפרוטוקול BGP, לכן המאמר ברובו הולך להתייחס לשימוש שלנו באמצעות Regexp בתוך BGP.
** חשוב לציין כי דרושה היכרות עם פרוטקול BGP על מנת להבין לעומק את המדובר במאמר.

בתוך BGP אנחנו יכולים לבצע סינון למאפיין ה- AS_PATH מתבצע באמצעות Regular Expressions בתוך BGP.
ה-Regular Expressions תואם את ערך ה-AS_PATH, שדה ה- AS_PATH יכול להרכיב את האלמנטים הבאים כגון: AS_SET (רשימה לא מסודרת של מספרי ה-ASים), AS_SEQUENCE (רשימה מסודרת של ה-ASים), AS_CONFED_SET, AS_CONFED_SEQUENCE שזה אותו דבר רק פה זה בתוך Confederations .
על מנת לתחום את ערך מאפיין ה-AS_PATH יש להסתכל על הערך שמגיע מהשכן עם מספר
ה-AS משמאל לימין.

על מנת לתחום את הנתב שמייצר את הניתוב יש להסתכל מימין לשמאל בערך ה-AS_PATH.
·    כאשר תוחמים את ערך מאפיין ה-AS_SET יש לסגור את מספרי ה-AS בתוך סוגריים מסולסלות – {100,200,300}.
     כאשר תוחמים נתיב בתוך Confederation יש לסגור את מספרי ה-AS בתוך סוגריים תוך שימוש
    ב-Backslash על מנת להימנע מהשימוש המיוחד בתו -    "  \(100\) "  

אנחנו הולכים לדון בתבניות היעילות ביותר בעת שימוש ב- Regular Expressions אשר מתאימות לעולם האמיתי.


תחילה ניזכר בערכים הבסיסיים של Regular Expressions:

 " . " – נקודה – משמע כל ערך.
" ? " – סימן שאלה – משמע חזור על הערך הקודם פעם אחת או אפס פעמים.
 " * " – כוכבית – משמע חזור על הערך הקודם אפס או מספר פעמים.
  " + " – פלוס – משמע חזור על הערך הקודם פעם אחת או יותר.
  " ^ " -  פסיק עליון – תואם את תחילת הערך (הערך השמאלי ביותר).
   " $ " – דולר – תואם את סוף הערך (הערך הימני ביותר)
   " [ ] " – סוגריים מרובעות – משמע טווח של מספרים.
   " _ " – קו תחתון – משמע זהו תו שתואם לרווח שמפריד בין ASים או הסוף של רשימת ה-AS PATH.

     פונקציה נוספת וחשובה מאוד ב- Regular Expressions כולל יצירת קבוצות והתייחסות לאחור.
ישנה אפשרות להשתמש בסוגריים על מנת לתחום מספרי ASים בצורה הבאה: (123 124 1+)  ולכל קבוצה מוצמד מספר שמתחיל משמאל לימין.
לדוגמא הערך  1 2 (3 4) 5 6 (7 8)   הקבוצה הראשונה היא קבוצה מספר 1 והקבוצה השנייה היא מספר 2.
ניתן לאחר מכן להחזיר את הקיבוץ באמצעות פקודות \1   \2     וכו'.. עבור מספרי הקבוצות.


עכשיו ניקח דוגמאות פרקטיות:

·         ^$ - ערך זה משמעו- מאפיין ה- AS PATH ריק, מה שאומר – ניתובים שנוצרו ב-AS המקומי.

·         ^254_ - ערך זה משמעו ניתובים שנתקבלו ישירות מ-AS 254.
 יש לשים לב לקו התחתון " _ " שהוא חשוב מאוד, כיוון שיכול להיות
AS סמוך שמתחיל במספר 254.

·         _254_ - ערך זה משמעו ניתובים שעוברים דרך AS 254, סימן הקו התחתון מחייב על מנת להפריד בין ה-ASים.

·         _254$ - משמע ניתובים שנוצרו ב-AS 254 – הביטוי תואם את ה-AS הימני ביותר (שם נוצר הניתוב).

·         ^ ([0-9] +) _254 – משמע ניתובים מ-AS 254 רק כאשר הם במרחק של HOP אחד בלבד.

·         ^254_ ([0-9] +) – משמע ניתובים משכן שהוא מקושר ישירות (DC) ל-AS 254.

·         ^(254_) + ([0-9]+) – משמע ניתובים מהקליינטים הסמוכים ל-AS 254 עם לקיחה בחשבון ש-AS 254 מבצע Prepend

·         ^254_ ([0-9] +_) + - משמע ניתובים שמתקבלים מקליינטים של השכן הסמוך AS 254 תוך לקיחה בחשבון שהשכנים מבצעים AS PATH Prepending.

·         ^\ (65009\) – משמע ניתובים שנלמדו משכן Confederation Peerשמספרו הוא 65009.


שימוש ב- Regular Expressions מבוצע בתוך IP as-path access-list בצורה הבאה:

ip as-path access-list


ה-as-path acl יכול להיות מופעל על שכן מסויים אמצעות Filter-list בצורה הבאה:

neighbor x.x.x.x filter-list {in | out}


אך יחד עם זאת הגישה הטובה ביותר להפעיל את ה-as-path acl היא תחת RM בפקודה הבאה:

route-map AS_PATH permit 10
match as-path
חשוב לזכור!

ניתן לבדוק את Regular Expressions בתוך טבלת ה-BGP באמצעות הפקודות:

show ip bgp Regexp < string>

Or
show ip bgp quote-regexp
הפקודה השנייה מאפשרת שימוש בפייפ  | על מנת לפלטר תוצאות.

מקווה שעזרתי.
לכל שאלה ניתן לפנות אליי במייל.