# 5. Манипуляция и классификация

## Задачи и инструменты

* Часто приходится применять определенные действия к некоторому подмножеству объектов (пакетов, маршрутов)
* Классификация позволяет принять решение о применении действия
* Манипуляции при принятии решения позволяют изменить объект
* Инструменты: ACL, Prefix List, Route Map

## Access Control List

* Простейший классификатор, не выполняет манипуляцию
* Анализирует объекты и выносит вердикт permit/deny:
  * IP-пакеты: адреса источника\назначения, порты TCP\UDP, тип содержимого
  * IP-маршруты: адрес и маска сети\адрес шлюза
  * Кадры Ethernet: MAC источника\назначения, LLC/SPAN вложения

**Разновидности:**

* По способу конфигурирования:
  * Нумерованные
  * Именованные
* По возможностям анализа (только для IPv4):
  * Стандартные
  * Расширенные
* По типу классифицируемых объектов:
  * IPv4
  * IPv6
  * IEEE 802
  * MPLS
  * DECnet

**Вся остальная информация по ACL в CCNA!**

## Prefix List

* Классификатор, адаптированный под анализ маршрутов
  * Функционально не отличается от ACL
  * Анализирует IP-адрес (не попадание в эталонную сеть) и длину префикса

```
Router(config)#ip prefix-list PFL permit 10.10.11.0/24
Router(config)#ip prefix-list PFL seq 5 deny 10.10.12.0/24
```

* Для анализа длины префикса используются операторы **ge** и **le**
  * Если ни один оператор не задан, требуется точное совпадение длины префикса с маской эталонной сети (частая ошибка настройки)

```
Router(config)#ip prefix-list EXACT1    permit 10.10.11.0/24
Router(config)#ip prefix-list EXACT2    permit 10.10.11.0/24 ge 24 le 24
Router(config)#ip prefix-list RANGE     permit 10.10.11.0/24 ge 26 le 28
Router(config)#ip prefix-list LONGER    permit 10.10.11.0/24 ge 25
Router(config)#ip prefix-list ORLONGER  permit 10.10.11.0/24 ge 24
Router(config)#ip prefix-list UPTO      permit 10.10.11.0/24 le 28
Router(config)#ip prefix-list DEFAULT   permit 0.0.0.0/0
Router(config)#ip prefix-list ANY-ROUTE permit 0.0.0.0/0 le 32
```

## Cвязь ACL и PFL

* Префикс-листы удобно использовать для классификации маршрутов
* Любой префикс-лист можно записать в форме ACL
  * Standard ACL для префикс-листов без операторов
  * Extended ACL для префикс-листов с операторами для анализа маски
  * Исключение - применение с distribute-list в EIGRP и BGP

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-L_vc9PXUlpdrzM8YyEH%2F-L_viRaNbpO1GEg0zFNV%2Fpfl.PNG?alt=media\&token=8e1b765d-432e-45d3-afee-e788ac6d3c78)

## Route Map

* Продвинутый инструмент, позволяет:
  * Анализировать различные по природе свойства объекта
  * Выполнять сложные сравнения И\ИЛИ
  * Выполнять манипуляции с анализируемым объектом
* Как и ACL, имеет упорядоченную структуру блоков и выполнение сравнения в блоках до вынесения явного или неявного вердикта

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-L_vc9PXUlpdrzM8YyEH%2F-L_vjMlzLEE8ebMToaYQ%2Froutemap1.PNG?alt=media\&token=6ea7fdfb-467f-400e-9cdd-cf7fd7ffd722)

## Блоки Route Map

* Блоки пронумерованы и выполняются последовательно (сверху вниз)
* Если в блоке обнаружено совпадение (match), то:
  * Выносится вердикт (permit/deny)
  * Выполняются манипуляции (set)
  * Несколько match-условий в разных строках - разная природа, логика И
  * Несколько match-условий в одной строке - одинаковая природа, логика ИЛИ

```
route-map MYROUTEMAP permit 10
match {statement 1}
match {statement 2}
set {set statement 1}
set {set statement 2}

route-map MYROUTEMAP deny 20
match {match statement 4}
match {match statement 5}

route-map MYROUTEMAP permit 30
match {match statement 6} {match statement 7}
set {set statement 3}
```

## Route-map Match-условия

* Route-map может анализировать разные типы объектов, механизм позволяет заказывать сравнение самых разных свойств и объектов
* Ответственность за разумность сравнения лежит на операторе

| Match                                                           | Описание                                                                                 |
| --------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| **match ip address \[prefix-list]**                             | IP-адрес источника\получателя для пакетов, адрес сети и длина префиксов для маршрутов    |
| **match ip next-hop \[prefix-list]**                            | IP-адрес шлюза для маршрута                                                              |
| **match ip route-source**                                       | IP-адрес источника маршрута                                                              |
| **match ipv6 address \[prefix-list]**                           | IPv6-адреса источника\получателя для пакетов, адрес сети и длина префиксов для маршрутов |
| **match metric**                                                | Метрика маршрута                                                                         |
| **match route-type {external\|internal\|nssa-external\|local}** | Тип маршрута                                                                             |
| **match tag**                                                   | Метка маршрута для RIP/OSPF/EIGRP/BGP                                                    |

