Policy Based Routing (PBR) в примерах

Опубликовано admin в Сб, 19/06/2010 - 16:25


Что такое PBR?

PBR или Policy Based Routing предоставляет механизм реализации пересылки (forwarding)/ маршрутизации(routing) пакетов данных, основанный на политике, представляющей собой набор правил, определенной администраторами сети. Это предоставляет более гибкий механизм для обработки пакетов на маршрутизаторах, дополняя существующий механизм, предоставленный протоколами маршрутизации. Маршрутизаторы выбирают дальнейший путь следования пакетов данных по полю "адрес назначения", основываясь на информации из таблицы статических маршрутов или полученной от динамических протоколов маршрутизации, как, например Routing Information Protocol (RIP), Open Shortest Path First (OSPF), или Enhanced Interior Gateway Routing Protocol (Enhanced IGRP). Вместо выбора дальнейшего маршрута, основанного на адресе назначения, PBR позволяет администраторам сети определить свои правила, по которым будет осуществляться маршрутизация пакетов.

Наиболее часто на практике PBR используется в ситуации, которая представлена на рисунке.
 

Policy Based Routing (PBR) в примерах


Маршрутизатор R1 имеет два канала подключения к R2. В стандартном случае один канал является основным, а второй - вспомогательным (он подключается, когда неисправен первый канал). При таком варианте эффективность использования двух каналов чрезвычайно низка. Конечно, и такой вариант имеет право на существование, но рано или поздно перед развивающейся организацией появляется задача более эффективного использования имеющихся каналов или, возможно, разделения этих каналов между своими отделами (например, отдел производства будет использовать канал 1, а отдел маркетинга - канал2). Именно в этом случае на помощь приходит policy-based routing.


В данной статье мы рассмотрим работу PBR с двумя командами set ip default next-hop и set ip next-hop. Команда set ip default next-hop проверяет существование адреса назначения в таблице маршрутизации и
 
  • если адрес назначения существует, то команда не выполняет маршрутизацию пакета, вместо это пакет перенаправляется в соответствие таблице маршрутизации.
     
  • если адрес назначения не существует, команда маршрутизирует пакет, посылая его на указанный next-hop.
     


Команда set ip next-hop проверяет существование указанного next-hop и
 
  • если next-hop существует в таблице маршрутизации, тогда пакет направляется на этот next-hop.
     
  • если next-hop не существует в таблице маршрутизации, пакет перенаправляется в соответствие с таблицей маршрутизации.
     

 

Пример 1: PBR используя set ip default next-hop с протоколом динамической маршрутизации


Конфигурация R1
<!--code1-->
<!--ecode1-->interface Ethernet0/0
ip address 100.100.100.1 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.1 255.255.255.0
!
interface Serial2/0
ip address 20.20.20.1 255.255.255.0
!
router ospf 1
  
!--- OSPF не настроен на Serial1/0.

log-adjacency-changes
network 20.20.20.0 0.0.0.255 area 0
network 100.100.100.0 0.0.0.255 area 0
!
ip classless
no ip http server
!
access-list 100 permit ip host 100.100.100.3 host 200.200.200.4
!
route-map blah permit 10
match ip address 100
set ip default next-hop 10.10.10.2
.
.
end<!--code2-->
<!--ecode2-->

Конфигурация R2
<!--code1-->
<!--ecode1-->!
interface Ethernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.2 255.255.255.0
fair-queue
!
interface Serial2/0
ip address 20.20.20.2 255.255.255.0
!
router ospf 1

!--- OSPF не настроен  на Serial1/0.

log-adjacency-changes
network 20.20.20.0 0.0.0.255 area 0
network 200.200.200.0 0.0.0.255 area 0
!
ip classless
no ip http server
!
access-list 100 permit ip host 200.200.200.4 host 100.100.100.3
!
route-map blah permit 10
match ip address 100
set ip default next-hop 10.10.10.1
!
end<!--code2-->
<!--ecode2-->

Когда маршрут назначения присутствует в таблице маршрутизации, используется обычный роутинг, маршрутизирующая политика не работает
<!--code1-->
<!--ecode1-->R1# show ip route 200.200.200.4
   Routing entry for 200.200.200.0/24
   Known via "ospf 1", distance 110, metric 74, type intra area
   Last update from 20.20.20.2 on Serial2/0, 00:11:48 ago
   Routing Descriptor Blocks:
   * 20.20.20.2, from 30.30.30.3, 00:11:48 ago, via Serial2/0
   Route metric is 74, traffic share count is 1

