Выбор маршрута: специфичность против метрики

17

Я понимаю, что Linux выбирает наиболее конкретный маршрут к месту назначения при выборе маршрутизации . Но как насчет метрики маршрута? Имеет ли он более высокий приоритет, чем специфика маршрута?

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

Евгений Ярмаш
источник

Ответы:

26

Метрика маршрутов должна устанавливать предпочтения среди маршрутов с одинаковой специфичностью. Это верно для маршрутизации в целом (то есть Cisco, Windows и т. Д.). Таким образом, модель работает так:

  1. Найти наиболее конкретный маршрут (он же совпадает с самым длинным префиксом * )
  2. Если существует несколько маршрутов с одинаковой специфичностью, выберите тот, который имеет наименьшее административное расстояние (это различает такие вещи, как напрямую подключенные маршруты, статические маршруты и различные протоколы маршрутизации).
  3. В рамках этого протокола маршрутизации и конкретного маршрута (если специфика маршрута и административное расстояние одинаковы), выберите маршрут с наименьшей метрикой

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

* Это называется самым длинным совпадением префикса, потому что двоичная подсеть (например, / 24) выглядит так 11111111.11111111.11111111.00000000. Таким образом, маршрутизатор может просто сканировать префикс для двоичных 1 и останавливаться, как только он достигает нуля, и затем он соответствует префиксу.

Кайл Брандт
источник
1
Это не совсем верно для Linux, где нет различия между метрической и административной дистанцией.
июля
1
@jch Квагга и Ко подражать AD, устанавливая метрику соответственно? (Не то, чтобы ваша точка зрения не была жизненно важна, просто любопытно)
Кайл Брандт
1
Нет, Quagga внедряет AD внутри zebraдемона и отправляет ядру только выбранные маршруты - поэтому ядру никогда не нужно иметь дело с AD. Мне нужно проверить, но я думаю, что Quagga устанавливает постоянную метрику ядра.
JCH
Просто хочу отметить, что это не относится к мостам Ethernet, например, два одинаковых маршрута через разные устройства с одинаковой метрикой по-прежнему приводили к неверному направлению трафика по более длинному и некорректному каналу.
Ариб Су Ясир
9

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

Таблица маршрутизации

В простейшем случае есть только одна таблица маршрутизации ядра и нет маршрутов с атрибутом SRC. Эта таблица содержит ряд маршрутов, которые были размещены там вручную ( ip route add), демоном DHCP или демонами маршрутизации. В этом случае ядро ​​выбирает:

  • самый конкретный маршрут;
  • если есть несколько одинаково определенных маршрутов, то тот, у которого наименьшая метрика ядра.

Обратите внимание, что метрика ядра (отображаемая ip route show) выбирается демоном маршрутизации и не обязательно связана с метрикой какого-либо конкретного протокола маршрутизации. Например, Quagga использует одну и ту же метрику для всех маршрутов, которые она устанавливает в ядре, независимо от метрики протокола.

Маршрутные источники

Linux также поддерживает маршруты с атрибутом SRC, которые соответствуют только пакетам с заданным адресом источника. SRC работает только для IPv6 и глючил до самого последнего времени (3.11, если память служит); Я не рекомендую использовать его, если вы не знаете, что делаете.

Несколько таблиц маршрутизации

Если вам требуется больше гибкости, чем предусмотрено выше, вам нужно поиграть с несколькими таблицами маршрутизации и написать правила для выбора одной конкретной таблицы маршрутизации для каждого пакета. Обычный метод - отправка по адресу источника для моделирования маршрутов, специфичных для источника. Другой метод - запустить каждый демон маршрутизации в своей собственной таблице маршрутизации и смоделировать «административное расстояние» Cisco. Все это подробно описано в главе 4 LARTC .

JCH
источник
Это не то, что srcделает атрибут. Вы хотите читать man ip-routeили другие документы. И это работает с IPv4. Я использую его для получения всего трафика, включая трафик маршрутизатора, через один IPSec-туннель между сетями.
Зан Рысь
1
RTA_SRCАтрибут делает именно то , что я сказал; к нему можно получить доступ с помощью fromопции ipкоманды. Опция ipкоманды srcустанавливает RTA_PREFSRCатрибут, который вы и описываете.
JCH