La bonne façon d'y parvenir est de lier () à l'interface que vous souhaitez utiliser pour les paquets sortants. Puisque vous pouvez ensuite configurer des itinéraires avec les commandes ip route
et ip rule
pour contrôler la façon dont les paquets sont routés en fonction de leur interface sortante. Pour mon exemple, je suppose que le réseau suivant:
- eth0:
- Adresse: 192.168.0.2/24
- Passerelle par défaut: 192.168.0.1
- eth1:
- Adresse: 192.168.1.2/24
- Passerelle par défaut: 192.168.1.1
Je vais créer deux tables de routage, une pour le trafic sortant pour eth0 appelée alternative et une table pour eth1 appelée principale. La table de routage principale existe toujours et est la table normale utilisée par les commandes route
et ip route
. La plupart des gens ne traitent jamais avec d'autres tables. Pour créer la table appelée alternative, nous ajouterons la ligne suivante à /etc/iproute2/rt_tables
:
10 alternate
La table main a une priorité par défaut de 254. Les règles pour lesquelles la table de routage est en vigueur sont contrôlées par la ip rule
commande. Par défaut, cette commande affichera une liste des règles existantes qui devraient ressembler à ceci:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Cela signifie essentiellement qu'il recherchera une route dans la table local
qui est une table spéciale maintenue par le noyau pour les routes locales telles que ma propre adresse IP. Il essaiera ensuite table main et table default. La table par défaut est normalement vide, donc s'il n'y a pas de correspondance dans main, il n'y a pas de route vers l'hôte. Tout d'abord, permet de remplir la table en alternance avec des règles pour eth0.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
Vous souhaiterez normalement que la alternate
table ressemble à la main
table. Les seules différences sont lorsque le routage doit être différent. Vous pouvez ne pas vouloir inclure la deuxième ligne ci-dessus si vous voulez littéralement que tout le trafic NFS, HTTP, etc. passe par la passerelle par défaut sur eth0 même s'il est destiné au réseau sur eth1. L'étape suivante consiste à ajouter une règle pour savoir quand utiliser cette table de routage alternative:
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
Cette règle indique que tout trafic provenant d'une adresse sur le réseau 192.168.0 utilisera la alternate
table de routage au lieu de la main
table normale . La dernière étape consiste à s'assurer que tous les clients qui doivent utiliser y sont eth0
liés. Avec wget
, par exemple, set --bind-address=192.168.0.2
, pour NFS, définissezclientaddr=192.168.0.2
option de montage. Si vous utilisez LibWWW avec Perl, vous pouvez définir l'option localaddr dans LWP :: UserAgent pour contrôler l'interface locale à laquelle il se lie. Si vous avez un client dont vous ne pouvez pas contrôler la liaison et que la compilation n'est pas une option, vous pouvez peut-être utiliser une règle iptables pour modifier son adresse, mais il s'agit plus d'un piratage et peut ne pas fonctionner. Vous auriez besoin d'une règle SNAT configurée dans la chaîne PREROUTING de la table nat ou de la table mangle. Vous aurez toujours besoin des tables de routage modifiées données ci-dessus pour que cela fonctionne.
iftop
et ils affichent chacun le bon type de trafic. Merci beaucoup.