Estou executando o CentOS e estou usando ip route
e ip rule
para roteamento.
Atualmente tenho umip rule
from 10.8.23.0/28 table 1234
eip route
default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234
Parece que ip rule
a segunda linha foi bem-sucedida ip route
, portanto, mesmo que o IP de destino seja 10.10.10.10, meus pacotes ainda serão enviados test-interface
se o IP de origem for 10.8.23.0/28
.
Como posso ter certeza de que isso 10.10.10.10 via 10.10.10.1 eth1
anula a regra ìp, mesmo quando o IP de origem corresponde à regra? Espero que faça sentido :)
O teste ip route get 10.10.10.10
me dá:
10.10.10.10 via 10.10.10.1 dev eth1 src 10.8.23.1
mas ip route get 10.10.10.10 src 10.0.0.13
me dá:
10.10.10.10 via 10.10.10.254 dev test-interface src 10.8.23.1
Portanto, src IP
é priorizado em relação ao IP de destino.
Responder1
Você pode simplesmente pensar ip rule
que é uma maneira de criar/ter mais tabelas de roteamento IP (não apenas a padrão).
Para resolver seu problema, você precisa adicionar outra ip rule
entrada para lidar com seu caso de rota específico. Por exemplo, você pode usar o seguinte comando:
$ sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10
Aqui, presumo que 10
seja pequeno o suficiente para ser o primeiro ip rule
. Isso depende da saída de ip rule ls
. Ele irá mostrar todas as regras de acordo com a prioridade (um valor menor significa maior prioridade e é mostrado primeiro).
Se precisar combinar verificações de origem e destino em seu arquivo ip rule
, você pode usar:
$ sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10
A tabela 123
deve conter a rota correta, como:
$ sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123