Заметки к CCNP Route: редистрибуция IGP часть 1

Мы уже говорили с вами по поводу базовой редистрибуции OSPF и EIGRP друг в друга, но в обоих случаях весь рассказ заключался в подаче одной команды без объяснений. Настало время дать стране угля и поговорить про редистрибуцию подробнее, а так же о проблемах, которые могут возникать в процессе редистрибуции.

Редистрибуция в EIGRP

В общем виде команда выглядит так:

redistribute protocol  [ process-id | as-number ] [ metric bw delay reliability load mtu ] [ match ( internal | nssa-external | external 1 | external 2 ) ] [ tag value ] [ route-map name]

Без паники, сейчас я расскажу кто все эти люди:

ключ значение
protocol Источник информации о маршрутах, включая RIP, OSPF, EIGRP, IS-IS, присоединенные сети и статические маршруты.
process-id, as-number Указывает на номер процесса или номер автономной системы протокола, который будут редистрибутировать.
metric Указывает метрику, с которой информация будет попадать в другой протокол маршрутизации.
match Если происходит редистрибуция из OSPF этот ключ позволяет указать маршруты – внутренние, внешние и NSSA.
tag Устанавливает метку.
route-map Включает логику route map для того, чтобы фильтровать маршруты, устанавливать метрики или тэги.

Для редистрибуции в EIGRP из других протоколов вам нужно четко задать метрику одним из следующих способов:

  • указать настройки по умолчанию для всех команд редистрибуции (default-metric в процессе конфигурации EIGRP)
  • указать настройки конкретно для данной команды редистрибуции (ключ metric)
  • использовать route map (ключ route-map)

Просто конструкция redistribute ospf #_num работать не будет, так как редистрибуция происходит с метрикой равной бесконечности (2^32). Такое же поведение свойственно RIP.

Кстати, тут вы можете убедиться какое влияние оказывает MTU на метрику в EIGRP поигравшись с ее изменением (hint: не оказывает).

В таблице маршрутизации маршруты полученные от внешних источников в EIGRP помечаются кодом EX, а их административная дистанция меняется с 90 на 170. Чтобы получить подробную о маршруте, а именно от кого он получен, с какой оригинальной метрикой, из какой автономной системы и от кого, достаточно подать команду show ip eigrp topology network.

Редистрибуция в OSPF

В общем виде команда выглядит так:

redistribute protocol  [ process-id | as-number ] [ metric value ] [ metric-type value ] [ match ( internal | nssa-external | external 1 | external 2 ) ] [ tag value ] [ route-map name] [ subnets ], где:

ключ значение
protocol Источник информации о маршрутах, включая RIP, OSPF, EIGRP, IS-IS, присоединенные сети и статические маршруты.
process-id, as-number Указывает на номер процесса или номер автономной системы протокола, который будут редистрибутировать.
metric Указывает метрику, с которой информация будет попадать в другой протокол маршрутизации.
metric-type Тип метрики 1 или 2
match Если происходит редистрибуция из OSPF этот ключ позволяет указать маршруты – внутренние, внешние и NSSA.
tag Устанавливает метку.
route-map Включает логику route map для того, чтобы фильтровать маршруты, устанавливать метрики или тэги.
subnets Указывает на то, что редистрибутировать нужно подсети полноклассовых сетей. Без него только сети класса A, B, C будут попадать в таблицу маршрутизации.

Так же имеют место быть несколько нюансов:

  • Если редистрибуция происходит из OSPF, то берется метрика из другого процесса.
  • Если из BGP – устанавливается метрика 1.
  • Из всех остальных источников – метрика 20.
  • Для каждого внешнего маршрута создается тип 5 LSA, если дело не происходит в NSSA области. В этом случае генерируется тип 7 LSA.
  • По умолчанию используется тип 2 внешней метрики.

В остальном метрику можно задать так же, как и в случае с EIGRP.

На текущий момент все довольно просто, но стоит добавить сюда route-maps и distribute-lists и это обманчивое впечатление улетучивается.

Редистрибуция с помощью Route Maps и Distribute Lists

Route maps дают нам более гранулярный контроль над распространением маршрутной информации. Не меньший контроль они могут дать нам в процессе редистрибуции:

  • Позволяют идентифицировать маршрутную информацию по множеству факторов, в том числе по длине префикса.
  • Осуществлять фильтрацию по поводу того какие маршруты следует редистрибутировать, а какие нет.
  • Изменять метрику для отдельных маршрутов, попадающих под действие route-map.
  • Устанавливать различные типы маршрутов (в OSPF E1 для четных сетей, а E2 для нечетных).
  • Устанавливать тэги – целочисленные значения, которые помогут установить принадлежность этого маршрута к какому-либо типу.

Допустим наша организация объединилась с другой и наш начальник хочет странного, а именно:

  • Все /30 сетки должны фильтроваться в обоих направлениях, при чем должно приниматься во внимание, что в будущем могут появиться новые /30 сетки.
  • Редистрибуция в OSPF: четные сети должны иметь metric type E1 и метрику 40, а нечетные – metric type E2 и метрику 140.
  • Редистрибуция в EIGRP: четные сети должны иметь метрику 100 10 255 1 1500, а нечетные 100 20 255 1 1500, сеть 172.16.27.0/24 мы вообще не хотим видеть в OSPF AS.

