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