Мы уже говорили с вами по поводу базовой редистрибуции 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.