> For the complete documentation index, see [llms.txt](https://linkmeup.gitbook.io/sdsm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://linkmeup.gitbook.io/sdsm/8.-bgp-i-ip-sla/3.-pbr/1.-praktika.md).

# Практика

Немного практики для закрепления

Имеем вот такую топологию:

![](http://img-fotki.yandex.ru/get/6716/83739833.2b/0_c0950_6b7e5d1_XXL.png)

В данный момент трафик R1-R5 и обратно идет по маршруту R1-R2-R4-R5, для удобства, адреса присвоены так, чтобы последняя цифра адреса была номером маршрутизатора:

> R1#traceroute 192.168.100.5\
> 1 192.168.0.2 20 msec 36 msec 20 msec\
> 2 192.168.2.4 40 msec 44 msec 16 msec\
> 3 192.168.100.5 56 msec \* 84 msec
>
> R5#traceroute 192.168.0.1\
> 1 192.168.100.4 56 msec 40 msec 8 msec\
> 2 192.168.2.2 20 msec 24 msec 16 msec\
> 3 192.168.0.1 64 msec \* 84 msec

Для примера, предположим, что нам нужно, чтобы обратно трафик от R5 (с его адресом в источнике) шел по маршруту R5-R4-**R3**-R1. По схеме очевидно, что решение об этом должен принимать R4. На нем сначала создаем ACL, который отбирает нужные нам пакеты:

```
R4(config)#access-list 100 permit ip host 192.168.100.5 any
```

Затем создаем политику маршрутизации с именем “BACK”:

```
R4(config)#route-map BACK
```

Внутри нее говорим, какой трафик нас интересует:

```
R4(config-route-map)#match ip address 100
```

И что с ним делать:

```
R4(config-route-map)#set ip next-hop 192.168.3.3
```

После чего заходим на интерфейс, который смотрит в сторону R5 (PBR работает с входящим трафиком!) и применяем на нем полученную политику:

```
R4(config)#int fa1/0
R4(config-if)#ip policy route-map BACK
```

Проверяем:

> R5#traceroute 192.168.0.1\
> 1 192.168.100.4 40 msec 40 msec 16 msec\
> 2 192.168.3.3 52 msec 52 msec 44 msec\
> 3 192.168.1.1 56 msec \* 68 msec

Работает! А теперь посмотрим внимательно на схему и подумаем: все ли хорошо?

А вот и нет!\
Следуя данному ACL, у нас заворачивается на R3 весь трафик с источником R5. А это значит, что если, например, R5 захочет попасть на R2, он, вместо короткого и очевидного маршрута R5-R4-R2, будет послан по маршруту R5-R4-R3-R1-R2. Поэтому, нужно очень аккуратно и вдумчиво составлять ACL для PBR, делая его максимально специфичным.

В этом примере мы в качестве действия, применяемого к трафику, выбрали переопределение некстхопа (узла сети, куда дальше отправится пакет). А что еще можно сделать с помощью PBR? Имеются в наличие команды:

* set ip next-hop
* set interface
* set ip default next-hop
* set default interface

С первыми двумя все относительно понятно – они переопределяют некстхоп и интерфейс, из которого пакет будет выходить (чаще всего set interface применяется для point-to-point линков). А в случае, если мы применяем команды set ip **default** next-hop или set **default** interface, роутер сначала смотрит таблицу маршрутизации, и, если там имеется маршрут для проверяемого пакет, отправляет его соответственно таблице. Если маршрута нет, пакет отправляется, как сказано в политике. К примеру, если бы мы в нашей топологии вместо set ip next-hop 192.168.3.3 скомандовали set ip default next-hop 192.168.3.3, ничего бы не поменялось, так как у R4 есть маршрут к R1 (через R2). Но если бы он отсутствовал, трафик направлялся бы к R3.

> Вообще говоря, с помощью команды **set** можно изменять очень много в подопытном пакете: начиная от меток QoS или MPLS и заканчивая атрибутами BGP
