Динамическая маршрутизация OSPF на коммутаторах SNR

Динамическая маршрутизация OSPF на коммутаторах SNR

Оригинальная статья доступна по ссылке
Автор оригинальной статьи: Артем Рябухин

В рамках данной темы планируется написание цикла статей. Сегодня мы расскажем о динамической маршрутизации, которая используется практически в каждой более-менее крупной сети, будь то сеть предприятия или сеть провайдера.

В данной статье мы рассмотрим следующие вопросы:

  • Что такое динамическая маршрутизация и для чего она используется.
  • Протоколы динамической маршрутизации на коммутаторах SNR.
  • Протокол OSPF и примеры настройки протокола OSPF на коммутаторах SNR.

Динамическая маршрутизация

Использование статической маршрутизации оправдано только в случае небольшого количества подсетей и полной уверенности в том, что конфигурация сети не будет меняться, ведь в случае изменений в сети необходимо реконфигурировать все маршруты вручную. Здесь и поможет применение одного (а то и нескольких) протоколов динамической маршрутизации, которые позволяют автоматически выстраивать и перестраивать маршруты в сети в случае аварий, при масштабировании сети, а также балансировке трафика.

OSPF

OSPF – протокол динамической маршрутизации, который описан в RFC_2328(V2) и RFC_5340(V3). Он используется для обмена маршрутной информацией в пределах одной автономной системы. OSPF является наиболее распространенным протоколом маршрутизации, который поддерживается практически любым оборудованием, в том числе и L2+ и L3 коммутаторами SNR. Транспортным протоколом для OSPF выступает протокол IP.

OSPF работает поверх протокола IP и использует мультикаст-адреса для обмена маршрутной информацией. Данные о маршрутах в протоколе OSPF передаются в виде сообщений LSA (Link State Advertisement). Маршрутизаторы OSPF хранят информацию о всех маршрутах сети в базе состояния каналов LSDB и выбирают из неё лучшие.

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

Типы маршрутизаторов в OSPF

Для начала необходимо обозначить какие типы маршрутизаторов бывают:

  • Internal router – маршрутизатор, у которого все стыковочные интерфейсы находятся в одной зоне. Такой маршрутизатор не обменивается маршрутной информацией с другими AS и имеет одну LSDB.
  • Area border router (ABR) – маршрутизатор, который находится на границе с магистральной зоной, и служит шлюзом для трафика, который проходит между зонами. Хотя бы один интерфейс такого маршрутизатора должен находиться в магистральной зоне. Для каждой зоны ABR имеет отдельную LSDB.
  • Backbone router – магистральный маршрутизатор. Хотя бы один интерфейс такого маршрутизатора должен находиться в магистральной зоне. Внутренний маршрутизатор, у которого есть интерфейсы, принадлежащие нулевой зоне, тоже будет считаться магистральным. Может быть как ABR, так и не быть им.
  • AS boundary router (ASBR) – такой маршрутизатор может обмениваться маршрутами с маршрутизаторами в других AS, или маршрутизаторами, использующими другой протокол маршрутизации. ASBR может быть в любом месте AS и являться как магистральным, так и внутренним или пограничным.

Типы зон OSPF

Разделение AS на зоны OSPF может снизить загрузку CPU маршрутизаторов, сократить размер LSDB и сократить количество пакетов LSA.

