Если у вас есть (в Linux) эти два маршрута:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Я ожидаю, что используется первый, но это не так: вместо него используется второй.
Если я изменю это на это:
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Тогда это работает как ожидалось. Кажется, что «нет метрики» является худшей (более высокой) метрикой, чем любое число, вместо метрики 0.
Что это происходит? Это специфично для Linux или сетевого стандарта?
Заранее спасибо.
источник
Поскольку эти маршруты находятся в разных подсетях, здесь задействовано больше, чем просто метрика. Если исходящий трафик находится, например, в подсети 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 :
источник