Policy Based Routing (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 используется в ситуации, которая представлена на рисунке.

Маршрутизатор 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
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
Конфигурация R2
! 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
Когда маршрут назначения присутствует в таблице маршрутизации, используется обычный роутинг, маршрутизирующая политика не работает
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
Смотрим на R2
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
Когда упадет Serial2/0 и адрес назначения исчезнет из таблицы маршрутизации пакет будет направляться в соответствие с роутинговой политикой.
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
Привет 2. PBR с set ip next-hop с динамическим протоколом В этом примере на маршрутизаторах R1 и R2 работает протокол динамической маршрутизации OSPF. Поэтому R2 знает о сетях R1, т.е. сети R1 присутствуют в таблице маршрутизации R2. Конфигурация R1 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
Конфигурация R2
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
Проверим существование следующего хопа, 10.10.10.2 в таблице маршрутизации. Если маршрут назначения существует , пакет направляется в соответствие роутинговой политикой, если next-hop достижим.
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
На втором маршрутизаторе:
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
Когда адрес назначения исчезнет из таблицы маршрутизации, пакет продолжает направляться в соответствие с политикой
*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
Когда упал Serial1/0, мы потеряли next-hop, 10.10.10.1, из таблицы маршрутизации и пакеты следуют в соответствие с таблицей маршрутизации.
*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
Пример 3. PBR используя set ip default next-hop с маршрутом по умолчанию В этом примере, когда маршрутом на адрес назначения является только маршрут по умолчанию, т.е нет более специфичного маршрута для конечной сети, пакет маршрутизируется в соответствие с политикой Конфигурация R1 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
Конфигурация R2
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
Адрес назначения отсутствует в таблице
R1# show ip route 200.200.200.4 % Network not in table
Маршут по умолчанию присутствует
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
Пакетики маршрутизируются в соответствие с политикой
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
Даже, когда маршрут по умолчанию не существует, поскольку Serial2/0 упал, пакет маршрутизируется в соответствие с политикой
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
В ситуации когда Serial2/0 поднят, а Serial1/0 погашен, мы теряем next-hop и пакет следует по обычной табличке маршрутизации – политика не работает.
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
Post new comment