Jump to content
Калькуляторы

Проблема с маршрутизацией OSPF cisco выбирает неверный маршрут

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

Вот схема сети:

bc9a58c6c30ebdd96e2ac82bb602cb57.png

Предыстория такая. Взялся я за реализацию резервирования основного оборудования связи, смонтировали шкаф, установили туда нужные железки. На схеме это «Cisco3845 резервная» и «Cisco 3560». Начал перевод резервных каналов связи в этот шкаф и получил непонятное мне поведение OSPF. Теперь суть: при пропадании основного, самого быстрого, канала связи – это GRE Tunnel – основная Cisco 3845 записывает в таблицу маршрутизации, что узел «Хост» а также сеть канала Е1 172.20.121.56/30 доступны через арендованный канал связи, скоростью 512 кбит/c, а не через резервную Cisco 3845, хотя если сравнивать метрику маршрутов, то через резервный роутер маршрут быстрее. При этом, все остальные узлы в зоне 0, т.е. Cisco3560, Cisco3750 и резервная Cisco3845, видят хост именно через резервный канал Е1. Узлы в зоне OSPF 4, также выбирают маршрут до зоны 0 через канал Е1. Вот я и не могу понять, почему основной маршрутизатор видит канал Е1 (172.20.121.56/30) не через локальную сеть, а либо через туннель либо через арендованный канал. OSPF-соседство в локальной сети установлено. Вот настройки OSPF (количество анонсируемых сетей обрезал для краткости).

Cisco 3845 основная:

router ospf 255
router-id 172.20.120.4
log-adjacency-changes
area 0.0.0.10 stub
area 0.0.0.20 stub
redistribute static subnets
network 172.20.20.38 0.0.0.0 area 0.0.0.0
network 172.20.120.4 0.0.0.0 area 0.0.0.0
network 172.20.23.278 0.0.0.0 area 0.0.0.4
network 10.175.123.85 0.0.0.0 area 0.0.0.4

Cisco 3845 резервная:

router ospf 255
router-id 172.20.120.5
log-adjacency-changes
area 0.0.0.10 stub
area 0.0.0.20 stub
redistribute static subnets
network 172.20.20.39 0.0.0.0 area 0.0.0.0
network 172.20.120.5 0.0.0.0 area 0.0.0.0
network 172.20.121.57 0.0.0.0 area 0.0.0.4

Сisco 3560:

router ospf 255
router-id 10.75.120.3
network 10.75.120.4 0.0.0.0 area 0.0.0.0
network 172.20.20.40 0.0.0.0 area 0.0.0.0

Cisco 3750:

router ospf 255
router-id 172.20.120.2
log-adjacency-changes
redistribute connected subnets
redistribute static subnets
network 172.20.20.35 0.0.0.0 area 0.0.0.0
network 172.20.120.2 0.0.0.0 area 0.0.0.0

Вывод show ip route с маршрутизаторов.

Cisco 3845 основная:

Routing entry for 172.20.121.56/30
 Known via "ospf 255", distance 110, metric 73, type intra area
 Last update from 172.20.23.238 on Tunnel39, 00:22:48 ago
 Routing Descriptor Blocks:
 * 172.20.23.238, from 172.20.120.61, 00:22:48 ago, via Tunnel39
     Route metric is 73, traffic share count is 1

После выключения основного канала:

Routing entry for 172.20.121.56/30
 Known via "ospf 255", distance 110, metric 295, type intra area
 Last update from 10.175.123.86 on GigabitEthernet0/0.301, 00:00:09 ago
 Routing Descriptor Blocks:
 * 10.175.123.86, from 172.20.120.61, 00:00:09 ago, via GigabitEthernet0/0.301
     Route metric is 295, traffic share count is 1

Cisco3845 резервная:

Routing entry for 172.20.121.56/30
 Known via "connected", distance 0, metric 0 (connected, via interface)
 Routing Descriptor Blocks:
 * directly connected, via Serial0/2/0:1
     Route metric is 0, traffic share count is 1

Наверное, сумбурно написано, у меня уже полная каша в голове. Буду очень благодарен вам за помощь с решением этой проблемы.

Edited by Marker

Share this post


Link to post
Share on other sites

Если это вся сеть, то не заниматься ерундой, засунуть все в зону 0 и рулить приоритетами с помощью ip ospf cost на линках.

Если везде циски - использовать EIGRP, на всех линках задать одинаковый bandwidth, рулить приоритетами с помощью delay.

Share this post


Link to post
Share on other sites

А по сути вопроса - расставь свои ip ospf cost на линках. Внутри зон - минимальные значения, 10 например, на линках между зонами на порядки больше, чем менее приоритетный линк, тем больше значение, 1000, 2000, 3000 например. Не забудь ставить одинаковые с обоих концов линка.