## Route-map Set-манипуляции

* Route-Map может анализировать разные типы объектов, механизм позволяет манипулировать самыми разными свойствами объектов
* Ответственность за корректность манипуляции лежит на операторе

| Match             | Описание                                       |
| ----------------- | ---------------------------------------------- |
| set ip next-hop   | Задание шлюза для маршрута или для пакета      |
| set ipv6 next-hop | Задание шлюза для маршрута или для пакета IPv6 |
| set metric-type   | Задание типа метрики маршрута EIGRP/OSPF       |
| set metric        | Задание метрики маршрута                       |
| set origin        | Задание атрибута BGP                           |
| set community     | Задание атрибута BGP                           |
| set as-path       | Задание атрибута BGP                           |
| set tag           | Задание метки маршрута RIP/EIGRP/OSPF          |

## Конфигурация Route Map

* Порядок блоков важен, как и в ACL

```
Router(config)#route-map SET_METRIC_RM permit
Router(config-route-map)#match ip address VIP_USERS_ACL
Router(config-route-map)#set metric 100
Router(config-route-map)#route-map SET_METRIC_RM deny 5
Router(config-route-map)#match ip address TROUBLEMAKERS_ACL
Router(config-route-map)#route-map SET_METRIC_RM
```

```
Router#show route-map SET_METRIC_RM
```

## Использование Route Map

* Policy-Based Routing
* Редистрибуция между протоколами динамической маршрутизации
* Фильтрация маршрутов в BGP и манипуляции с ними
  * В IOS нормально работать с BGP можно только с использованием Route Map

## Использование PBR

* PBR позволяет отойти от традиционной табличной маршрутизации
  * Маршрутизация в зависимости от адреса источника
  * Маршрутизация в зависимости от сетевого приложения
  * Загрузка нескольких каналов в Интернет

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-La0KmWrd2_vTRw_nwsq%2F-La0LHXK2ZIWRQOjdV3t%2Fpbr3.PNG?alt=media\&token=54d75a80-c7f0-4b42-84ab-ceb7343cf0a1)

## Настройка PBR

* Конфигурация Route Map
  * Отбираем нужный трафик условиями match
  * Переопределяем next-hop
    * set ip next-hop - задается connected-адрес next-hop
    * set ip next-hop recursive - задается резолвящийся адрес next-hop
    * set ip default next-hop - PBR срабатывает между специфичным маршрутом и 0.0.0.0/0
    * set interface - задается connected-интерфейс
    * set default interface - аналогично set ip default next-hop
  * Необработанные пакеты отправятся по таблице маршрутизации
* Применяем Route Map для маршрутизации по политике
  * В контексте входящего интерфейса для транзитного трафика
  * В глобальном контексте для локального трафика
* Настраиваем динамический контроль PBR
  * Объекты отслеживания (IP SLA, маршруты, интерфейсы, споки)
  * CDP (если не задан объект отслеживания)

## Конфигурация PBR Route Map

* Необработанные пакеты отправляются по таблице маршрутизации

```
Router(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.1
Router(config)#route-map PBR_RM permit
Router(config-route-map)#match ip address LAPTOP
Router(config-route-map)#set ip next hop 2.2.2.2
```

* Route Map применяется для транзитного и локального  трафика

```
Router(config)#ip local policy route-map PBR_RM    !для локального трафика
Router(config)#interface gi0/0                     !входящий интерфейс для трафика PBR
Router(config-if)#ip policy route-map PBR_RM
```

## Диагностика PBR

* Обычная трассировка с устройств
* Дебаг политик

```
Router#debug ip policy
Nov 12 20:00:01.302: IP: s=192.168.100.2 (FastEthernet0/1), d=8.8.8.8, len 48, FIB policy match
Nov 12 20:00:01.302: IP: s=192.168.100.2 (FastEthernet0/1), d=8.8.8.8, g=2.2.2.2, len 48, FIB policy routed
Nov 12 20:00:01.503: IP: s=192.168.100.1 (FastEthernet0/1), d=8.8.8.8, len 48, policy rejected -- normal forwarding
```

## Динамический контроль PBR

* Требуется отслеживать доступность Next Hop
  * Next Hop в connected-маршруте Ethernet будет жив, пока жива запись ARP
  * Можно использовать ICMP-зонд IP SLA или CDP

```
Router(config)#route-map PBR_RM permit 10
Router(config-route-map)#set ip next-hop 2.2.2.2  !используется cdp
Router(config-route-map)#set ip next-hop verify-availability !Проверка 2.2.2.2 на доступность через CDP
```

```
Router(config)#ip sla 1
Router(config-ip-sla)#icmp-echo 2.2.2.2 source-interface gi0/1
Router(config-ip-sla-echo)#frequency 10
Router(config)#ip sla schedule 1 start-time now life forever
Router(config)#track 10 ip sla 1
Router(config-route-map)#set ip next-hop verify-availability 2.2.2.2 10 track 1
Router(config-route-map)#set ip next-hop verify-availability 3.3.3.3 20 track 2
```





































