J'ai deux cartes réseau côté serveur, eth0? 192.168.8.140 et eth1? 192.168.8.142. Le client envoie des données à 192.168.8.142, et je m'attends iftop
à montrer le trafic pour eth1, mais ce n'est pas le cas. Tous les réseaux passent par eth0, alors comment puis-je tester les deux cartes réseau?
Pourquoi tout le trafic passe-t-il par eth0 au lieu de eth1? Je m'attendais à pouvoir obtenir 1 Gbit / s par interface. Quel est le problème avec ma configuration ou ma configuration?
Serveur
ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:00:19:26:B0
inet addr:192.168.8.140 Bcast:0.0.0.0 Mask:255.255.252.0
inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0
TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:66881007720 (62.2 GiB) TX bytes:261053436 (248.9 MiB)
Memory:f7e00000-f7efffff
eth1 Link encap:Ethernet HWaddr 00:00:00:19:26:B1
inet addr:192.168.8.142 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: 0000::0000:0000:fe19:26b1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19358 errors:0 dropped:511 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1772275 (1.6 MiB) TX bytes:1068 (1.0 KiB)
Memory:f7c00000-f7cfffff
Du côté serveur
# Listen for incomming from 192.168.8.142
nc -v -v -n -k -l 192.168.8.142 8000 | pv > /dev/null
Listening on [192.168.8.142] (family 0, port 8000)
Connection from 192.168.8.135 58785 received!
Client
# Send to 192.168.8.142
time yes | pv |nc -s 192.168.8.135 -4 -v -v -n 192.168.8.142 8000 >/dev/null
Connection to 192.168.8.142 8000 port [tcp/*] succeeded!
Du côté serveur
$ iftop -i eth0
interface: eth0
IP address is: 192.168.8.140
TX: cumm: 6.34MB peak: 2.31Mb rates: 2.15Mb 2.18Mb 2.11Mb
RX: 2.55GB 955Mb 874Mb 892Mb 872Mb
TOTAL: 2.56GB 958Mb 877Mb 895Mb 874Mb
$ iftop -i eth1
interface: eth1
IP address is: 192.168.8.142
TX: cumm: 0B peak: 0b rates: 0b 0b 0b
RX: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
TOTAL: 4.51KB 3.49Kb 3.49Kb 2.93Kb 2.25Kb
$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b0 brd ff:ff:ff:ff:ff:ff
$ ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:19:26:b1 brd ff:ff:ff:ff:ff:ff
Réponses:
Il existe deux modèles de conception possibles pour une pile réseau TCP / IP: un modèle hôte fort et un modèle hôte faible. Vous vous attendez à un comportement qui correspondrait au modèle 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 hôtes 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), sans égard à l'IP source adresse .
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 peut fournir, liez (ou équipe, le cas échéant) deux interfaces ou plus ensemble, puis exécutez les deux IP sur la liaison / équipe.
En modifiant 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 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.
la source
Un autre point à 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.
la source
Après beaucoup de 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 l'a dit @telcoM, le trafic sortant sera envoyé à la première interface, et c'est le problème, donc, la façon la plus simple de résoudre ce problème est:
Cette route fera
ip route get 192.168.8.135 from 192.168.8.142
retourner eth1 au lieu de eth0. Ensuite, tout fonctionne comme prévu.la source