Я понимаю, что Linux выбирает наиболее конкретный маршрут к месту назначения при выборе маршрутизации . Но как насчет метрики маршрута? Имеет ли он более высокий приоритет, чем специфика маршрута?
Ссылка на детали алгоритма выбора маршрутизации, используемого в Linux, также будет принята.
Метрика маршрутов должна устанавливать предпочтения среди маршрутов с одинаковой специфичностью. Это верно для маршрутизации в целом (то есть Cisco, Windows и т. Д.). Таким образом, модель работает так:
Найти наиболее конкретный маршрут (он же совпадает с самым длинным префиксом * )
Если существует несколько маршрутов с одинаковой специфичностью, выберите тот, который имеет наименьшее административное расстояние (это различает такие вещи, как напрямую подключенные маршруты, статические маршруты и различные протоколы маршрутизации).
В рамках этого протокола маршрутизации и конкретного маршрута (если специфика маршрута и административное расстояние одинаковы), выберите маршрут с наименьшей метрикой
Обратите внимание, что существуют другие вещи, которые могут использоваться в такой маршрутизации на основе политик, которая позволяет выполнять такие действия, как маршрутизация на основе исходного IP-адреса. Но специфику маршрута, административную дистанцию и метрику я бы назвал основными тремя вещами.
* Это называется самым длинным совпадением префикса, потому что двоичная подсеть (например, / 24) выглядит так 11111111.11111111.11111111.00000000. Таким образом, маршрутизатор может просто сканировать префикс для двоичных 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 .
Это не то, что srcделает атрибут. Вы хотите читать man ip-routeили другие документы. И это работает с IPv4. Я использую его для получения всего трафика, включая трафик маршрутизатора, через один IPSec-туннель между сетями.
Зан Рысь
1
RTA_SRCАтрибут делает именно то , что я сказал; к нему можно получить доступ с помощью fromопции ipкоманды. Опция ipкоманды srcустанавливает RTA_PREFSRCатрибут, который вы и описываете.
zebra
демона и отправляет ядру только выбранные маршруты - поэтому ядру никогда не нужно иметь дело с AD. Мне нужно проверить, но я думаю, что Quagga устанавливает постоянную метрику ядра.Linux предоставляет ряд инструментов для гибкого выбора маршрутизации.
Таблица маршрутизации
В простейшем случае есть только одна таблица маршрутизации ядра и нет маршрутов с атрибутом SRC. Эта таблица содержит ряд маршрутов, которые были размещены там вручную (
ip route add
), демоном DHCP или демонами маршрутизации. В этом случае ядро выбирает:Обратите внимание, что метрика ядра (отображаемая
ip route show
) выбирается демоном маршрутизации и не обязательно связана с метрикой какого-либо конкретного протокола маршрутизации. Например, Quagga использует одну и ту же метрику для всех маршрутов, которые она устанавливает в ядре, независимо от метрики протокола.Маршрутные источники
Linux также поддерживает маршруты с атрибутом SRC, которые соответствуют только пакетам с заданным адресом источника. SRC работает только для IPv6 и глючил до самого последнего времени (3.11, если память служит); Я не рекомендую использовать его, если вы не знаете, что делаете.
Несколько таблиц маршрутизации
Если вам требуется больше гибкости, чем предусмотрено выше, вам нужно поиграть с несколькими таблицами маршрутизации и написать правила для выбора одной конкретной таблицы маршрутизации для каждого пакета. Обычный метод - отправка по адресу источника для моделирования маршрутов, специфичных для источника. Другой метод - запустить каждый демон маршрутизации в своей собственной таблице маршрутизации и смоделировать «административное расстояние» Cisco. Все это подробно описано в главе 4 LARTC .
источник
src
делает атрибут. Вы хотите читатьman ip-route
или другие документы. И это работает с IPv4. Я использую его для получения всего трафика, включая трафик маршрутизатора, через один IPSec-туннель между сетями.RTA_SRC
Атрибут делает именно то , что я сказал; к нему можно получить доступ с помощьюfrom
опцииip
команды. Опцияip
командыsrc
устанавливаетRTA_PREFSRC
атрибут, который вы и описываете.