Route-map: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 43: | Строка 43: | ||
|} |
|} |
||
− | {{note|text= |
||
⚫ | |||
⚫ | |||
Варианты параметров, которые используются с match и set, в каждой области применения, описаны в соответствующих разделах. |
Варианты параметров, которые используются с match и set, в каждой области применения, описаны в соответствующих разделах. |
||
+ | |||
− | }} |
||
=== Route-map Policy list === |
=== Route-map Policy list === |
||
Строка 109: | Строка 108: | ||
</pre> |
</pre> |
||
+ | == Пример== |
||
− | == Дополнительная информация == |
||
+ | <PRE> |
||
− | |||
+ | ++++++++++++++++++++++++++++++++++++++++++++++ |
||
− | == Примечания == |
||
+ | 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 |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | ++++++++++++++++++++++++++++++++++++++++++++++ |
||
+ | 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 |
||
+ | </PRE> |
||
+ | <PRE> |
||
− | {{Cisco}} |
||
+ | 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. |
||
+ | </PRE> |
Текущая версия на 18:01, 10 января 2022
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 значит, что пакеты будут отправлены на стандартную маршрутизацию
- каждое из правил, указывает отправлять указанные пакеты по правилам PBR или нет
- В каждом правиле route-map два компонента:
- match - описывает какой трафик должен маршрутизироваться согласно PBR
- как правило, для PBR, используется в виде match ip address <acl>
- set - описывает куда перенаправлять трафик, который описан в match
- как правило, для PBR, используется в виде set ip next-hop <ip-address>
- match - описывает какой трафик должен маршрутизироваться согласно PBR
- У каждого правила 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.