Назад | Перейти на главную страницу

несколько маршрутов по умолчанию с iproute2

Меня очень смущает семантика ip rules когда дело доходит до маршрута по умолчанию.

Иногда у меня может быть несколько маршрутов по умолчанию с использованием разных шлюзов:

# ip route
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 
# ip route replace default via 192.168.12.1
# ip route
default via 192.168.12.1 dev rath 
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

В других случаях я не могу:

# ip route del default via 10.0.0.4 dev eth0
# ip route
default via 192.168.12.1 dev rath 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

# ip route add default via 10.0.0.4
RTNETLINK answers: File exists

# ip route
default via 192.168.12.1 dev rath 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

Но если я удалю маршрут по умолчанию, он будет изменен (или, что более вероятно, станет видимым другое правило по умолчанию):

# ip route del default via 192.168.12.1
# ip route
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

Что здесь происходит? Почему нет ip route replace default изменить маршрут по умолчанию? Почему нет ip route show всегда показывать все маршруты по умолчанию?

В вашей настройке у вас есть два разных маршрута по умолчанию (с метрикой и без нее).

У вас может быть несколько маршрутов к одной и той же конечной цели с разными показателями. ip route replace добавляет маршрут, если этот маршрут не существует, и заменяет его в противном случае. В вашем случае у вас не было маршрута по умолчанию без метрики, и ip route replace default via 192.168.12.1 добавил маршрут по умолчанию без метрики.

Еще раз: маршруты к одному и тому же пункту назначения с метрикой и без метрики - это разные маршруты!

+------------------+------------------------+------------------+
| Command          | route to               |route to same dst |
|                  | same dst exists        | doesn't exists   |
+------------------+------------------------+------------------+
| ip route add     |  error                 |  ok              |
| ip route change  |  ok                    |  error           |
| ip route replace |  ok                    |  ok              |
| ip route del     |  ok                    |  error           |
+------------------+------------------------+------------------+