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