Особенности «национальной» маршрутизации

от автора

Каждый, кому приходится заниматься хоть немного IP-сетями представляет основы IP-маршрутизации.
Можно не знать протоколов динамической маршрутизации, или знать, но не до тонкостей. Можно не быть гуру OSPF, BGP и иже с ними, но тот алгоритм, по которому уже из сформированной route-таблицы (сформированной тем или иным способом, вручную или благодаря динамике) выбирается next-hop пердставляют многие.

Действительно, несложный алгоритм поиска наиболее специфичного маршрута. Все достаточно очевидно. Если есть, допустим, маршрут на сеть 192.168.0.0/24 и на хост 192.168.0.1/32, то для IP-назначения 192.168.0.1 второй маршрут наиболее специфичен, а значит наиболее предпочтительный.

Но все становится не так просто, когда появляется такой дополнительный параметр, как административная дистанция ad (cisco) или prference (Allied Telesyn).

Если говорить совсем коротко, то ad — это мера достоверности источника маршрута. Чем эта величина меньше, тем лучше, тем больше доверия, тем предпочтительней маршрут.

Так для присоединенных (connected) сетей она равняется 0, для различных протоколов динамической маршрутизации см.
ru.wikipedia.org/wiki/%D0%90%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5

Но вот интересный вопрос. А как будет вести себя роутер, если у него будет более спецефичный маршрут, но большее, т. е. худшее административное расстояние? Вот тут-то и вылезают ньюансы. Дьявол, как обычно в мелочах.

Берем L3 свич cisco и пробуем (заменяю некоторые октеты на xx). Ad второго маршрута = 100.

ip route 192.168.0.0 255.255.255.0 192.168.xx.1
ip route 192.168.0.1 255.255.255.255 192.168.xx.2 100

Для пакета, IP-адрес назначения которого — 192.168.0.1 второй маршрут очевидно более специфичен и по всей логике именно он должен быть выбран.
Проверяем.

sh ip rou 192.168.0.1
Routing entry for 192.168.0.1/32
Known via «static», distance 100, metric 0
Routing Descriptor Blocks:
* 192.168.xx.2
Route metric is 0, traffic share count is 1

Как видим, административное расстояние 100 нисколько не помешало быть этому маршруту приоритетным.
На всякий случай смотрим

sh ip rou 192.168.0.2
Routing entry for 192.168.0.0/24
Known via «static», distance 1, metric 0
Routing Descriptor Blocks:
* 192.168.xx.1
Route metric is 0, traffic share count is 1

Лучшее значение дистанции 1 не позволило маршруту «перебить» более спецефичный для IP-назначения 192.168.0.1

Достаточно логично. Ведь 192.168.0.0/255.255.255.0 это просто другая по отношению к 192.168.0.1/255.255.255.255 сеть.
Но не все производители придерживаются этой же логики.

Берем L3 устройство Allied Telesyn.

add ip rou=192.168.0.0 mask=255.255.255.0 int=vlan1 next=172.16.xx.2
set ip rou=192.168.0.0 mask=255.255.255.0 int=vlan1 next=172.16.xx.2 pref=1

add ip rou=192.168.0.1 mask=255.255.255.255 int=vlan1 next=172.16.xx.3

sh ip rou (значение pref выделено)

IP Routes

192.168.0.0 255.255.255.0 172.16.xx.2 — vlan1 1507
direct 0 static 1 1

192.168.0.1 255.255.255.255 172.16.xx.3 — vlan1 1490
direct 0 static 1 60

Для AT параметр pref является аналогом ad у cisco. Бросается в глаза значение pref 60 для статического маршрута, заданного без явного указания этого параметра. Но нашему эксперименту это не помеха. В итоге мы имеем то, что надо. Менее специфичный маршрут с меньшей/лучшей дистанцией и максимально специфичный с большей (т. е. худшей).

trace 192.168.0.1

Trace from 172.16.xx.1 to 192.168.0.1, 1-30 hops
0. 0 3 11 (ms) 172.16.xx.2

Неожиданный результат. Идем по маршруту для 192.168.0.0/24.

Но с точки зрения производителя все ровно как надо. Читаем в мануале про алгоритм выбора маршрута.

1. The router inspects the preference value of each candidate route and selects
the route with the lowest preference value.

2. If multiple routes share the lowest preference value, then the router inspects
the metric value of each of these routes and selects the route with the lowest
metric.

3. If multiple routes share the lowest preference and metric values, then the
router inspects the mask of each of these routes and selects the route with
the longest mask.

Вот такой сюрприз, на маску мы смотрим только в том случае, если у нас одинаковые преференсы/дистанции и одинаковые метрики.
О таком сюрпризе лучше знать заранее, чем потом «чесать в затылке» от неожиданного поведения устройства.

ссылка на оригинал статьи http://habrahabr.ru/post/157541/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *