J'ai un système avec deux interfaces. Les deux interfaces sont connectées à Internet. L'un d'eux est défini comme route par défaut; Un effet secondaire de cela est que si un paquet arrive sur l'interface de route autre que celle par défaut, la réponse est renvoyée via l'interface de route par défaut. Existe-t-il un moyen d'utiliser iptables (ou autre chose) pour suivre la connexion et renvoyer la réponse via l'interface d'où elle provient?
51
dev
ip rule
ip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
etup ip route add default via <gateway_IP> dev ppp0 table isp2
à votre / etc / network / interfaces sous l'interface appropriée.dev <interface>
deip rule
le faire fonctionner sur ma boîte. Si je comprends bien,dev <interface>
est-ce que le filtrage des paquets qui étaient en quelque sorte configurés sur la mauvaise interface devait être arraché à la bonne interface par la route remplacée, mais le filtrage des règles par interface empêchait cela de se produire?dev <interface>
de laip rule
commande pour que cela fonctionne. S'il vous plaît mettre à jour la réponse! À part ce détail, cela a fonctionné à merveille. Merci beaucoup, Peter!Les commandes suivantes créent une autre table de routage via
eth1
pour les paquets portant la marque 1 (à l'exception des paquets vers localhost). Laip
commande provient de la suite iproute2 (Ubuntu: iproute Installez iproute http://bit.ly/software-small , iproute-doc Installez iproute-doc http://bit.ly/software-small ).L'autre moitié du travail consiste à reconnaître les paquets qui doivent recevoir la note 1; Ensuite, utilisez
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
ces paquets pour les acheminer via la table de routage 1. Je pense que ce qui suit devrait le faire (remplacer 1.2.3.4 par l'adresse de l'interface autre que celle par défaut):Je ne sais pas si cela suffit, une autre règle est peut-être nécessaire sur les paquets entrants pour indiquer au module conntrack de les suivre.
la source
J'ai eu des problèmes avec les paquets générés localement avec la solution suggérée par Peter, j'ai trouvé que ce qui suit corrige cela:
Remarque: vous pouvez rencontrer des problèmes de syntaxe avec la 4ème ligne ci-dessus. Dans de tels cas, la syntaxe de la 4ème commande peut être la suivante:
la source
Je suppose que vous utilisez Linux et, en outre, que vous utilisez une distribution basée sur RedHat / CentOS. D'autres Unix et distributions nécessiteront des étapes similaires - mais les détails seront différents.
Commencez par tester (notez que ceci est très similaire à la réponse de @ Peter. Je suppose ce qui suit:
Les commandes sont les suivantes:
Le pare-feu n'est impliqué d'aucune façon. Les paquets de réponse auraient toujours été envoyés à partir de la bonne adresse IP - mais étaient auparavant envoyés via une mauvaise interface. Maintenant, ces paquets de la bonne adresse IP seront envoyés via la bonne interface.
En supposant que ce qui précède a fonctionné, vous pouvez maintenant rendre les modifications de règle et de route permanentes. Cela dépend de la version d'Unix que vous utilisez. Comme auparavant, je suppose une distribution Linux basée sur RH / CentOS.
Vérifiez que le changement de réseau est permanent:
Si cela ne fonctionne pas, vous devez également choisir l'une des deux options suivantes dans les versions ultérieures de RH / CentOS:
Personnellement, je préfère installer le paquet de règles car il s’agit de l’approche la plus simple et la plus supportée:
Une autre recommandation forte consiste à activer le filtrage arp, afin d'éviter d'autres problèmes liés aux configurations de réseau double. Avec RH / CentOS, ajoutez le contenu suivant au fichier /etc/sysctl.conf:
la source