Routage linux
Ordre d'une décision de routage sous linux (dans l'ordre de décision) :
- Most specific route
- Lowest administrative distance
- lowest metric (ou preference sous linux, a ne pas confondre avec le champ 'pref' pour les routes ipv6)
Les paquets sont considérés individuellement pour les décisions de routage.
La décision de routage ne prend donc pas en considération qu'un paquet puisse être la réponse à un autre paquet.
Cela peut poser soucis dans les installations avec plusieurs interfaces réseaux et générer un routage asymétrique (paquet entrant par un couple interface/gateway et sortant par un autre couple interface/gateway suite à une décision de routage (et uniquement suite à une décision de routage).
On peut cependant créer des tables de routages indépendantes dans cette situation :
echo '252 T1' >> /etc/iproute2/rt_tables echo '251 T2' >> /etc/iproute2/rt_tables # notez que les numéros ici ne sont PAS une priorité. C'est un identifiant numérique de la table (de 0 à 255, sachant que 0, 253, 254 et 255 sont réservés) ip rule add from 10.0.0.100 table T1 ip route add 10.0.0.0/24 dev eth0 src 10.0.0.100 table T1 ip route add default via 10.0.0.2 dev eth0 src 10.0.0.100 table T1 ip rule add from 10.0.0.200 table T2 ip route add 10.0.0.0/24 dev eth1 src 10.0.0.200 table T2 ip route add default via 10.0.0.2 dev eth1 src 10.10.0.200 table T2
A noter que cette solution :
- ne nécessite aucun marquage des paquets avec ipfilter/netfilter
- fonctionne car le paquet dit sortant (=la réponse) aura le champ ip-src défini à la valeur du ip-dst du paquet entrant initial (=la requête) :
- Paquet entrant (initial) ip-src=IP-AAAA ip-dst=IP-BBBB
- Paquet sortant (réponse) ip-src=IP-BBBB ip-dst=IP-AAAA
Vous pouvez voir les rules par défaut avec ip rule show
(ici la table de rule par défaut) :
0: from all lookup local 32766: from all lookup main 32767: from all lookup default
Ici nous avons :
- Priority 0 sans selecteur (
from all
) -> lookup sur la table de routage 'local' (ID 255) (table local / broadcast) - Priority 32766 sans selecteur (
from all
) -> lookup sur la table de routage 'main' (ID 254) (table par défaut) - Priority 32767 sans selecteur (
from all
) -> lookup sur la table de routage 'default' (ID 255) (table vide réservée)