Я понимаю, что Linux выбирает самый определенный маршрут месту назначения, когда он делает выбор маршрутизации. Но что относительно метрики маршрута? Это имеет более высокий приоритет, чем специфика маршрута?
Ссылка на детали алгоритма выбора маршрутизации, используемого Linux, также ценилась бы.
Метрика маршрутов предназначена для установки предпочтения среди маршрутов с одинаковой специфичностью. Это верно для маршрутизации в целом (например, Cisco, Windows и т. Д.). Таким образом, модель работает следующим образом:
. Обратите внимание, что есть и другие вещи, которые могут происходить при такой маршрутизации на основе политик , которая позволяет вам делать такие вещи, как маршрут на основе исходный IP-адрес. Но специфика маршрута, административное расстояние и метрика - вот что я считаю главными тремя вещами.
* Это называется совпадением по самому длинному префиксу, потому что подсеть в двоичном формате (например, / 24) выглядит как 11111111.11111111.11111111.00000000
. Таким образом, маршрутизатор может просто сканировать префикс на предмет двоичных единиц и останавливаться, как только он достигает нуля, а затем он соответствует префиксу.
Linux предоставляет ряд инструментов для гибкого выбора маршрутизации.
В простейшем случае, есть только одна таблица маршрутизации ядра и нет маршрутов с атрибутом SRC. Эта таблица содержит ряд маршрутов, которые были помещены туда вручную (ip route add
), демоном DHCP, или демонами-маршрутизаторами. В этом случае, ядро выбирает:
Обратите внимание, что метрика ядра (отображаемая ip route show
) выбирается даемоном маршрутизации, и не обязательно связана с метрикой какого-либо конкретного протокола маршрутизации. Например, Quagga использует одну и ту же метрику для всех устанавливаемых ею в ядро маршрутов, независимо от метрики протокола.
Linux также поддерживает маршруты с атрибутом SRC, которые сопоставляют только пакеты с заданным адресом источника. SRC работает только для IPv6, и до недавнего времени был багги (3.11, если память не изменяется); я не рекомендую использовать его, если вы не знаете, что делаете.
Если вам нужна большая гибкость, чем описано выше, вам нужно поиграть с несколькими таблицами маршрутизации и написать правила, чтобы выбрать одну определенную таблицу маршрутизации для каждого пакета. Обычная техника - отправка по адресу источника для моделирования специфических для источника маршрутов. Другой метод - запустить каждого демона маршрутизации в своей собственной таблице маршрутизации и смоделировать "административное расстояние" Cisco. Все это подробно описано в Главе 4 LARTC.
.