GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi le trafic réseau Linux ne passe-t-il que par eth0 ?

Il existe deux modèles de conception possibles pour une pile réseau TCP/IP :un modèle d'hôte fort et un modèle d'hôte faible. Vous vous attendez à un comportement qui correspondrait au modèle d'hôte fort. Linux est conçu pour utiliser le modèle d'hôte faible. En général, le modèle d'hôte faible est plus courant car il réduit la complexité du code de routage et peut donc offrir de meilleures performances. Sinon, les deux modèles d'hôte ne sont que des principes de conception différents :aucun n'est intrinsèquement meilleur que l'autre.

Fondamentalement, le modèle d'hôte faible signifie que le trafic sortant sera envoyé à la première interface répertoriée dans la table de routage qui correspond à l'adresse IP de la destination (ou à la passerelle sélectionnée, si la destination n'est pas accessible directement), indépendamment de l'adresse IP source .

C'est essentiellement pourquoi il est généralement déconseillé d'utiliser deux interfaces physiques distinctes si vous avez besoin de deux adresses IP sur le même segment de réseau. Attribuez plutôt deux adresses IP pour une interface (alias IP :par exemple eth1 =192.168.8.142 et eth1:0 =192.168.8.140). Si vous avez besoin de plus de bande passante qu'une seule interface ne peut fournir, liez (ou associez, le cas échéant) deux interfaces ou plus ensemble, puis exécutez les deux adresses IP sur la liaison/l'équipe.

En ajustant un certain nombre de paramètres sysctl et en utilisant la fonctionnalité de "routage avancé" pour configurer des tables de routage indépendantes pour chaque carte réseau, il est possible de faire en sorte que Linux se comporte comme un système à modèle d'hôte fort. Mais c'est une configuration très spéciale, et je recommanderais de réfléchir à deux fois avant de l'implémenter.

Voir les réponses sur Linux Source Routing, Strong End System Model / Strong Host Model ? si vous en avez vraiment besoin.


Un point supplémentaire à considérer est que l'interface eth1 est configurée avec un masque de sous-réseau de 255.255.255.255.

Cela signifie que l'interface eth1 est configurée pour n'attendre aucun autre périphérique (hôte) sur son interface réseau. Cela signifie qu'il ne pourra pas communiquer avec votre client 192.168.8.142.


Après de nombreuses recherches, j'ai trouvé Pourquoi netcat n'utilise pas la bonne interface associée à l'IP ? , et c'est le même problème. Comme @telcoM l'a dit, le trafic sortant sera envoyé à la première interface, et c'est le problème, donc, le moyen le plus simple de résoudre ce problème est :

ip route add default via 192.168.8.142 dev eth1 table 142
ip rule add from 192.168.8.142 table 142

Cet itinéraire fera ip route get 192.168.8.135 from 192.168.8.142 renvoie eth1 au lieu de eth0. Ensuite, tout fonctionne comme prévu.


Linux
  1. Qu'est-ce que POSIX ? Pourquoi est-ce important pour les utilisateurs Linux/UNIX ?

  2. Linux – Pourquoi Linux autorise-t-il « init=/bin/bash » ?

  3. Linux – Pourquoi faut-il autant de temps pour détecter une clé USB ?

  4. Linux - Comment transférer le trafic entre les espaces de noms réseau Linux ?

  5. Service de système d'exploitation Linux "réseau"

Tcpdump Exemples - Capturer le trafic réseau sous Linux

Pourquoi le préprocesseur C interprète-t-il le mot linux comme la constante 1 ?

Acheminez uniquement le trafic spécifique via VPN

Pourquoi Linux chauffe-t-il mon ordinateur ?

Alimentez tout le trafic via OpenVPN pour un espace de noms de réseau spécifique uniquement

Pourquoi hexdump essaie-t-il de lire EOF ?