Зоны бывают следующих типов:

  • Backbone (Area 0) – Магистральная зона OSPF. Это обычная зона, через которую происходят все взаимодействия между другими зонами.
  • Normal – Зона с номером отличным от 0. Такой тип устанавливается по умолчанию, если в конфигурации не указан иной.
  • Stub – Маршрутизаторы в такой зоне не принимают информацию об External-маршрутах, но принимают маршруты из других зон. Маршрутизатор в Stub-зоне не может выступать в качестве ASBR. Чтобы передавать трафик за границу AS, будет использован маршрут по умолчанию, транслируемый от ASR. Для настройки такого типа зон используется команда area X stub.
  • Totally Stub – Stub-зона, которая принимает только маршрут по умолчанию. Для настройки такого типа зон используется команда area X stub no-summary.
  • NSSA – Stub-зона, но маршрутизатор в такой зоне может выступать в качестве ASBR. Для трансляции External маршрутов используется LSA Type 7, которые трансформируются в LSA Type 5 на ASR. Для настройки такого типа зон используется команда area X nssa.
  • Totally NSSA – Totally stub зона, но в ней может находиться ASBR. Имеет только маршрут по умолчанию. Для настройки такого типа зон используется команда area X nssa no-summary.

Базовая настройка OSPF

В качестве первого примера рассмотрим случай, если у нас всего одна магистральная зона (Area 0).

Допустим, у нас имеются коммутаторы SNR-S2995G-24FX, которые используются на уровне агрегации в сети оператора связи. На R1 терминируются клиенты с подсетью 10.10.11.0/24, которую мы хотим анонсировать и передать на BRAS, а также хотим, чтобы между коммутаторами была L3-связность.

Для такой ситуации оправдано применение протокола OSPF, т.к. количество коммутаторов и подсетей будет расти в будущем. Сложность масштабируемости и настройки статической адресации также будут быстро увеличиваться. В случае применения OSPF нам необходимо лишь выполнить первоначальную настройку и в будущем OSPF будет самостоятельно анонсировать добавленные подсети (добавленные на SVI подсети будут иметь тип Connected. Для того, чтобы OSPF перекладывал маршруты из Connected в OSPF, необходимо применить команду redistribute connected. Это мы рассмотрим во втором примере данной статьи).

В нашем примере схема будет выглядеть следующим образом:

Рисунок 1. Одна магистральная зона (Area 0)
Рисунок 1. Одна магистральная зона (Area 0)

Конфигурация R1:

conf t
vlan 10;3000
interface vlan 10
 ip address 172.31.1.1 255.255.255.252
!
interface vlan 1000
 ip address 10.10.11.1 255.255.255.0
!
interface Loopback1
 ip address 10.10.10.11 255.255.255.255
!
interface E1/0/1
 switchport access vlan 10
!
router ospf 1
 ospf router-id 10.10.10.11
 network 172.31.1.0/30 area 0
 network 10.10.11.0/24 area 0
 network 10.10.10.11/32 area 0
end

Конфигурация R2:

conf t
vlan 10
interface vlan 10
 ip address 172.31.1.2 255.255.255.252
!
interface Loopback1
 ip address 10.10.10.12 255.255.255.255
!
interface E1/0/1
 switchport access vlan 10
!
router ospf 1
 ospf router-id 10.10.10.12
 network 172.31.1.0/30 area 0
 network 10.10.10.12/32 area 0
end

После применения конфигурации, приведенной выше, коммутаторы устанавливают OSPF-соседство, IP-адреса Loopback-интерфейсов и подсети с SVI 3000 с R1 передаются на R2. Начинается процесс установления соединения, который должен пройти через следующие этапы:

  1. DOWN – начальное состояние;
  2. Init – после отправки Hello другому коммутатору, он ожидает от другого коммутатора свой hello. В этот момент он находится в состоянии Init;
  3. Full – когда коммутаторы получили всю информацию и LSDB синхронизирована, оба коммутатора переходят в состояние fully adjacent (FULL).

Убедимся, что соседство установилось и подсети R1 доступны через R2 и наоборот:

Как мы видим, соседство установилось и был выбран DR. В нашем случае, R2.

То же мы видим и на R2. Адрес Loopback1 и клиентская подсеть доступны с R2.

Настройка OSPF с использованием нескольких зон