Share this post


Link to post
Share on other sites

Руками косты надо выставлять, ага. Оспф то не знает о том, что у вас толщина линков не соответствует скорости максимальной в нем..

Share this post


Link to post
Share on other sites

Блин, забыл написать в начале поста. Метрику я выставлял указанием на интерфейсах с обеих сторон полосы пропускания, командой bandwidth, сейчас попробовал ставить ip ospf cost, точно такая же ситуация, выбирается более медленный маршрут. Затолкать все маршрутизаторы в нулевую зону нельзя, на рисунке показана только часть сети, и EIGRP тоже реализовать не получится, в сети есть железки других вендоров.

У меня возник такой вопрос: насколько я помню, OSPF при составлении топологии сети запоминает все возможные маршруты до сети, но в таблицу маршрутизации помещается наиболее быстрый, с меньшей метрикой и имеющий более приоритетный тип, например intra-area. Может быть, основная cisco 3845 считает, что маршрут к сети 172.20.121.56/30 через локальную сеть является inter-area или вообще external? Как можно это выяснить?

Вот, посмотрите, записи в таблицах маршрутизации основной Cisco3845 и Cisco3750 при нормальной работе основного канала связи:

Cisco 3845

Routing entry for 10.75.27.128/27
 Known via "ospf 255", distance 110, metric 294, type intra area
 Last update from 172.20.23.238 on Tunnel39, 00:21:25 ago
 Routing Descriptor Blocks:
 * 172.20.23.238, from 172.20.120.40, 00:21:25 ago, via Tunnel39
     Route metric is 294, traffic share count is 1

Cisco 3750

Routing entry for 10.75.27.128/27
 Known via "ospf 255", distance 110, metric 295, type inter area
 Last update from 172.20.20.38 on Vlan255, 00:20:58 ago
 Routing Descriptor Blocks:
 * 172.20.20.38, from 172.20.120.4, 00:20:58 ago, via Vlan255
     Route metric is 295, traffic share count is 1

И после того как я выключаю туннель:

Cisco 3845

Routing entry for 10.75.27.128/27
 Known via "ospf 255", distance 110, metric 2001, type intra area
 Last update from 10.175.123.86 on GigabitEthernet0/0.301, 00:00:01 ago
 Routing Descriptor Blocks:
 * 10.175.123.86, from 172.20.120.40, 00:00:01 ago, via GigabitEthernet0/0.301
     Route metric is 2001, traffic share count is 1

Cisco 3750

Routing entry for 10.75.27.128/27
 Known via "ospf 255", distance 110, metric 554, type inter area
 Last update from 172.20.20.39 on Vlan255, 00:00:01 ago
 Routing Descriptor Blocks:
 * 172.20.20.39, from 172.20.120.5, 00:00:01 ago, via Vlan255
     Route metric is 554, traffic share count is 1

Edited by Marker

Share this post


Link to post
Share on other sites

вам надо на всех линках поставить косты, предварительно посчитав их на бумажке.

 

show ip ospf data покажет вам все :)

Share this post


Link to post
Share on other sites

У меня возник такой вопрос: насколько я помню, OSPF при составлении топологии сети запоминает все возможные маршруты до сети, но в таблицу маршрутизации помещается наиболее быстрый, с меньшей метрикой и имеющий более приоритетный тип,

 

это скорее eigrp, в их терминологии что-то типа feasible successor. OSPF знает только лучший маршрут.

Share this post


Link to post
Share on other sites

У меня возник такой вопрос: насколько я помню, OSPF при составлении топологии сети запоминает все возможные маршруты до сети, но в таблицу маршрутизации помещается наиболее быстрый, с меньшей метрикой и имеющий более приоритетный тип, например intra-area.

Сильно упрощая, примерно так и есть.

 

Может быть, основная cisco 3845 считает, что маршрут к сети 172.20.121.56/30 через локальную сеть является inter-area или вообще external? Как можно это выяснить?

Пишут в выводе sh ip route:

  Known via "ospf 255", distance 110, metric 2001, type intra area

В новых IOS есть команда sh ip ospf rib которая показывает маршруты OSPF (вроде до записи в FIB), там тоже есть данные о метрике и типе маршрута.

Еще вам поможет команда sh ip ospf int brie, можете по выводу проверить актуальный cost интерфейса, может где-то при настройке ошиблись с bandwidth или cost.

Share this post


Link to post
Share on other sites

Пишут в выводе sh ip route:

Но это ведь указывается актуальный маршрут, используемый в данный момент. А как выяснить все возможные маршруты до какой-либо сети, какой командой или командами, если это вообще возможно? На Cisco 3845 IOS не новая, sh ip ospf rib отсутствует. На примере 172.20.121.56/30, вывод show ip ospf database:

           OSPF Router with ID (172.20.120.4) (Process ID 255)

                     Summary Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    963         0x8000014E 0x008078
