Route-map

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Route-Map

Заметка на память (оригинал на http://xgu.ru/ это копия дополненная моими примерами)

Route-map это объект в конфигурационном файле, с помощью которого можно настраивать такой функционал:

  • NAT
  • Политики BGP
  • Перераспределение маршрутов (route redistribution)
  • PBR

Чаще всего, route-map используется при настройке маршрутизаторов.

Описание route-map

В каждой route map может быть несколько команд route-map, каждой из которых присвоен порядковый номер. Когда маршрутизатор обрабатывает route map, он просматривает все команды в соответствии с порядковыми номерами команд.

В каждой команде route-map указано действие permit или deny. Кроме того, с помощью команды match указываются параметры которые должны быть у маршрута для того чтобы он совпал с правилом. Для того чтобы указать весь трафик, в команде route-map просто не надо указывать команду match.

  • Если после параметра match идет несколько опций, то к ним применяется логика или, то есть должен совпасть один из перечисленных параметров.
  • Если задано несколько параметров match в отдельных строках, то к ним применяется логика и, то есть должны совпасть все параметры.

В каждой команде route-map может быть одна или более команд set, которые используются для изменения каких-либо параметров проходящих маршрутов.

Route map позволяет фильтровать маршруты при перераспределении и изменять различные атрибуты маршрутов.

Ниже таблица с самыми популярными вариантами использования route-map и самыми распространенными вариантами параметров:

Параметр route-map Значение для BGP (применение к соседу) Значение для PBR Значение для redistribution Значение для NAT
permit пропустить префикс Маршрутизировать по правилам PBR Перераспределить маршруты NAT-ить
deny отбросить префикс Отправить на стандартную маршрутизацию Отбросить маршруты Не NAT-ить (при этом NAT пакеты не отбрасывает)
match prefix-list, as-path acl, ACL ACL ACL, prefix-list, tag, route type interface, ACL
set Атрибуты BGP ip next-hop, set interface tag -


Обратите внимание, что в таблице перечислены не все возможные параметры, а только одни из самых распространенных, для того чтобы вкратце показать отличия в работе и настройке route-map, в зависимости от области применения. Варианты параметров, которые используются с match и set, в каждой области применения, описаны в соответствующих разделах.


Route-map Policy list

Route-map continue

Использование route map в BGP

Пример изменения значения атрибута origin для сетей разрешенных в ACL 101:

dyn(config)# route-map NEW_Origin permit
dyn(config-route-map)# match ip address 101
dyn(config-route-map)# set origin igp

Использование route map для перераспределения маршрутов

Когда route map используется для перераспределения маршрутов, то команда route-map с параметром permit указывает на маршруты, которые будут перераспределены, а route-map с deny на маршруты, которые не будут перераспределяться.

Для перераспределения маршрутов используются такие параметры команды match:

  • match interface — проверяется исходящий интерфейс маршрутов,
  • match ip address — с помощью ACL или prefix-list указывается какой префикс должен быть у маршрута,
  • match ip next-hop — проверяется next-hop адрес маршрута,
  • match ip route-source — проверяется IP-адрес маршрутизатора, который анонсирует маршрут,
  • match metric — проверяется метрика маршрута,
  • match route-type — проверяется тип маршрута (external, internal, level-1, level-2, local, nssa-external),
  • match tag — проверяется тег установленный для маршрута ранее.

Для перераспределения маршрутов используются такие параметры команды set:

  • set level — указывает в какую базу данных будет перераспределен маршрут (level-1, level-2, level-1-2, stub-area, backbone)
  • set metric — устанавливает метрику маршрута,
  • set metric-type — устанавливает тип маршрута для OSPF и IS-IS (external, internal, type-1, type-2),
  • set tag — устанавливает тег для маршрута.

Использование route map для Policy-based routing

Route-map для PBR:

  • состоит из правил:
    • каждое из правил, указывает отправлять указанные пакеты по правилам PBR или нет
      • permit значит, что пакеты, которые попадают в описание match, буду отправлены так как описано в set
      • deny значит, что пакеты будут отправлены на стандартную маршрутизацию
  • В каждом правиле route-map два компонента:
    • match - описывает какой трафик должен маршрутизироваться согласно PBR
      • как правило, для PBR, используется в виде match ip address <acl>
    • set - описывает куда перенаправлять трафик, который описан в match
      • как правило, для PBR, используется в виде set ip next-hop <ip-address>
  • У каждого правила route-map есть порядковый номер
    • когда пакеты проходят сквозь интерфейс, к которому применена PBR, пакеты проверяются по порядку по правилам
    • если пакет совпал с описанием в match, то он маршрутизируется по правилу set
    • если пакет не совпал с описанием в match, правила проверяются дальше
    • если ни в одном правиле совпадения не найдено, то пакет будет маршрутизироваться по стандартной таблице маршрутизации

Пример настройки PBR:

route-map PBR permit 10
 match ip address VLAN_10
 set ip next-hop 10.0.1.1
route-map PBR permit 20
 match ip address VLAN_20
 set ip next-hop 10.0.2.2

interface Gi0/0
 ip policy route-map PBR

Пример

++++++++++++++++++++++++++++++++++++++++++++++
Working config
+++++++++++++++++++++++++++++++++++++++++++++++
ip prefix-list AS300_PREFIX permit 222.22.3.0/24
!
route-map ADVERTISE_MAP deny 10
match ip address prefix-list AS300_PREFIX
!
route-map ADVERTISE_MAP permit 100
!
router bgp 100
aggregate-address 222.22.0.0 255.255.252.0 summary-only as-set advertise-map ADVERTISE_MAP
++++++++++++++++++++++++++++++++++++++++++++++
Non-working config
++++++++++++++++++++++++++++++++++++++++++++++
 
ip prefix-list AS300_PREFIX deny 222.22.3.0/24
!
route-map ADVERTISE_MAP permit 10
match ip address prefix-list AS300_PREFIX
!
route-map ADVERTISE_MAP permit 100
!
router bgp 100
aggregate-address 222.22.0.0 255.255.252.0 summary-only as-set advertise-map ADVERTISE_MAP

The difference between the two statements is what the route-map permit/deny action is vs the prefix-list permit/deny action.
 
When using prefix-lists or even ACLs with route-maps, the prefix-list or ACL does not permit or deny the prefix from being processed, it only identifies whether the prefix matches the route-map statement itself.
 
In your first example:
 
ip prefix-list AS300_PREFIX permit 222.22.3.0/24
!
route-map ADVERTISE_MAP deny 10
match ip address prefix-list AS300_PREFIX
!
route-map ADVERTISE_MAP permit 100
 
The configuration is as follows: Any thing that matches the prefix-list AS300_PREFIX should be processed by the statement 10 of the route-map ADVERTISE_MAP. All other prefixes should fall to the next statement for processing.
 
222.22.3.0/24 matches the prefix list and thus is processed by statement 10 of the route-map. Statement 10 denies all matching prefixes which generates the result you are looking for.
 
In the second example:
 
ip prefix-list AS300_PREFIX deny 222.22.3.0/24
!
route-map ADVERTISE_MAP permit 10
match ip address prefix-list AS300_PREFIX
!
route-map ADVERTISE_MAP permit 100
!
 
The configuration is the same. The only difference is the prefix-list doesn’t match 222.22.3.0/24 (or any prefix since there is no permit clause in the prefix-list). This means the prefix 222.22.3.0/24 is not processed by statement 10 of the route-map ADVERTISE_MAP. Instead, the prefix 222.22.3.0/24 is evaluated by the remaining route-map statement. The last route-map statement matches all prefixes and permits them. So it is permitted by the route-map instead of denied which i believe is the intention.
 
The key here is the prefix-list only determines what is fed to the route-map. If the prefix-list denies the prefix, the prefix will not be serviced by that particular route-map statement. It is still processed by the route-map until reaching the implicit deny or  unless you have an explicit empty permit statement like in your second example.
 
That being said, in order to make the second example work the way I believe you intend, simply remove the empty route-map 100 statement.