PBR или Policy Based Routing предоставляет механизм реализации пересылки (forwarding)/ маршрутизации(routing) пакетов данных, основанный на политике, представляющей собой набор правил, определенной администраторами сети. Это предоставляет более гибкий механизм для обработки пакетов на маршрутизаторах, дополняя существующий механизм, предоставленный протоколами маршрутизации. Маршрутизаторы выбирают дальнейший путь следования пакетов данных по полю "адрес назначения", основываясь на информации из таблицы статических маршрутов или полученной от динамических протоколов маршрутизации, как, например Routing Information Protocol (RIP), Open Shortest Path First (OSPF), или Enhanced Interior Gateway Routing Protocol (Enhanced IGRP). Вместо выбора дальнейшего маршрута, основанного на адресе назначения, PBR позволяет администраторам сети определить свои правила, по которым будет осуществляться маршрутизация пакетов.
Наиболее часто на практике 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 и R2 работает протокол динамической маршрутизации OSPF. Поэтому R2 знает о сетях R1, т.е. сети R1 присутствуют в таблице маршрутизации R2.
Конфигурация R1
interface FastEthernet0/0
ip address 100.100.100.3 255.255.255.0
ip policy route-map blah
!
interface Serial0/0
ip address 10.10.10.1 255.255.255.0
encapsulation frame-relay
frame-relay map ip 10.10.10.2 102 broadcast
!
interface Serial0/1
ip address 20.20.20.1 255.255.255.0
!
router ospf 1
!--- OSPF не настроен на Serial0/0.
network 20.20.20.0 0.0.0.255 area 0
network 100.100.100.0 0.0.0.255 area 0
!
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
Конфигурация R2
interface FastEthernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial0/0
ip address 10.10.10.2 255.255.255.0
encapsulation frame-relay
frame-relay map ip 10.10.10.1 201
!
interface Serial0/1
ip address 20.20.20.2 255.255.255.0
!
router ospf 1
network 20.20.20.0 0.0.0.255 area 0
network 200.200.200.0 0.0.0.255 area 0
!
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
!
Когда маршрут назначения присутствует в таблице маршрутизации, используется обычный роутинг, маршрутизирующая политика не работает

Посмотрим вывод debug ip policy и видим, что пакеты пересылается в соответствие обычной таблице маршрутизации

Когда упадет Serial0/1 и адрес назначения исчезнет из таблицы маршрутизации пакет будет направляться в соответствие с роутинговой политикой.

Посмотрим вывод debug ip policy и видим, что пакеты пересылается в соответствие нашей новой политике

Пример 2. PBR с set ip next-hop с динамическим протоколом
В этом примере на маршрутизаторах R1 и R2 работает протокол динамической маршрутизации OSPF. Поэтому R2 знает о сетях R1, т.е. сети R1 присутствуют в таблице маршрутизации R2. Мы изменили роутинговую политику на
route-map blah permit 10
match ip address 100
set ip next-hop 10.10.10.2
Проверим существование следующего хопа, 10.10.10.2 в таблице маршрутизации. Если маршрут назначения существует , пакет направляется в соответствие роутинговой политикой, если next-hop достижим.

Вывод debug ip policy и видим, что пакеты пересылается в соответствие нашей политике

Когда адрес назначения исчезнет из таблицы маршрутизации, пакет продолжает направляться в соответствие с политикой

Когда упал Serial0/0, мы потеряли next-hop, 10.10.10.1, из таблицы маршрутизации и пакеты следуют в соответствие с обычной таблицей маршрутизации.

Вывод debug ip policy показывает, что пакеты пересылается в соответствие обычной таблице маршрутизации

Пример 3. PBR используя set ip default next-hop с маршрутом по умолчанию
В этом примере, когда маршрутом на адрес назначения является только маршрут по умолчанию, т.е нет более специфичного маршрута для конечной сети, пакет маршрутизируется в соответствие с политикой
Конфигурация R1
interface FastEthernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial0/0
ip address 10.10.10.2 255.255.255.0
encapsulation frame-relay
frame-relay map ip 10.10.10.1 201
!
interface Serial0/1
ip address 20.20.20.2 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.20.20.1
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
!
Конфигурация R2
interface FastEthernet0/0
ip address 200.200.200.2 255.255.255.0
ip policy route-map blah
!
interface Serial0/0
ip address 10.10.10.2 255.255.255.0
encapsulation frame-relay
frame-relay map ip 10.10.10.1 201
!
interface Serial0/1
ip address 20.20.20.2 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.20.20.1
!
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
!
Адрес назначения отсутствует в таблице, а Маршут по умолчанию присутствует

Пакетики маршрутизируются в соответствие с политикой

Даже, когда маршрут по умолчанию не существует, поскольку Serial0/1 упал, пакет маршрутизируется в соответствие с политикой, так как next-hop жив
В ситуации когда Serial0/1 поднят, а Serial0/0 погашен, мы теряем next-hop и пакет следует по обычной табличке маршрутизации – политика не работает.
