Хотелось ли вам когда-нибудь выборочно фильтровать LSA5? Надоело, что исключать внешние префиксы можно только на ASBR? Вы обратились по адресу! Сегодня я бы хотел рассказать про подход, позволяющий фильтровать LSA5 в том числе на ABR. Если после этих слов на ум приходят stub зоны, то статье всё равно будет, что предложить: вишенка на торте неизбеж��о связана с разделением OSPF на зоны, хотя рассказ про stub – это отдельная история.

Речь пойдёт о следующей топологии:

OSPF зоны – самые что ни на есть обычные, без излишеств. Роли маршрутизаторов в этой схеме такие:

  • R2 и R3 – ABR’ы;

  • R1 – внутренний для зоны 1;

  • R4 – ASBR, который импортирует в OSPF префиксы, полученные от R5 по eBGP.

Задача следующая: необходимо обеспечить связность с R5 для всех маршрутизаторов домена OSPF, кроме тех, что находятся в зоне 1. R2 можно считать исключением, поскольку он является частью зоны 0, поэтому доступ до R5 ему разрешён. Начальная настройка довольно проста, поэтому я приведу конфигурацию R4 в качестве примера адресации:

R4(config)#int lo 0
R4(config-if)#ip address 4.4.4.4 255.255.255.255
R4(config)#int f0/0
R4(config-if)#ip address 192.168.34.4 255.255.255.0
R4(config-if)#no sh
R4(config)#int f0/1
R4(config-if)#ip address 192.168.45.4 255.255.255.0
R4(config-if)#no sh
R4(config)#router ospf 1
R4(config-router)#network 192.168.34.0 0.0.0.255 area 2
R4(config-router)#network 4.4.4.4 0.0.0.0 area 2        
R4(config-router)#redistribute bgp 4 subnets
R4(config)#router bgp 4
R4(config-router)#bgp router-id 4.4.4.4
R4(config-router)#no bgp default ipv4-unicast 
R4(config-router)#neighbor 192.168.45.5 remote 5
R4(config-router)#address-family ipv4
R4(config-router-af)#neighbor 192.168.45.5 activate 
R4(config-router-af)#redistribute ospf 1 

Самый очевидный способ предотвратить попадание 5.5.5.5/32 в зону 1 – это превратить её в stub зону. Однако у этого подхода есть существенный недостаток: изменение типа зоны происходит с перерывом сервиса:

The OSPF protocol ensures that all routers belonging to an area agree on whether the area has been configured as a stub. This guarantees that no confusion will arise in the flooding of AS-external-LSAs.

Вольный перевод:

Протокол OSPF требует, чтобы все маршрутизаторы зоны имели одинаковое представление о том, является ли зона stub. Это позволяет обеспечить одинаковое поведение маршрутизаторов при рассылке внешних LSA внутри зоны.

Что же делать, если нужно отфильтровать 5.5.5.5/32 без остановки сервиса? Можно было бы исключить необходимые OSPF маршруты из таблицы маршрутизации. Этот подход, однако, подразумевает настройку каждого маршрутизатора в отдельности, что является достаточно трудоёмким процессом и, как следствие, повышает вероятность возникновения ошибки.

Откровенно говоря, способа отфильтровать LSA5 напрямую в обход ASBR не существует, это вытекает из правил работы OSPF. Однако можно умышленно “испортить” LSA5 таким образом, чтобы маршрутизаторы з��ны не могли корректно его использовать для расчёта маршрута и, как следствие, поместить результат в таблицу маршрутизации. Посмотрите на формат LSA5, какие поля доступны для изменения инженером?

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            LS age             |     Options   |      5        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Link State ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     LS sequence number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         LS checksum           |             length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Network Mask                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|     0       |                  metric                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Forwarding address                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      External Route Tag                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Если выбор пал на Forwarding address (FA), то вы на верном пути:

If the forwarding address is non-zero, look up the forwarding address in the routing table. The matching routing table entry must specify an intra-area or inter-area path; if no such path exists, do nothing with the LSA and consider the next in the list.

Вольный перевод:

Если значение FA ненулевое, необходимо сверить это значение с таблицей маршрутизации. Подходящий маршрут должен быть внутренним маршрутом OSPF, внутризональным или межзональным. Если подходяший маршрут не найден, соответствующий LSA следует проигнорировать и перейти к обработке следующего LSA в списке.

Пока что FA в LSA5 для 5.5.5.5/32 заполнен нулями:

