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

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

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

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 Link to heading

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

redistribute protocol  [ process-id | as-number ] [ metricvalue ] [ 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 Link to heading

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.