В первой заметке я описал типичный (насколько его проповедуют в интернете) сценарий использования Forwarding Address (FA): два ASBR подключены к одному внешнему сегменту, причём redistribution маршрутов настроен только на одном из них.
Очевидно, что такой дизайн плох с точки зрения отказоустойчивости, но, возможно, существуют сценарии, когда использование OSPF FA уместно?
Рассмотрим более хитрую ситуацию: 2 ASBR подключены к одному внешнему сегменту, реализованному в виде Metro Ethernet. Один ASBR использует подключение 1 Gbps, другой – 100 Mbps.
Задавшись целью исправить огрехи предыдущего дизайна, мы используем BGP на обоих ASBR, которые выполняют redistribute маршрутов из BGP в OSPF. Отказоустойчивость налажена, однако ценой оптимальной маршрутизации: на C1 присутствуют два равноценных маршрута, тогда как в действительности один из них имеет в 10 раз меньшую пропускную способность.
Посмотрим на базу данных OSPF и таблицу маршрутизации C1:
C1#show ip ospf data external
OSPF Router with ID (192.168.0.3) (Process ID 1)
Type-5 AS External Link States
LS age: 40
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 192.168.0.2 (External Network Number )
Advertising Router: 192.168.0.1
LS Seq Number: 80000001
Checksum: 0xA154
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 1
Forward Address: 0.0.0.0
External Route Tag: 65001
LS age: 25
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 192.168.0.2 (External Network Number )
Advertising Router: 192.168.0.4
LS Seq Number: 80000002
Checksum: 0x8D64
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 1
Forward Address: 0.0.0.0
External Route Tag: 65001
C1#show ip route 192.168.0.2
Routing entry for 192.168.0.2/32
Known via "ospf 1", distance 110, metric 1
Tag 65001, type extern 2, forward metric 1
Last update from 10.0.128.6 on GigabitEthernet0/2, 00:00:47 ago
Routing Descriptor Blocks:
10.0.128.6, from 192.168.0.4, 00:00:47 ago, via GigabitEthernet0/2
Route metric is 1, traffic share count is 1
Route tag 65001
* 10.0.128.1, from 192.168.0.1, 00:01:01 ago, via GigabitEthernet0/1
Route metric is 1, traffic share count is 1
Route tag 65001
Время для очередного трюка:
Включаем OSPF на (внешних) соединениях Metro Ethernet LAN, которые связывают нашу OSPF-сеть с внешним маршрутизатором (да, это действительно плохая затея с точки зрения безопасности).
Выставим правильные веса OSPF (или пропускную способность) на интерфейсах.
Расчехлим бубен, чтобы ASBR начал выставлять корректный Forwarding Address в Type-5 LSA и процесс выбора лучшего внутреннего маршрута OSPF сошелся на самом быстром доступном пути.
Невероятно, но факт – это работает:
C1#show ip route 192.168.0.2
Routing entry for 192.168.0.2/32
Known via "ospf 1", distance 110, metric 1
Tag 65001, type extern 2, forward metric 2
Last update from 10.0.128.1 on GigabitEthernet0/1, 00:01:13 ago
Routing Descriptor Blocks:
* 10.0.128.1, from 192.168.0.4, 00:01:13 ago, via GigabitEthernet0/1
Route metric is 1, traffic share count is 1
Route tag 65001
Если есть желание воспроизвести полученные результаты самостоятельно,
начните с OSPF-Forwarding-Address-Bandwidth-Mismatch топологии для VIRL из репозитория на Github.
Также можно наблюдать увлекательное (aka как мы вообще в таком закопались) поведение:
Если раньше оба ASBR анонсировали Type-5 LSA, то после включения OSPF на внешних интерфейсах только один из них продолжает анонсировать внешние маршруты.
C1#show ip ospf data external
OSPF Router with ID (192.168.0.3) (Process ID 1)
Type-5 AS External Link States
LS age: 272
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 192.168.0.2 (External Network Number )
Advertising Router: 192.168.0.4
LS Seq Number: 80000003
Checksum: 0x16CE
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 1
Forward Address: 10.0.0.2
External Route Tag: 65001
В нашей сети Type-5 LSA анонсирован ASBR, который вообще не находится на пути трафика в сторону внешних префиксов (я уверен, что где-то в OSPF RFC есть раздел, согласно которому выбор сделан по наибольшему ASBR Router ID).
Ура, мы сэкономили немного памяти на Type-5 LSA и снова усложнили использование протокола.
А теперь вишенка на торте: в описанной схеме OSPF FA не нужен в принципе. Правильным решением было бы увеличить метрику внешнего маршрута, а также использовать тип E1 вместо E2, чтобы другие маршрутизаторы сети учитывали полный вес пути (внутренний + внешний) до импортных маршрутов. К сожалению, в реальной жизни проблемы решаются иначе (по крайней мере в лабе CCIE).
kterik
Если раньше оба ASBR анонсировали Type-5 LSA, то после включения OSPF на внешних интерфейсах только один из них продолжает анонсировать внешние маршруты.
Полагаю, что такое поведение вызвано использованием общей на оба граничных узла сети для связи с внешним узлом. Если бы вместо этого существовали две отдельные p2p сеточки, протокол OSPF не запретил бы анонс "лишнего" ASBR.
braonle Автор
На мой взгляд, непонятно, почему именно LSA5 другого ASBR должен быть удалён? В конце концов, технически, это два разных LSA5:
kterik
В стандарте удалось найти фрагмент: "The following rule is thereby established: if two routers, both reachable from one another, originate functionally equivalent AS-external-LSAs (i.e., same destination, cost and non-zero forwarding address), then the LSA originated by the router having the highest OSPF Router ID is used. The router having the lower OSPF Router ID can then flush its LSA". Так что это стандартное поведение.
Единственный вопрос, что имеется в виду под "доступностью друг для друга": присутствие OSPF интерфейса в той же внешней стыковочной подсети или что-то другое?
braonle Автор
Действительно, спасибо за наводку.
Что касается доступности, установления соседства не нужно: если ASBR разнесены по разным зонам, то так же остаётся только один LSA5 (проверил). Наверное, в качестве доступности можно считать получение ASBR'ом с меньшим RID соответствующего LSA4 про другой ASBR.