Jusqu'à maintenant, nous avons vu comment iproute travaille, et
netfilter a été mentionné plusieurs fois. Vous ne perdrez pas votre
temps à consulter Rusty's Remarkably
Unreliable Guides. Le logiciel Netfilter peut être trouvé ici.
Netfilter nous permet de filtrer les paquets ou de désosser
leurs en-têtes. Une de ses fonctionnalités particulières est de
pouvoir marquer un paquet avec un nombre, grâce à l'option
--set-mark.
Comme exemple, la commande suivante marque tous les paquets
destinés au port 25, en l'occurrence le courrier sortant.
# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 \
-j MARK --set-mark 1
Disons que nous avons plusieurs connexions, une qui est rapide
(et chère, au mégaoctet) et une qui est plus lente, mais avec un
tarif moins élevé. Nous souhaiterions que le courrier passe par la
route la moins chère.
Nous avons déjà marqué le paquet avec un "1" et nous allons
maintenant renseigner la base de données de la politique de routage
pour qu'elle agisse sur ces paquets marqués.
# echo 201 mail.out >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table mail.out
# ip rule ls
0: from all lookup local
32764: from all fwmark 1 lookup mail.out
32766: from all lookup main
32767: from all lookup default
Nous allons maintenant générer la table mail.out avec une route
vers la ligne lente, mais peu coûteuse.
# /sbin/ip route add default via 195.96.98.253 dev ppp0 table mail.out
Voilà qui est fait. Il se peut que nous voulions mettre en place
des exceptions, et il y a beaucoup de moyens de le faire. Nous
pouvons modifier la configuration de netfilter pour exclure
certains hôtes ou nous pouvons insérer une règle avec une priorité
plus faible qui pointe sur la table principale pour nos hôtes
faisant exception.
Nous pouvons aussi utiliser cette fonctionnalité pour nous
conformer aux bits TOS en marquant les paquets avec différents
types de service et les nombres correspondants. On crée ensuite les
règles qui agissent sur ces types de service. De cette façon, on
peut dédier une ligne RNIS aux connexions interactives.
Inutile de la dire, cela marche parfaitement sur un hôte qui
fait de la translation d'adresse (NAT), autrement dit du
"masquerading".
IMPORTANT : Nous avons reçu une information selon laquelle
MASQ et SNAT entrent en conflit avec le marquage de paquets. Rusty
Russell l'explique dans
ce courrier.
Désactiver le filtrage de chemin inverse pour que cela
fonctionne correctement.
Note : pour marquer les paquets, vous aurez besoin de
valider quelques options du noyau :
IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?]
IP: policy routing (CONFIG_IP_MULTIPLE_TABLES) [Y/n/?]
IP: use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Y/n/?]