Изменение существующей записи маршрута в Linux

11

Что такое команда для изменения метрики существующей записи маршрута в Linux? Я могу изменить шлюз существующей записи с помощью команды «ip route change», как показано ниже, но не могу изменить метрики. Есть ли другая команда для этого?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1
user1762571
источник
Вот страница сайта, на которой есть команды для редактирования IP-адресов с помощью команды ifconfig. Я не знаю всех команд на макушке, но, надеюсь, эта страница поможет вам. tecmint.com/ifconfig-command-examples
Николас Внушительные штаны
1
Удалите маршрут, а затем добавьте его снова, если только они не исправили lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
thrig

Ответы:

7

Как отмечено в комментарии к вопросу, цитируя сообщение в списке рассылки linux-net: «Метрика / приоритет не могут быть изменены [...] Это ограничение текущего протокола [...].»
Единственный способ - удалить маршрут и добавить новый.

Это делается с помощью routeкоманды, пример:

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1

Страница руководства Debian для команды route

январь
источник
4
Вопрос не в том, как добавить маршрут с заданной метрикой; ОП хотел изменить метрику на существующем маршруте (без удаления и повторного добавления маршрута).
Андраш Корн
4
Очевидно , что вы не читали комментарий в вопросе , какие ссылки на адрес электронной почты показывая , что не метрика может быть изменена: The metric/priority cannot be changed [...] This is a limitation of the current protocol[...]. Единственный способ - удалить маршрут и добавить новый.
января
7
Я знаю, что метрика не может быть изменена. Ваш ответ все еще не отвечает на вопрос - возможно, укажите в ответе, что метрика может быть изменена только путем удаления и повторного добавления маршрута?
Андраш Корн
16

(Объединение различных комментариев в ответ)

В настоящее время невозможно изменить метрику маршрута. В сообщении 2005 года о LKML говорится :

[...] Метрика / приоритет не может быть изменена, потому что у нас нет отдельных полей для полей для сопоставления и новых значений, поэтому, если вы укажете метрику, запись просто не будет найдена, и запрос завершится неудачно с ENOENT, потому что NLM_F_CREATE не указано Это ограничение текущего протокола, и это может быть хорошей идеей, чтобы изменить это, однако это не тривиально [...]

Похоже, что это применимо как к, так ip route changeи к ip route replace- первое приводит к ошибке для меня, а второе создает дополнительный маршрут в соответствии с объявлением (на его странице руководства указано, что replaceон заменит или создаст маршрут). Это согласуется с тем, что ядро ​​отвечает ENOENT и ip route replaceвыполняет запрос на создание маршрута.


Таким образом, решение состоит в том, чтобы удалить существующий маршрут и добавить новый. например

ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234
отметка
источник
да, эта проблема меня укусила в последние несколько месяцев ... поскольку Брайан Кэнтрилл продолжает говорить о Linux: это развивается с синдромом NIH (не изобретенным здесь) ...
Hvisage
@ Hvisage можешь уточнить? Есть ли инструмент, который позволяет изменить метрику, не удаляя ее?
Брайам
@Braiam Это негатив, как в: НИКАКОГО такого инструмента не существует. согласно ответу. Если вы ссылаетесь на мои цитаты о Брайане Кэнтриле, я думаю, это было где-то в youtube.com/watch?v=wTVfAMRj-7E
Hvisage
2

ifmetric позволит вам изменять метрику маршрута на лету, учитывая интерфейс, через который проходят маршруты, которые вы хотите изменить.

использование

ifmetric <iface> [<metric>]

Например, используйте ifmetric tun0 12для изменения метрики на 12 для всех проходящих маршрутов tun0.

AeroClassics
источник
4
Здравствуй! Было бы лучше привести рабочий пример использования команды для получения результатов, которые требует вопрос.
дхаг
Да, это действительно так. Спасибо.
АэроКлассика