Как в заголовке говорится после удаления правила от основной маршрутизации, которая в состоянии, я не могу добавить любой маршрут, пока я не делаю
service network restart
или
ifup eth0
Воспроизвести проблему:
ip route list table main
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
default via 192.168.2.1 dev eth0
Я могу удалить и добавить маршрут по умолчанию
#ip route del default
#ip route list
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
#ip route add default via 192.168.2.1
#ip route list
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
default via 192.168.2.1 dev eth0
Однако, если я удаляю маршрут 192.168.2.0/24, я не могу больше добавлять маршрут.
# ip route del 192.168.2.0/24
# ip route list
default via 192.168.2.1 dev eth0
# ip route add 192.168.2.0/24
RTNETLINK answers: No such device
# ip route add 192.168.2.0/24 via 0.0.0.0
RTNETLINK answers: No such device
# ip route add 192.168.2.0/24 src 192.168.2.47
RTNETLINK answers: No such device
# ip route list
default via 192.168.2.1 dev eth0
Причина в том, что на самом деле у вас есть два элемента таблицы маршрутизации. Сначала есть пункт по умолчанию, который указывает на шлюз 192.168.2.1 в сети 192.168.2.0/24, а затем есть сетевой маршрут для сети интерфейса eth0
(т.е. 192.168.2.0/24).
Если вы удаляете сетевой маршрут активного, он фактически отключает его. В данном конкретном случае удаление маршрута 192.168.2.0/24 означает, что у вас нет удобных интерфейсов для маршрутов, и таким образом добавление маршрутов будет неудачным.
Summa summarum: Вы просто делаете это неправильно или, по крайней мере, в неправильном порядке. Не удаляйте сеть 192.168.2.0/24, если у вас есть активный интерфейс в этой сети
.Наконец-то я понял, в чем проблема.
В основном, при добавлении маршрута нам также нужно определить границы видимости и прото.
В моем случае причина, по которой я не смог добавить его обратно, заключается в том, что я не определял область видимости. Граница определяла видимость IP в сети. Это мог быть хост, ссылка [ограниченная LAN], глоссальный и т.д.
Так что правильный синтаксис для добавления был бы
ip route add 192.168.2.0/24 via 0.0.0.0 dev eth0 scope link