R1# debug ip policy
Policy routing debugging is on
*Dec 4 12:50:57.363: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 4 12:50:57.363: IP: route map blah, item 10, permit
*Dec 4 12:50:57.363: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial2/0), len 100, policy rejected -- normal forwarding
<!--code2-->
<!--ecode2-->

Смотрим на R2
<!--code1-->
<!--ecode1-->R2# show ip route 100.100.100.3
Routing entry for 100.100.100.0/24
  Known via "ospf 1", distance 110, metric 74, type intra area
  Last update from 20.20.20.1 on Serial2/0, 00:11:42 ago
  Routing Descriptor Blocks:
  * 20.20.20.1, from 100.100.100.1, 00:11:42 ago, via Serial2/0
      Route metric is 74, traffic share count is 1

R2# debug ip policy
Policy routing debugging is on
*Dec 4 12:50:57.779: IP: s=200.200.200.4 (Ethernet0/0), d=100.100.100.3, len 100, policy match
*Dec 4 12:50:57.779: IP: route map blah, item 10, permit
*Dec 4 12:50:57.779: IP: s=200.200.200.4 (Ethernet0/0), d=100.100.100.3 (Serial2/0), len 100, policy rejected -- normal forwarding
<!--code2-->
<!--ecode2-->

Когда упадет Serial2/0 и адрес назначения исчезнет из таблицы маршрутизации пакет будет направляться в соответствие с роутинговой политикой.
<!--code1-->
<!--ecode1-->R1# show ip route 200.200.200.0
% Network not in table
R1#
*Dec 5 13:26:27.567: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 5 13:26:27.567: IP: route map blah, item 10, permit
*Dec 5 13:26:27.567: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial1/0),len 100, policy routed
<!--code2-->
<!--ecode2-->

 

Привет 2. PBR с set ip next-hop с динамическим протоколом


В этом примере на маршрутизаторах R1 и R2 работает протокол динамической маршрутизации OSPF. Поэтому R2 знает о сетях R1, т.е. сети R1 присутствуют в таблице маршрутизации R2.

Конфигурация R1
<!--code1-->
<!--ecode1-->interface Ethernet0/0
ip address 100.100.100.1 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.1 255.255.255.0
!
interface Serial2/0
ip address 20.20.20.1 255.255.255.0
!
router ospf 1

!--- OSPF не настроен на Serial1/0.

log-adjacency-changes
network 20.20.20.0 0.0.0.255 area 0
network 100.100.100.0 0.0.0.255 area 0
!
ip classless
no ip http server
!
access-list 100 permit ip host 100.100.100.3 host 200.200.200.4
!
route-map blah permit 10
match ip address 100
set ip next-hop 10.10.10.2
.
end<!--code2-->
<!--ecode2-->

Конфигурация R2
<!--code1-->
<!--ecode1-->interface Ethernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.2 255.255.255.0
fair-queue
!
interface Serial2/0
ip address 20.20.20.2 255.255.255.0
!
router ospf 1

!--- OSPF не настроен Serial1/0.

log-adjacency-changes
network 20.20.20.0 0.0.0.255 area 0
network 200.200.200.0 0.0.0.255 area 0
!
ip classless
no ip http server
!
access-list 100 permit ip host 200.200.200.4 host 100.100.100.3
!
route-map blah permit 10
match ip address 100
set ip next-hop 10.10.10.1
!
end<!--code2-->
<!--ecode2-->

Проверим существование следующего хопа, 10.10.10.2 в таблице маршрутизации. Если маршрут назначения существует , пакет направляется в соответствие роутинговой политикой, если next-hop достижим.

<!--code1-->
<!--ecode1-->R1# show ip route 200.200.200.4
Routing entry for 200.200.200.0/24
  Known via "ospf 1", distance 110, metric 74, type intra area
  Last update from 20.20.20.2 on Serial2/0, 00:11:48 ago
  Routing Descriptor Blocks:
  * 20.20.20.2, from 30.30.30.3, 00:11:48 ago, via Serial2/0
      Route metric is 74, traffic share count is 1

R1# debug ip policy
Policy routing debugging is on
*Dec 4 12:53:38.271: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 4 12:53:38.271: IP: route map blah, item 10, permit
*Dec 4 12:53:38.271: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial1/0), len 100, policy routed
<!--code2-->
<!--ecode2-->

На втором маршрутизаторе:
<!--code1-->
<!--ecode1-->R2# sh ip route 100.100.100.3
Routing entry for 100.100.100.0/24
  Known via "ospf 1", distance 110, metric 74, type intra area
  Last update from 20.20.20.1 on Serial2/0, 00:11:42 ago
  Routing Descriptor Blocks:
  * 20.20.20.1, from 100.100.100.1, 00:11:42 ago, via Serial2/0
      Route metric is 74, traffic share count is 1

