- How can I make changes to the network routing metric permanently
- 6 Answers 6
- Настройка сетевых маршрутов в Linux (CentOS)
- Просмотр таблицы маршрутизации в Linux
- Как добавить или удалить статический маршрут?
- Изменить маршрут в Linux
- Изменить маршрут по умолчанию
- Modifying existing route entry in linux
- 4 Answers 4
- Изменение существующей записи маршрута в Linux
- использование
How can I make changes to the network routing metric permanently
When I reboot though, the metric for enp0s3 reverts to 101. How can I make this change permanent or have it set automatically at boot time?
6 Answers 6
If you are using NetworkManager, the proper way to change the metric for the default route is to modify the connection associated with interface enp0s3 in this way:
nmcli connection modify ipv4.route-metric 1
and then re-activate the connection:
You can find the value for in the output of nmcli connection .
This is permanent and IMHO answer the question. Be aware, still, that this solution is attached to a connection, not an interface. If you happen to use several connections (typical case: roaming device connecting to various places) on the same interface (the machine’s wifi or Ethernet), the operation has to be done for the each of the connections that need metric adjustment. This may or may not be what you want. I feel this is good because you can e.g. say «this specific Wifi costs me money by the byte so put a higher metric», «this Ethernet connection is high-performance, use it in priority».
Unfortunately, it doesn’t change the metric of the default gateway immediately, I posted a question here : unix.stackexchange.com/questions/625126/…
The correct way to do this, in Debian and derivatives, is to write a file in /etc/NetworkManager/dispatcher.d (call it whatever you like), with the following content:
#!/bin/sh # Change the metric of the default route only on interface enp0s3 IF=$1 STATUS=$2 MY_METRIC=1 if [ "$IF" = "enp0s3" ] then case "$STATUS" in up) ip route del default dev $IF ip route add default via $DHCP4_ROUTERS dev $IF metric $MY_METRIC ;; *) ;; esac fi
This way, your customization will not be overwritten upon each update. In order to check this, stop the Network Manager, kill the dhclient and flush the IP address of the interface, then restart network manager.
You can find documentation here.
systemctl stop network-manager pkill dhclient ip addr flush dev eth0 systemctl start network-manager
if the interface in question is eth0, otherwise change accordingly.
Настройка сетевых маршрутов в Linux (CentOS)
13.04.2020
VyacheslavK
CentOS, Linux
Один комментарий
В этой статье мы рассмотрим особенности настройки маршрутизации и управления маршрутами в Linux (просмотр таблицы маршрутизации, добавление/удаление статических маршрутов и т.д.) на примере CentOS с помощью утилиты ip. Статья применима и для любого другого дистрибутива Linux с утилитой ip (Red Hat, Fedora и т.д.).
Для управления маршрутизацией в Linux предпочтительно исопльзовать утилиту ip , а не route . Команда route не позволяет настраивать расширенные возможности маршрутизации (например, политики маршрутизации), и не покажет специальные настройки маршрутизации, если они уже сделаны через ip.
Просмотр таблицы маршрутизации в Linux
Чтобы вывести текущую таблицу маршрутизации в Linux выполните команду:
- default via 192.168.1.1 dev enp0s3 – шлюз по умолчанию, в данном примере работающий через интерфейс enp0s3. Если для target адреса в таблице маршрутизации отсутствует маршрут, то такой пакет отправляется через данный шлюз (маршрут по умолчанию)
- 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.201 — статический маршрут для сети 192.168.1.0/24 через адрес 192.168.1.201, который прописан на интерфейсе
- proto kernel – маршрут создан ядром ( proto static – маршрут добавлен администратором)
- metric – приоритет маршрута (чем меньше значение metric, тем выше приоритет). При наличии двух маршрутов с одинаковой метрикой (не стоит так делать!), ядро начинает выбирать маршруты случайным образом.
Чтобы узнать через какой интерфейс (шлюз) должен маршрутизироваться трафик к определенному IP адресу используется команда:
192.168.2.45 via 192.168.1.1 dev enp0s3 src 192.168.1.201
Вы можете использовать ваш Linux сервер с двумя и более интерфейсами как маршрутизатор или интернет-шлюз. Чтобы разрешить маршрутизацию пакетов между несколькими интерфейсами, нужно включить параметр ядра net.ipv4.ip_forward = 1.
Как добавить или удалить статический маршрут?
Чтобы добавить новый маршрут к определенной IP подсети в таблицу маршрутизации Linux, нужно выполнить следующую команду:
# ip route add 192.168.0.0/24 via 192.168.1.1
Таким образом, мы добавим маршрут для IP сети 192.168.0.0/24 через шлюз 192.168.1.1.
Формат команды ip route очень похоже на синтаксис в Cisco IOS. Здесь также можно исопльзовать сокращений, например вместо ip route add можно написать ip pro ad .
Также можно добавить отдельный маршрут для одного IP адреса (хоста):
# ip route add 192.168.1.0 via 192.168.1.1
Можно сделать аналог null route маршрута в Cisco (ip route null0), пакеты в такую сеть удаляются по причине No route to host:
# ip route add blackhole 10.1.20.0/24
Маршруты, добавленные таким образом являются временным и будут работать до перезагрузки сетевой службы или сервера.
Чтобы удалить созданный вручную маршрут, выполните:
Как видите, маршрут удален из таблицы маршрутизации.
Чтобы добавить постоянный маршрут, нужно создать файл для этого маршрута, либо добавить правило в файл rc.local (выполняется при загрузке сервера).
Чтобы добавить постоянный (статический) маршрут, нужно знать имя сетевого интерфейса, который будет использоваться для маршрутизации. Узнать имя сетевого интерфейса можно командой:
В моем случае, интерфейс enp0s3.
Далее открываем следующий файл:
И добавляем туда строку с маршрутом:
После добавления маршрута в файл нужно перезапустить сервис network:
После перещаауска сетевого сервиса, в таблице маршрутизации появился статический маршрут.
Также можно добавить команду добавления нового маршрута в файл rc.local, чтобы он автоматически добавлялся при загрузке сервера. Откройте файл:
И укажите команду добавления маршрута:
# ip route add 192.168.0.0/24 via 192.168.1.1
Теперь, если ваш сервер будет перезагружен, маршрут пропишется автоматически при загрузке системы.
Изменить маршрут в Linux
Чтобы изменить уже существующий маршрут, можно использовать команду ip route replace:
# ip route replace 192.168.0.0/24 via 192.168.1.1
Чтобы сбросить все временные маршруты в таблице маршрутизации, просто перезапустите сетевой сервис:
Restarting network (via systemctl): [ OK ]
default via 192.168.1.1 dev enp0s3 proto static metric 100 192.168.0.0/24 via 192.168.1.1 dev enp0s3 proto static metric 100 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.201 metric 100
Изменить маршрут по умолчанию
Вы можете удалить маршрут по-умолчаню с помощью команды ip route del:
# ip route del default via 192.168.1.1 dev enp0s3
Чтобы указать новый маршрут по-умолчанию в CentOS используется команда:
# ip route add default via 192.168.1.2 (маршрут через IP адрес шлюза)
# ip route add default via enp0s3 (маршрут через имя устройства)
Чтобы изменить параметры маршрута по умолчанию, используется команда:
# ip route replace default via 192.168.1.2
Предыдущая статья Следующая статья
Modifying existing route entry in linux
what is the command to modify metric of an existing route entry in linux? I am able to change gateway of an existing entry using «ip route change» command as below but not able to change metrics. Is there any other command for that?
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
Here is a website page that has the commands to edit IP addresses using the ifconfig command. I don’t know all the commands off the top of my head, but hopefully this page will help you. tecmint.com/ifconfig-command-examples
Delete the route and then add it again, unless they’ve since fixed lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
I don’t understand what your commands above are trying to show. In one you have a route on eth2 and the other on eth1 . They’re totally different.
4 Answers 4
(Combining various comments into an answer)
Currently, it is not possible to modify a route’s metric. As a 2005 message on LKML states:
[. ] The metric/priority cannot be changed because we do not have separate fields for the fields to match and the new values so if you specify a metric the entry simply won’t be found and the request fails with ENOENT because NLM_F_CREATE is not specified. This is a limitation of the current protocol and it might be a good idea to to change this, however it’s non trivial [. ]
This seems to apply both to ip route change and ip route replace — the former results in an error for me, while the latter creates an additional route as advertised (its man page states that replace will replace or create a route). This is consistent with the kernel responding with ENOENT, and ip route replace following up with a route creation request.
So, the solution is to delete the existing route and add a new one. e.g.
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
Что такое команда для изменения метрики существующей записи маршрута в 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
Вот страница сайта, на которой есть команды для редактирования IP-адресов с помощью команды ifconfig. Я не знаю всех команд на макушке, но, надеюсь, эта страница поможет вам. tecmint.com/ifconfig-command-examples
Удалите маршрут, а затем добавьте его снова, если только они не исправили lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
Как отмечено в комментарии к вопросу, цитируя сообщение в списке рассылки linux-net: «Метрика / приоритет не могут быть изменены [. ] Это ограничение текущего протокола [. ].»
Единственный способ — удалить маршрут и добавить новый.
Это делается с помощью route команды, пример:
sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
Вопрос не в том, как добавить маршрут с заданной метрикой; ОП хотел изменить метрику на существующем маршруте (без удаления и повторного добавления маршрута).
Очевидно , что вы не читали комментарий в вопросе , какие ссылки на адрес электронной почты показывая , что не метрика может быть изменена: The metric/priority cannot be changed [. ] This is a limitation of the current protocol[. ] . Единственный способ — удалить маршрут и добавить новый.
Я знаю, что метрика не может быть изменена. Ваш ответ все еще не отвечает на вопрос — возможно, укажите в ответе, что метрика может быть изменена только путем удаления и повторного добавления маршрута?
(Объединение различных комментариев в ответ)
В настоящее время невозможно изменить метрику маршрута. В сообщении 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 (не изобретенным здесь) .
@Braiam Это негатив, как в: НИКАКОГО такого инструмента не существует. согласно ответу. Если вы ссылаетесь на мои цитаты о Брайане Кэнтриле, я думаю, это было где-то в youtube.com/watch?v=wTVfAMRj-7E
ifmetric позволит вам изменять метрику маршрута на лету, учитывая интерфейс, через который проходят маршруты, которые вы хотите изменить.
использование
Например, используйте ifmetric tun0 12 для изменения метрики на 12 для всех проходящих маршрутов tun0 .
Здравствуй! Было бы лучше привести рабочий пример использования команды для получения результатов, которые требует вопрос.