Производительность коммутаторов ограничена. Размеры LSDB могут достигать размеров в тысячи маршрутов, при этом коммутатор тратит много ресурсов на просмотр своей таблицы маршрутизации, а если учесть, что помимо OSPF коммутатор должен обрабатывать и другие задачи, загрузка CPU может достигать критически высоких значений, что скажется на производительности коммутатора. В таких случаях целесообразно применение деления на зоны, которые помогут уменьшить количество маршрутов в LSDB, тем самым снизив нагрузку на CPU. Давайте рассмотрим пример использования NSSA и Totally Stubby area на следующей схеме:

Рисунок 2. Настройка OSPF с использованием нескольких зон
Рисунок 2. Настройка OSPF с использованием нескольких зон

R1:
vlan 1;100;300;1000
Interface Ethernet1/0/1
 description R2
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 100
!
Interface Ethernet1/0/3
 description R3
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 300
!
interface Vlan100
 ip address 172.31.1.1 255.255.255.252
!
interface Vlan300
 ip address 172.31.3.2 255.255.255.252
!
interface Vlan1000
 ip address 10.10.100.1 255.255.255.0
!
interface Loopback1
 ip address 10.10.10.1 255.255.255.255
!
router ospf 1
 ospf router-id 10.10.10.1
 passive-interface Vlan1000
 network 172.31.1.0/30 area 0
 network 172.31.3.0/30 area 0
 redistribute connected
!

R2:

vlan 1;100;200;400
!
Interface Ethernet1/0/1
 description R1
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 100
!
Interface Ethernet1/0/2
 description R3
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 200 
!
Interface Ethernet1/0/4
 description R4
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 400 
!
interface Vlan100
 ip address 172.31.1.2 255.255.255.252
!
interface Vlan200
 ip address 172.31.2.1 255.255.255.252
!
interface Vlan400
 ip address 172.31.4.1 255.255.255.252
!
interface Loopback1
 ip address 10.10.10.2 255.255.255.255
!
router ospf 1
 ospf router-id 10.10.10.2
 area 1 stub no-summary
 network 172.31.1.0/30 area 0
 network 172.31.2.0/30 area 0
 network 172.31.4.0/30 area 1
 redistribute connected
!

R3:

vlan 1;200;300;500
!
Interface Ethernet1/0/2
 description R2
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 200 
!
Interface Ethernet1/0/3
 description R1
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 300
!
Interface Ethernet1/0/5
 description R5
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 500
!
interface Vlan200
 ip address 172.31.2.2 255.255.255.252
!
interface Vlan300
 ip address 172.31.3.1 255.255.255.252
!
interface Vlan500
 ip address 172.31.5.1 255.255.255.252
!
interface Loopback1
 ip address 10.10.10.3 255.255.255.255
!
router ospf 1
 ospf router-id 10.10.10.3
 area 2 nssa default-information-originate
 network 172.31.2.0/30 area 0
 network 172.31.3.0/30 area 0
 network 172.31.5.0/30 area 2
 redistribute connected
!

R4:

vlan 1;400;3000
!
interface Vlan400
 ip address 172.31.4.2 255.255.255.252
!
interface Vlan3000
 ip address 10.10.120.1 255.255.255.0
!
Interface Ethernet1/0/4
 description R2
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 400
!
interface Loopback1
 ip address 10.10.10.4 255.255.255.255
!
router ospf 1
 ospf router-id 10.10.10.4
 passive-interface Vlan3000
 area 1 stub
 network 10.10.10.4/32 area 1
 network 10.10.120.0/24 area 1
 network 172.31.4.0/30 area 1
!

R5:

vlan 1;500;2000
!
Interface Ethernet1/0/5
 description R3
 switchport discard packet untag
 switchport mode trunk
 switchport trunk allowed vlan 500;2000 
!
interface Vlan500
 ip address 172.31.5.2 255.255.255.252
!
interface Vlan2000
 ip address 10.10.110.1 255.255.255.0
!
interface Loopback1
 ip address 10.10.10.5 255.255.255.255
!
router ospf 1
 ospf router-id 10.10.10.5
 passive-interface Vlan2000
 area 2 nssa
 network 172.31.5.0/30 area 2
 redistribute connected