И вот, вместо того, чтобы положить на стол заявление по собственному желанию мы скрипя зубами таки беремся за дело:

R2(config)#ip prefix-list FILTER-30-OUT seq 5 permit 0.0.0.0/0 ge 30 le 30
R2(config)#route-map EIGRP-TO-OSPF deny 10
R2(config-route-map)# match ip address prefix-list FILTER-30-OUT
R2(config-route-map)#route-map EIGRP-TO-OSPF permit 100
R2(config-route-map)#route-map OSPF-TO-EIGRP deny 10
R2(config-route-map)#match ip address prefix-list FILTER-30-OUT
R2(config-route-map)#route-map OSPF-TO-EIGRP permit 100
R2(config)#router ospf 1
R2(config-router)#redistribute eigrp 50 subnets route-map EIGRP-TO-OSPF
R2(config-router)#router eigrp 50
R2(config-router)#redistribute ospf 1 route-map OSPF-TO-EIGRP

Обратите внимание, что в списке префиксов FILTER-30-OUT мы разрешаем /30 подсети, а значит запрещающая логика route map может работать с ними. Перейдем к шагу 2:

R2(config)#ip access-list standard 1 !(*)
R2(config-std-nacl)#permit 10.1.2.0 0.0.0.255
R2(config-std-nacl)#permit 10.1.4.0 0.0.0.255
R2(config-std-nacl)#permit 10.1.6.0 0.0.0.255
R2(config-std-nacl)#exit
R2(config)# route-map EIGRP-TO-OSPF permit 20
R2(config-route-map)#match ip address 1
R2(config-route-map)#set metric-type type-1
R2(config-route-map)#set metric 40
R2(config-route-map)#route-map EIGRP-TO-OSPF 100
R2(config-route-map)#set metric 140
R2(config-route-map)#set metric-type type-2

* Альтернативно эту задачу можно решить способом, который предложил Василий в комментариях к этой статье, создав acl следующего вида

access-list 1 permit 0.0.0.0 255.255.254.255

Это обычная уличная магия. Про нее прочитать можно тут.

Так как я очень ленив рационален и перед нами не ставили какие-либо иные условия, то я описал только четные подсети, а остальным назначил значение по умолчанию характерные нечетным:

R1# sh ip route ospf
     10.0.0.0/24 is subnetted, 7 subnets
O E2    10.1.3.0 [110/140] via 192.168.1.2, 00:00:36, FastEthernet0/1
O E1    10.1.2.0 [110/50] via 192.168.1.2, 00:00:56, FastEthernet0/1
O E2    10.1.1.0 [110/140] via 192.168.1.2, 00:00:36, FastEthernet0/1
O E2    10.1.7.0 [110/140] via 192.168.1.2, 00:00:36, FastEthernet0/1
O E1    10.1.6.0 [110/50] via 192.168.1.2, 00:00:56, FastEthernet0/1
O E2    10.1.5.0 [110/140] via 192.168.1.2, 00:00:36, FastEthernet0/1
O E1    10.1.4.0 [110/50] via 192.168.1.2, 00:00:56, FastEthernet0/1

Идем дальше:

R2(config)#ip access-list standard 2
R2(config-std-nacl)#permit 172.16.21.1 0.0.0.255
R2(config-std-nacl)#permit 172.16.23.1 0.0.0.255
R2(config-std-nacl)#permit 172.16.25.1 0.0.0.255
R2(config-std-nacl)#exit
R2(config)#route-map OSPF-TO-EIGRP permit 20
R2(config-route-map)#match ip address 2
R2(config-route-map)#set metric 100 20 255 1 1500
R2(config-route-map)#route-map OSPF-TO-EIGRP 100
R2(config-route-map)#set metric 100 10 255 1 1500

That’s all.

R3#sh ip route eigrp
     172.16.0.0/24 is subnetted, 8 subnets
D EX    172.16.24.0 [170/25628160] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.25.0 [170/25630720] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.26.0 [170/25628160] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.27.0 [170/25628160] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.20.0 [170/25628160] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.21.0 [170/25630720] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.22.0 [170/25628160] via 192.168.2.2, 00:00:44, FastEthernet0/0
D EX    172.16.23.0 [170/25630720] via 192.168.2.2, 00:00:44, FastEthernet0/0

На повестке дня осталась 172.16.27.0/24 сетка и distribute lists. Route maps всем хороши. Вы можете фильтровать маршруты, устанавливать различные метрики, типы внешних метрик и тэги, однако если все это не требуется, и вам нужно лишь отфильтровать какие-либо маршруты для редистрибуции и для этого хватает функций ACL и prefix lists, то distribute lists – here we go.

Например:

R2(config)#access-list 3 deny 172.16.27.0 0.0.0.255
R2(config)#access-list 3 permit any
R2(config)#router eigrp 50
R2(config-router)#distribute-list 3 out ospf 1

хороший способ сказать EIGRP применить логику ACL #3 при редистрибуции маршрутов из OSPF с процессом 1.