Хотелось ли вам когда-нибудь выборочно фильтровать 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 2R1#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 inR1#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.
Спасибо за рецензию: Анастасии Куралевой