!

На данной схеме приведена сеть, в которой используется как Totally stubby (R2-R4), так и NSSA (R3-R5) зоны.

Внешние маршруты других зон в NSSA (R5) будут заменены на маршрут по умолчанию.

Для Totally stubby-зоны (R4) все маршруты будут заменены на маршрут по умолчанию.

Для анонса сетей, находящихся в Totally stubby зоне, необходимо указать их в Router OSPF.

Для анонса адресов Loopback в Area 0 используем команду redistribute connected. Это позволит нам не только упростить конфигурацию, но и сократить количество маршрутов, которые будут анонсироваться в другие типы зон, так как такие маршруты будут считаться External.

Для того, чтобы коммутаторы не искали соседей за SVI, на котором находятся клиентские подсети, применим команду passive-interface. Для R2 также применим команду redistribute connected metric-type 1 для того, чтобы увидеть разницу в типе метрик.

Посмотрим на таблицу маршрутов OSPF для маршрутизатора R1:

В данной таблице мы видим все маршруты, которые анонсируются на R1 путем OSPF. Маршруты до Loopback-адресов R2, R3 и R5 анонсируются как “E” (LSA Type 5), то есть, получены путем перекладывания маршрутов из другого протокола маршрутизации (в нашем случае из connected). Цифра 1 или 2 после буквы “E” показывает на тип метрики. 1 тип увеличивает метрику маршрута при расчете SPF, а 2 тип нет:

Давайте посмотрим на таблицу маршрутизации OSPF на R2 и R4:

Здесь мы наглядно видим зачем в принципе используются Totally stub – зоны. Вместо десятков маршрутов для нас доступен всего один – маршрут по умолчанию (для того, чтобы R2 анонсировал только маршрут по умолчанию, используем команду area 1 stub no-summary). Несмотря на то, что маршрут всего один, все маршрутизаторы и сети доступны:

R4 не может генерировать LSA Type 5, так как находится в stub-зоне. Адрес Loopback и подсети, подключенные к R4 указаны вручную командой network.

Давайте посмотрим что у нас в NSSA на R5:

Как мы видим, маршруты, которые были redistribute, на R5 не попали, но они доступны через default, анонсируемый R3. Для того, чтобы R3 передавал информацию о маршруте по умолчанию мы применили команду area 2 nssa default-information-originate.

Так как R5 находится в NSSA, то он может выступать в качестве ASBR, а также перекладывать маршруты из других протоколов маршрутизации. Это значит, что в NSSA могут находится External-маршруты в виде специального LSA Type 7, который может находиться только в NSSA. На границе зоны пограничный коммутатор преобразует LSA Type 7 в LSA Type 5.

Для фильтрации маршрутов можно также воспользоваться функционалом ACL. Например, если на коммутаторе в NSSA-зоне мы хотим принимать только маршрут по умолчанию и маршруты из подсети 172.31.0.0/16, то необходимо создать ACL на R5 типа:

access-list 100 permit ip host-source 0.0.0.0 any-destination
access-list 100 permit ip 172.31.0.0 0.0.255.255 any-destination
access-list 100 permit ospf host-source 0.0.0.0 any-destination
access-list 100 permit ospf 172.31.0.0 0.0.255.255 any-destination
access-list 100 deny ospf any-source any-destination
access-list 100 deny ip any-source any-destination
!
router ospf 1
filter-policy 100
!

В таком случае таблица маршрутов будет иметь следующий вид:

Количество маршрутов сократилось, но все адреса Loopback и подсетей доступны через маршрут по умолчанию.

Заключение

В данной статье мы рассмотрели принципы работы протокола OSPF и его настройке на коммутаторах SNR. В будущем также планируется выход второй части данной статьи, посвященный протоколу BGP.

Рекомендуем ознакомиться со статьей: Динамическая маршрутизация BGP на коммутаторах SNR