172.20.121.56   172.20.120.5    972         0x80000106 0x001049
172.20.121.56   172.20.120.36   962         0x80000151 0x00A5FE

               Summary Net Link States (Area 0.0.0.2)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    963         0x8000014E 0x008078

               Summary Net Link States (Area 0.0.0.3)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    963         0x8000015A 0x006884
               Summary Net Link States (Area 0.0.0.8)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    964         0x8000014E 0x008078

               Summary Net Link States (Area 0.0.0.10)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    964         0x8000014E 0x009E5C

               Summary Net Link States (Area 0.0.0.20)

Link ID         ADV Router      Age         Seq#       Checksum
172.20.121.56   172.20.120.4    964         0x8000014E 0x009E5C

Тут ведь просто указывается ID линка, ID анонсирующего роутера, возраст записи, номер последовательности и контрольная сумма?

Метрику перепроверил еще раз, все выставлено как нужно, но основная циска упорно не хочет работать через резервную

Edited by Marker

Share this post


Link to post
Share on other sites

А как выяснить все возможные маршруты до какой-либо сети, какой командой или командами, если это вообще возможно? На Cisco 3845 IOS не новая, sh ip ospf rib отсутствует.

К сожалению просто не получится. Нужно самому строить графы как делает процесс SPF и калькулировать метрики через разные маршрутизаторы принимая во внимания особенности дизайна наподобие типов маршрутов.

 

У вас GRE tunnel, канал E1 и арендованный канал 512К находятся в area 4, "основная циска" всегда видит канал Е1 через area 4 потому что для нее это intra-area маршрут, вне зависимости от костов на линках между 3845 потому что через резервную 3845 маршрут получается inter-area - это особенность дизайна протокола, у него приоритет маршрутов O > IA > E1 > N1 > E2 > N2 (то есть intra-area всегда приоритетнее inter-area, inter-area приоритетнее external type 1 и т.д., метрика на данный выбор не влияет).

 

В вашем случае можно либо везде сделать area 0 (или area 4), но есть опасность что при обрыве LAN линка между свитчами трафик от основной 3845 до резервной (и от 3560 до 3750) побежит через каналы Е1 и 512к. Лучше каналы 512K, E1, GRE tunnel поместить в area 0 (и лучше в нерабочее время - это я сходу надизайнил не особо вникая в особенности сети).

Edited by v_r

Share this post


Link to post
Share on other sites

Можно еще проще - канал 512К перевести в area 0, тогда при обрыве GRE туннеля основная циска будет выбирать между двумя inter-area маршрутами на основании cost.

Share this post


Link to post
Share on other sites

Тут только строить карту с метриками на интерфейсах:

Для этого необходимо будет посчитать вручную метрики каждого ospf интерфейса на устройствах: 3845 основной и 3845 резервный - ge-0/0 и s-0/2/0.

sh ip ospf int ge 0/0 - см. поле Cost.

sh int ge 0/0 - см. поле BW.

И по формуле Metric = reference bandwidth / interface bandwidth - узнаем metric-у интерфейса.

Далее меняем cost на интерфейсах. Изменение bandwidth - это не всегда хорошо.

 

sh ip ospf database - покажет всю карту сети в своей area, со всеми основными и резервными линками. Вывод этой команды должен быть идентичен с другими маршрутизаторами в одной area.

Share this post


Link to post
Share on other sites

Сегодня придумал такой костыль, не знаю уж насколько он изящно смотрится. На основной и резервной цисках 3845 создал GRE туннели:

Cisco 3845 основная

interface Tunnel100
ip address 172.20.23.241 255.255.255.252
tunnel source 172.20.20.38
tunnel destination 172.20.20.39

Cisco 3845 резервная:

interface Tunnel100
ip address 172.20.23.242 255.255.255.252
tunnel source 172.20.20.39
tunnel destination 172.20.20.38

И добавил этот туннель на обеих цисках в OSPF в зону 4. Теперь маршрутизация отрабатывает так как мне нужно, при падении основного канала, в работу включается резервный Е1, а не арендованный канал. Думаю оставить этот костыль как рабочую схему, завтра или на следующей неделе постараюсь провести более масштабное тестирование. Большое спасибо всем, кто принял участие, v_r отдельная благодарность.

Share this post


Link to post
Share on other sites

Такой туннель по идее можно заменить виланом проброшенным через свитчи.

А так - небольшой костыль, да, но имеет право на жизнь.

Share this post


Link to post
Share on other sites

схема - ояипу

конфиги порезаны - ояипу

только телепаты помогут

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this