У какой метрики в Linux есть маршрут без метрики?

Многие дистрибутивы linux можно использовать в оперативной памяти с помощью живой установки, у меня однажды был Fedora, ubuntu и производные на флеш-накопителе, просто проверьте, предлагает ли live этого дистрибутива постоянство, чтобы вы могли сохранять модификации. Также имейте в виду, что вся система должна быть загружена на ваш плунжер, поэтому запуск системы может занять больше времени, чем обычно.

10
22.02.2018, 17:29
2 ответа

Вы уверены в своем первом наблюдении? Что тогда показывают ip route showили route -n? Изменится ли результат, если вы добавите proto staticв первом случае?

Я нашел как минимум два ресурса, в которых прямо говорится, что 0является значением по умолчанию в Linux:

  • http://0pointer.de/lennart/projects/ifmetric/:Метрика по умолчанию для маршрута в ядре Linux равна 0, что означает наивысший приоритет.
  • http://www.man7.org/linux/man-pages/man8/route.8.html:Если этот параметр не указан, метрика для семейства адресов inet6 (IPv6 )по умолчанию равна «1», для inet (IPv4 )— по умолчанию «0».(затем намекает, что значение по умолчанию может быть другим при использовании iproute2, но анализ этих источников не показывает, что это такое)

Чтобы разобраться в этом, наверняка потребуется хакер ядра Linux.

Кроме того, любое значение по умолчанию явно зависит от ОС. В этой статье (https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes), например, показано, что Windows выбирает метрику по умолчанию на основе пропускной способности канала.

8
27.01.2020, 20:02

Поскольку эти маршруты находятся в разных подсетях, здесь задействовано нечто большее, чем просто метрика. Если исходящий трафик находится в подсети 192.168.1.1, например, и , в вашей таблице маршрутизации есть соответствующий маршрут по умолчанию, отличный от -, тогда этот маршрут будет соответствовать через самый длинный префикс, соответствующий . ] до того, как метрика будет рассмотрена.

Предполагая, что не -маршрут по умолчанию не совпадает,тогда отсутствие метрики должно интерпретироваться ядром как имеющее метрику 0 и, следовательно, маршрут с наивысшим приоритетом. Хотя это упрощенное представление, потому что некоторые демоны маршрутизации позже преобразуют эту метрику по умолчанию в другое значение, например 1024. Я полагаю, что это то, что происходит с вами и вашим безымянным дистрибутивом.

Если ip routeвообще не показывает никакой метрики, вы можете убедиться, что она действительно равна 0, используя более старую команду route -nиз пакета инструментов net -или cat /proc/net/route. Однако этот вывод не обязательно соответствует тому, что демон маршрутизации будет использовать внутри, когда встретит значение метрики, равное 0.

Более того, способ создания маршрута также имеет значение. ip routeиспользует netlink API, а routeиспользует ioctl. Код создания метрик по умолчанию между двумя подходами приводит к разным значениям метрик. Например, :создание маршрута по умолчанию IPv6 через ip routeприведет к значению метрики 1024 на RHEL 7, а создание того же маршрута через routeприведет к метрике 1.

Из RedHat:

  • if nothing is passed to the route command as route metric the value of 1 is used by the command itself.
  • If nothing is passed to the ip command as route metric the attribute is not created at all and kernel understands to it as 0, which is later translated 1024 as default.
8
27.01.2020, 20:02

Теги

Похожие вопросы