PBR

PBR یک ویژگی قدرتمند موجود در روترهای مدرن است که به مدیران شبکه اجازه می دهد تا کنترل دقیقی بر تصمیمات مسیریابی که در شبکه خود گرفته می شود اعمال کنند. برخلاف مسیریابی سنتی، که برای تعیین مسیر بسته‌ها صرفاً به آدرس‌های IP مقصد متکی است، PBR تصمیم‌گیری مسیریابی را بر اساس سیاست‌های تعریف شده توسط مدیران شبکه امکان‌پذیر می‌کند.

Policy-Based Routing بر اساس تعریف سیاست هایی عمل می کند که با معیارهای خاص در بسته ها مطابقت دارند، مانند source ip/port ، destination ip/port , protcol. هنگامی که یک بسته با یک سیاست تعریف شده مطابقت دارد، هدایت می شود تا یک مسیر مسیریابی سفارشی را دنبال کند و جدول مسیریابی معمولی را دور بزند. PBR را می توان در سناریوهای مختلفی استفاده کرد، از جمله:

  • load balancer در چندین اتصال ISP.

  • اجرای اقدامات امنیتی با هدایت ترافیک به سمت فایروال.

  • تغییر مسیر ترافیک برای بهینه سازی performance شبکه.

پیکربندی PBR

برای پیکربندی یک PBR، باید سیاست ها را تعریف کنیم. route-map برای تعریف معیارهای مسیریابی مبتنی بر سیاست استفاده می شود. می توانید با دستور route-map و سپس یک نام، یک route-map ایجاد کنید. اجازه دهید در این مثال آن را PBR-Map بنامیم:


Router(config)# route-map PBR-Map permit 10

  • PBR-Map: این نام route-map است. شما می توانید هر نامی را که دوست دارید انتخاب کنید.

  • permit 10: این یک sequence number است که ترتیب ارزیابی را تعیین می کند. ابتدا اعداد کوچکتر ارزیابی می شوند.

اکنون در route-map ایجاد شده، معیارهای مطابقت را تعریف می کنیم. معیارهای تطبیق برای سیاست را با استفاده از دستور match در route-map مشخص کنید. این معیار مشخص می کند که سیاست با چه نوع ترافیکی مطابقت دارد.

توجه

توجه داشته باشید که فقط دستور match ip address ACL_NAME می تواند برای PBR در route-map استفاده شود.

Router(config-route-map)# match ip address allow_sources
  • ip address allow_sources: این مشخص می‌کند که route-map باید با بسته‌هایی مطابقت داشته باشد که با لیست کنترل دسترسی (ACL) به نام allowed_sources مطابقت داشته باشد. مرحله بعدی، تعریف یک action است. برای مشخص کردن اقدامی که باید در هنگام match شدن ترافیک انجام شود، از دستور set در route-map استفاده کنید.

توجه

توجه داشته باشید فقط دستور set ip next-hop A.B.C.D می تواند برای PBR در route-map استفاده شود.

Router(config-route-map)# set ip next-hop 192.168.1.1
  • ip next-hop 192.168.1.1: این دستور next-hop را برای بسته های منطبق تنظیم می کند.

توجه

توجه داشته باشید اگر مشخص نشده باشد، hop بعدی از VRF پیش‌فرض جستجو می‌شود. برای تغییر این رفتار، کاربر می تواند از دستور ip next-hop vrf استفاده کند.

در نهایت، شما باید route-map را در interface، subinterface یا VLAN مربوطه که می‌خواهید PBR را پیاده‌سازی کنید اعمال کنید:

ip Policy route-map PBR-Map

  • PBR-Map: نام route-map را مشخص می‌کند که حاوی سیاست است. معیارها و اقداماتی که باید در مورد ترافیک اعمال شود.

توجه

توجه داشته باشید که سیاست‌ها برای ترافیک ورودی اعمال می‌شوند، بنابراین route-map باید بر روی رابط(های) داخلی تنظیم شود.

توجه

توجه بسته‌هایی که توسط دستگاه تولید می‌شوند، توسط سیاست مسیریابی نمی‌شوند.

