várias rotas padrão com iproutes2

1

Estou muito confuso com a semântica de ip rules quando se trata da rota padrão.

Às vezes, posso ter várias rotas padrão usando diferentes gateways:

# 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 

Em outras ocasiões, não consigo:

# 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 

Mas, se eu excluir a rota padrão, ela será alterada (ou, mais provavelmente, a outra regra padrão ficará visível):

# 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 

O que está acontecendo aqui? Por que o ip route replace default não está mudando a rota padrão? Por que o ip route show não está sempre mostrando todas as rotas padrão?

    
por Nikratio 19.11.2015 / 17:02

1 resposta

3

Na sua configuração, você tem duas rotas padrão diferentes (com e sem métrica).

Você pode ter várias rotas para o mesmo destino com métricas diferentes. ip route replace adiciona rota, se essa rota não existir, e a substitui de outra forma. No seu caso, você não teve a rota padrão sem métrica e ip route replace default via 192.168.12.1 adicionou a rota padrão sem métrica.

Mais uma vez: as rotas para o mesmo destino com métrica e sem métrica são rotas diferentes!

+------------------+------------------------+------------------+
| 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           |
+------------------+------------------------+------------------+
    
por 30.12.2015 / 22:44