R2# debug ip policy
Policy routing debugging is on
*Dec  4 12:53:38.691: IP: s=200.200.200.4 (Ethernet0/0), d=100.100.100.3, len 100, policy match
*Dec  4 12:53:38.691: IP: route map blah, item 10, permit
*Dec  4 12:53:38.691: IP: s=200.200.200.4 (Ethernet0/0), d=100.100.100.3 (Serial1/0), len 100, policy routed
<!--code2-->
<!--ecode2-->

Когда адрес назначения исчезнет из таблицы маршрутизации, пакет продолжает направляться в соответствие с политикой
<!--code1-->
<!--ecode1-->*Dec 5 13:33:23.607: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 5 13:33:23.607: IP: route map blah, item 10, permit
*Dec 5 13:33:23.607: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial1/0),len 100, policy routed
<!--code2-->
<!--ecode2-->

Когда упал Serial1/0, мы потеряли next-hop, 10.10.10.1, из таблицы маршрутизации и пакеты следуют в соответствие с таблицей маршрутизации.
<!--code1-->
<!--ecode1-->*Dec 5 13:40:38.887: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 5 13:40:38.887: IP: route map blah, item 10, permit
*Dec 5 13:40:38.887: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial2/0), len 100, policy rejected -- normal forwarding
<!--code2-->
<!--ecode2-->

 

Пример 3. PBR используя set ip default next-hop с маршрутом по умолчанию


В этом примере, когда маршрутом на адрес назначения является только маршрут по умолчанию, т.е нет более специфичного маршрута для конечной сети, пакет маршрутизируется в соответствие с политикой

Конфигурация R1
<!--code1-->
<!--ecode1-->interface Ethernet0/0
ip address 100.100.100.1 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.1 255.255.255.0
!
interface Serial2/0
ip address 20.20.20.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.20.20.2
!
ip classless
no ip http server
!
access-list 100 permit ip host 100.100.100.3 host 200.200.200.4
!
route-map blah permit 10
match ip address 100
set ip default next-hop 10.10.10.2
!
end
<!--code2-->
<!--ecode2-->

Конфигурация R2
<!--code1-->
<!--ecode1-->interface Ethernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial1/0
ip address 10.10.10.2 255.255.255.0
fair-queue
!
interface Serial2/0
ip address 20.20.20.2 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.20.20.1
!
ip classless
no ip http server
!
!
!
access-list 100 permit ip host 200.200.200.4 host 100.100.100.3
!
route-map blah permit 10
match ip address 100
set ip default next-hop 10.10.10.1
!
end
<!--code2-->
<!--ecode2-->

Адрес назначения отсутствует в таблице
<!--code1-->
<!--ecode1-->R1# show ip route 200.200.200.4
% Network not in table<!--code2-->
<!--ecode2-->

Маршут по умолчанию присутствует
<!--code1-->
<!--ecode1-->R1# show ip route 0.0.0.0
Routing entry for 0.0.0.0/0, supernet
Known via "static", distance 1, metric 0, candidate default path
Routing Descriptor Blocks:
* 20.20.20.2
Route metric is 0, traffic share count is 1<!--code2-->
<!--ecode2-->

Пакетики маршрутизируются в соответствие с политикой
<!--code1-->
<!--ecode1-->R1#
*Dec  4 12:58:55.191: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec  4 12:58:55.191: IP: route map blah, item 10, permit
*Dec  4 12:58:55.191: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial1/0), len 100, policy routed
<!--code2-->
<!--ecode2-->

Даже, когда маршрут по умолчанию не существует, поскольку Serial2/0 упал, пакет маршрутизируется в соответствие с политикой
<!--code1-->
<!--ecode1-->R1# show ip route 0.0.0.0
% Network not in table
R1#
*Dec 5 13:02:31.283: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 5 13:02:31.283: IP: route map blah, item 10, permit
*Dec 5 13:02:31.283: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial1/0),len 100, policy routed
<!--code2-->
<!--ecode2-->

В ситуации когда Serial2/0 поднят, а Serial1/0 погашен, мы теряем next-hop и пакет следует по обычной табличке маршрутизации – политика не работает.
<!--code1-->
<!--ecode1-->R1# debug ip policy
Policy routing debugging is on
R1#
*Dec 5 12:46:49.543: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4, len 100, policy match
*Dec 5 12:46:49.543: IP: route map blah, item 10, permit
*Dec 5 12:46:49.543: IP: s=100.100.100.3 (Ethernet0/0), d=200.200.200.4 (Serial2/0),len 100, policy rejected -- normal forwarding

( categories: )