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 بنامیم:

route-map PBR-Map permit (1-65535)

یک route-map با نام مشخص و sequence number داده‌شده ایجاد می‌کند یا وارد حالت پیکربندی آن می‌شود.

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

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

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

توجه

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

match ip address ACL_NAME

در route-map مربوط به PBR، ترافیک را بر اساس ACL مشخص‌شده match می‌کند.

  • ACL_NAME: نام ACL که باید برای match کردن ترافیک استفاده شود (برای مثال allowed_sources). مرحله بعدی، تعریف یک action است. برای مشخص کردن اقدامی که باید در هنگام match شدن ترافیک انجام شود، از دستور set در route-map استفاده کنید.

توجه

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

set ip next-hop A.B.C.D

next-hop را برای بسته‌های منطبق تنظیم می‌کند.

  • ip next-hop 192.168.1.1: این دستور next-hop را برای بسته‌های match‌شده روی 192.168.1.1 تنظیم می‌کند.

توجه

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

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

ip policy route-map PBR-Map

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

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

:class: note توجه داشته باشید که سیاست‌ها برای ترافیک ورودی اعمال می‌شوند، بنابراین 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 انتخاب می‌شود و next-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 اعمال می‌شود (و فقط در جهت inbound و روی ترافیک ورودی به اینترفیس کار می‌کند). بدین معنی که ترافیک 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