Поскольку эти маршруты находятся в разных подсетях, здесь задействовано больше, чем просто метрика. Если исходящий трафик находится, например, в подсети 192.168.1.1, и в вашей таблице маршрутизации есть соответствующий маршрут не по умолчанию, то этот маршрут будет соответствовать по самому длинному совпадению префикса до того, как показатель будет учтен.
Если предположить, что маршрут не по умолчанию не совпадает, то отсутствие метрики должно быть интерпретировано ядром как наличие метрики 0 и, следовательно, маршрута с наивысшим приоритетом. Хотя это упрощенное представление, потому что некоторые демоны маршрутизации позже переведут эту метрику по умолчанию в другое значение, например 1024. Я ожидаю, что это то, что происходит с вами и вашим безымянным дистрибутивом.
Если ip routeметрика вообще не отображается, вы можете подтвердить, что это действительно 0, используя более старую route -nкоманду из пакета net-tools или cat /proc/net/route. Однако эти выходные данные не обязательно совпадают с тем, что демон маршрутизации будет использовать внутри, когда он встречает значение метрики 0.
Кроме того, как вы создаете маршрут тоже имеет значение. ip routeиспользует API-интерфейс netlink, а routeioctl. Код для создания метрик по умолчанию между двумя подходами приводит к различным значениям метрики. Например: создание маршрута IPv6 по умолчанию через ip routeприведет к значению метрики 1024 на RHEL 7, в то время как создание того же маршрута через routeприведет к метрике 1.
Из RedHat :
- если ничего не передано команде route в качестве метрики маршрута, значение 1 используется самой командой.
- Если в качестве метрики маршрута в команду ip ничего не передается, атрибут вообще не создается, и ядро воспринимает его как 0, что позже переводится как 1024 по умолчанию.