← retour aux snippets

ip rule: déboguer le policy routing

Inspecter règles, tables et sélection de route via fwmark/source pour diagnostiquer le policy routing.

bash network #ip#rule#routing

objectif

Comprendre pourquoi un paquet prend une route spécifique: règles ip rule, tables de routage, marque fwmark et adresse source.

code minimal

# afficher les règles et leurs priorités
ip rule show

# lister les routes des tables utiles (main, default et 100-200)
for t in main default 100 200; do echo "# table $t"; ip route show table "$t"; done

# simuler un routage avec source, fwmark et interface
ip -o route get 203.0.113.10 from 192.0.2.5 fwmark 0x1 iif eth0

utilisation

# paquet marqué fwmark=0x1 vers data.pm -> quelle table ?
dst="$(getent ahosts data.pm | awk 'NR==1{print $1}')"
ip -o route get "$dst" fwmark 0x1

# voir règles appliquées aux paquets locaux sortants
ip rule show | nl

# route par source (policy "source-based routing")
ip rule add from 192.0.2.0/24 table 100 prio 10000
ip route add default via 192.0.2.1 dev eth0 table 100

variante(s) utile(s)

# marquer des paquets sortants d'un process (iptables/nft requis, exemple iptables mangle)
iptables -t mangle -A OUTPUT -p tcp --dport 443 -m owner --uid-owner web -j MARK --set-mark 0x1

# tables personnalisées persistées dans /etc/iproute2/rt_tables
echo "100 uplink_a" | sudo tee -a /etc/iproute2/rt_tables

notes

  • les priorités basses sont évaluées après les hautes (ordre croissant).
  • combinez ip rule + ip route get pour vérifier la table choisie et l’adresse source.
  • pour nftables, utilisez meta mark set 0x1 dans la chaîne output équivalente.