R1#show ip ospf database external 5.5.5.5

            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Type-5 AS External Link States

  Routing Bit Set on this LSA in topology Base with MTID 0
  LS age: 139
  Options: (No TOS-capability, DC, Upward)
  LS Type: AS External Link
  Link State ID: 5.5.5.5 (External Network Number )
  Advertising Router: 4.4.4.4
  LS Seq Number: 80000001
  Checksum: 0x2466
  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: 5

В Cisco IOS есть ряд условий для заполнения FA ненулевым значением:

  • OSPF должен быть включен на next-hop интерфейсе ASBR;

  • ASBR next-hop интерфейс не должен быть пассивным;

  • тип next-hop интерфейса ASBR не должен быть point-to-point или point-to-multipoint;

На данный момент ни одно из этих условий не выполнено. Чтобы это исправить, достаточно включить OSPF на R4 f0/1 (next-hop интерфейс); по умолчанию тип интерфейса OSPF в Cisco IOS – широковещательный, поэтому изменять этот параметр явным образом не нужно.

R4(config)#int f0/1     
R4(config-if)#ip ospf 1 area 2
R1#show ip ospf database external 5.5.5.5

            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Type-5 AS External Link States

  Routing Bit Set on this LSA in topology Base with MTID 0
  LS age: 35
  Options: (No TOS-capability, DC, Upward)
  LS Type: AS External Link
  Link State ID: 5.5.5.5 (External Network Number )
  Advertising Router: 4.4.4.4
  LS Seq Number: 80000002
  Checksum: 0xE30A
  Length: 36
  Network Mask: /32
	Metric Type: 2 (Larger than any link state path)
	MTID: 0 
	Metric: 1 
	Forward Address: 192.168.45.5
	External Route Tag: 5

Согласно RFC, FA должен быть доступен через внутренний маршрут OSPF. В таком случае достаточно отфильтровать соответствующий префикс на R2 (ABR), чтобы 5.5.5.5/32 оказался “негодным” для всей зоны:

R2(config)#ip prefix-list NO_FA deny 192.168.45.0/24
R2(config)#ip prefix-list NO_FA permit 0.0.0.0/0 le 32
R2(config)#router ospf 1
R2(config-router)#area 1 filter-list prefix NO_FA in
R1#show ip route 5.5.5.5 255.255.255.255
% Network not in table
R1#show ip ospf database external 5.5.5.5

            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Type-5 AS External Link States

  LS age: 336
  Options: (No TOS-capability, DC, Upward)
  LS Type: AS External Link
  Link State ID: 5.5.5.5 (External Network Number )
  Advertising Router: 4.4.4.4
  LS Seq Number: 80000002
  Checksum: 0xE30A
  Length: 36
  Network Mask: /32
	Metric Type: 2 (Larger than any link state path)
	MTID: 0 
	Metric: 1 
	Forward Address: 192.168.45.5
	External Route Tag: 5
R1#
R1#show ip cef 5.5.5.5 det
0.0.0.0/0, epoch 0, flags default route handler, default route
  no route

Очевидно, что связность других маршрутизаторов сети, включая R2, не нарушена:

R2#show ip route 5.5.5.5 255.255.255.255
Routing entry for 5.5.5.5/32
  Known via "ospf 1", distance 110, metric 1
  Tag 5, type extern 2, forward metric 3
  Last update from 192.168.23.3 on FastEthernet0/1, 00:07:51 ago
  Routing Descriptor Blocks:
  * 192.168.23.3, from 4.4.4.4, 00:07:51 ago, via FastEthernet0/1
      Route metric is 1, traffic share count is 1
      Route tag 5
R2#show ip cef 5.5.5.5 det
5.5.5.5/32, epoch 0
  nexthop 192.168.23.3 FastEthernet0/1

Задача выполнена: R1 потерял маршрут до 5.5.5.5/32, в то время как остальные маршрутизаторы сети её сохранили. Описанный подход к фильтрации LSA5 может пригодиться в ситуации, когда нужно запретить префиксы только определённого ASBR. Stub зоны, очевидно, оказываются для этого бесполезны, т.к. они блокируют любые LSA5 на границе зоны. Если по каким-либо причинам недопустимо включать OSPF на интерфейсе в сторону R5, можно конвертировать зону 2 в NSSA зону и использовать 4.4.4.4/32 в качестве FA для 5.5.5.5/32.

Спасибо за рецензию: Анастасии Куралевой