У Linux, який показник має маршрут без метрики?


11

Якщо у вас є (в 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 чи стандартів для мереж?

Заздалегідь спасибі.

Відповіді:


6

Ви впевнені у своєму першому спостереженні? Що тоді 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 вибирає показник за замовчуванням на основі пропускної здатності посилання.


Я позначаю вашу відповідь правильною, тому що я не бачив знову такої поведінки на своєму комп’ютері. Я звинувачую це в чомусь дивному, що трапляється на настільних комп’ютерах з Ubuntu, принаймні у версії, яку я мав на момент запитання. Я не бачив, щоб це відбувалося в кількох інших полях, на яких працює Ubuntu LTS. Отже, X-файл (чи ця посилання в наш час занадто стара?). Дякую за вашу відповідь!
rsuarez

6

Оскільки ці маршрути є в різних підмережах, тут більше задіяно, ніж просто показник. Якщо, наприклад, похідний трафік знаходиться в підмережі 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 за замовчуванням.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.