مثال

در این مثال، ما PBR را برای مسیریابی ترافیک HTTP از طریق یک gateway خاص پیکربندی می کنیم در حالی که تمام ترافیک های دیگر از جدول مسیریابی معمولی استفاده می کنند.

فرضیات: روتر دارای دو رابط است: ge0 برای شبکه داخلی و ge1 برای شبکه خارجی. دروازه برای ترافیک HTTP 192.168.1.254 است و تمام ترافیک های دیگر از مسیریابی پیش فرض (192.168.1.1) پیروی می کنند. ما یک ACL تعریف می کنیم که به ترافیک TCP با آدرس IP منبع هر مشتری داخلی و یک پورت مقصد 80 (HTTP) اجازه می دهد:

Router(config)# ip access-list http_traffic
Router(config-nacl)# permit tcp any any eq http

یک route-map با sequence number 10 ایجاد شده است . که در آن ترافیک خاص با استفاده از ACL با نام http_traffic انتخاب می شود و nexht-hop آن به 192.168.1.254 تغییر می کند . دقت شود مبدا و مقصد بسته تغییری نمی کند و فقط next-hop تغییر می کند

Router(config)# route-map redirect_http permit 10
Router(config-route-map)# match ip address http_traffic
Router(config-route-map)# set ip next-hop 192.168.1.254

این policy به اینترفیس ge0 اعمال می شود(و فقط در جهت inbond و روی ترافیک ورودی به اینترفیس کار می کند) . بدین معنی که ترافیک http با استفاده از route-map تغییر next-hop انتقال می یابد و بقیه ترافیک ها به صورت عادی طبق جدول routing منتقل می شوند .

Router(config)# interface ge0
Router(config-if)# ip policy route-map redirect_http
Router(config)# ip route 0.0.0.0/0 192.168.1.1

مثال عملی

فرض کنید شبکه ای مانند شکل زیر داریم . در روتر n1 به صورت پیش فرض تمامی ترافیک از به سمت روتر n2 هدایت می شوند و default gateway ما می باشد . حال ما می خواهیم ترافیکی که از 1.1.1.10 به مقصد 2.1.1.10 انتقال می یابد از طریق فایروال (n3) انتقال پیدا کند و رول های مد نظر روی این ترافیک اعمال شود و مثلا دسترسی به برخی پورت ها را به این کاربر ندهد .

PBR

بدین منظور ما ابتدا یک ACL تعریف می کنیم تا ترافیک مد نظر بوسیله آن انتخاب کنیم . در مرحله بعد یک route-map تعریف کرده و مشخص می کنیم اگر ترافیک در ACL تطبیق پیدا کرد next-hop آن باید به 200.1.3.3 تغییر پیدا کند و به سمت فایروال هدایت شود و در نهایت این سیاست را روی اینترفیس ge2 که سر راه 1.1.1.10 هست اعمال می کنیم :

n1(config)# ip access-list pbr-acl
n1(config-nacl)# permit 1.1.1.10/32 2.1.1.10/32
n1(config-nacl)# q
n1(config)# route-map PBR_RMAP permit 10
n1(config-route-map)# match ip address pbr-acl 
n1(config-route-map)# set ip next-hop 200.1.3.3
n1(config-route-map)# q
n1(config)# int ge2
n1(config-if)# ip policy route-map PBR_RMAP 

برای حالت استفاده از vrf هم اگر فرض کنیم در n1 اینترفیس ge1 در vrf به نام green قرار دارد تنها در route-map باید vrfی که next-hop ما در آن قرار دارد را مشخص کنیم . و تنظیمات به شکل زیر خواهد بود :

n1(config)# ip access-list pbr-acl
n1(config-nacl)# permit 1.1.1.10/32 2.1.1.10/32
n1(config-nacl)# q
n1(config)# route-map PBR_RMAP permit 10
n1(config-route-map)# match ip address pbr-acl 
n1(config-route-map)# set ip next-hop vrf green 200.1.3.3
n1(config-route-map)# q
n1(config)# int ge2
n1(config-if)# ip policy route-map PBR_RMAP