Вопрос или проблема
У меня две маршрута по умолчанию, и я хочу удалить один из них, но не могу. Ошибок не выдаёт, а маршрут всё ещё остаётся. Я что-то делаю не так? NetworkManager мешает мне?
[11:09:52]user@host:/etc/sysconfig/network-scripts$ ip route
default via 10.12.32.1 dev em1 proto static metric 100
default via X.X.X.X dev em2 proto static metric 101
10.0.0.0/8 via 10.12.32.1 dev em1
10.12.32.0/24 dev em1 proto kernel scope link src 10.12.32.4
10.12.32.0/24 dev em1 proto kernel scope link src 10.12.32.4 metric 100
X.X.X.X/29 dev em2 proto kernel scope link src X.X.X.X metric 100
[11:15:31]user@host:/etc/sysconfig/network-scripts$ sudo ip route delete default via 10.12.32.1 dev em1 proto static metric 100
[11:15:41]user@host:/etc/sysconfig/network-scripts$ ip route
default via 10.12.32.1 dev em1 proto static metric 100
default via X.X.X.X dev em2 proto static metric 101
10.0.0.0/8 via 10.12.32.1 dev em1
10.12.32.0/24 dev em1 proto kernel scope link src 10.12.32.4
10.12.32.0/24 dev em1 proto kernel scope link src 10.12.32.4 metric 100
X.X.X.X/29 dev em2 proto kernel scope link src X.X.X.X metric 100
Поскольку я не могу отключить em1
в рабочее время, я попробовал обходной путь:
я изменил метрику на em2
на 99 в /etc/sysconfig/network-scripts/ifcfg-em2
. Но после ifdown em2
и ifup em2
она всё равно имеет метрику 101.
РЕДАКТИРОВАТЬ:
Содержимое ifcfg-em1:
# Сгенерировано dracut initrd
NAME="em1"
DEVICE="em1"
ONBOOT=yes
NETBOOT=yes
UUID="8c695eab-d7ff-4b7c-960d-333788fbaf72"
IPV6INIT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
Содержимое ifcfg-em2:
TYPE=Ethernet
UUID=1cc7a636-b9b0-4602-806a-81486188efb0
METRIC=99
NAME="em2"
DEVICE="em2"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=static
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPADDR=X.X.X.X
PREFIX=29
GATEWAY=X.X.X.X
DNS1=10.12.32.44
HWADDR=00:21:9b:99:2f:44
METRIC=99
Обязательно остановите connman и NetworkManager. Они восстанавливают то, что вы удаляете.
Пожалуйста, попробуйте
grep -r "10.12.32.1" /etc
Чтобы определить, какой файл содержит GATEWAY=10.12.32.1
Затем удалите GATEWAY=10.12.32.1
из этого файла.
Перезапустите сетевой сервис
Ответ или решение
На вопрос о невозможности удаления маршрута по умолчанию в Linux оказывается влияют несколько факторов, которые мы рассмотрим подробно.
Теория
Маршрут по умолчанию ("default route") указывает систему на тот шлюз, который будет использоваться для всех неопределённых маршрутов. В вашем случае присутствуют два маршрута по умолчанию, и вы хотите удалить один из них, но изменения не применяются. Проблема может быть связана с несколькими причинами, такими как вмешательство в работу сетевых сервисов, ошибка в конфигурации сетевых интерфейсов или проблемы с программами, вроде NetworkManager или ConnMan, которые могут восстанавливать маршруты после их удаления.
Пример
В предоставленных вами данных видно, что маршруты по умолчанию настроены через команду ip route
, и отсутствует ошибка при попытке выполнить команду sudo ip route delete
. Однако маршрут по умолчанию не удаляется и остаётся в таблице маршрутов системы.
ip route delete default via 10.12.32.1 dev em1 proto static metric 100
Также изменения в ifcfg-em2
(например, изменение метрики) не применяются, что может говорить о том, что NetworkManager восстанавливает или игнорирует настройки.
Применение
-
Остановите или отключите NetworkManager и ConnMan:
Эти сетевые менеджеры могут перезаписывать или восстанавливать сетевые настройки. Попробуйте временно остановить их:
sudo systemctl stop NetworkManager sudo systemctl stop connman
После остановки данных сервисов попробуйте снова удалить маршрут.
-
Поиск и удаление конфигурации шлюза:
Используйте поиск по конфигурационным файлам, чтобы найти явные настройки шлюза, как предложено:
grep -r "10.12.32.1" /etc
Определите файлы, в которых явно указан шлюз
GATEWAY=10.12.32.1
, и удалите или закомментируйте эти строки. Затем перезапустите сетевой сервис:sudo systemctl restart network
-
Проверьте конфигурацию интерфейсов:
В файлах конфигурации
/etc/sysconfig/network-scripts/ifcfg-em1
и/etc/sysconfig/network-scripts/ifcfg-em2
убедитесь, что опцияDEFROUTE
установлена вno
, если вы не хотите, чтобы данный интерфейс предоставлял маршрут по умолчанию. Обратите внимание, что изменения в этих файлах могут вступать в силу только после перезагрузки или рестарта сетевого сервиса. -
Конфигурация сетевых скриптов:
После завершения необходимых изменений в конфигурациях и остановки сетевых менеджеров, перезапустите сетевые интерфейсы и проверьте статус маршрутов:
sudo ifdown em1 sudo ifup em1
Повторите для
em2
. -
Обратитесь к логам и журналам:
Проверьте логи системы, такие как
journalctl
или/var/log/messages
, на наличие сообщений о проблемах с сетью, чтобы лучше понять, что может восстанавливать или удерживать конфигурации маршрутов.
Применение вышеуказанных шагов поможет вам детально и функционально разобрать возникшую проблему и эффективно найти решение для удаления нежелательного маршрута по умолчанию.