Tcpreplaying mit VMware

Tcpreplaying mit VMware

Dies ist eher eine Frage zum Aufbau eines Testbetts.

Ich möchte VMware verwenden, um Netzwerkcode im Linux-Kernel in der VM zu debuggen. Meine VM hat zwei Netzwerkschnittstellen. Ich möchte die Capture-Datei im Host wiedergeben und die Pakete in der VM empfangen. Mein Problem ist, dass ich die wiedergegebenen Pakete in der VM nicht sehe.

  1. Ich führe VMware und tcpreplay auf dem Host als sudo aus. Daher sollte es meiner Meinung nach keine Probleme beim Zugriff auf Gerätedateien geben.
  2. Ich verwende VMware Workstation 7.0

a. Ich habe zunächst mit benutzerdefiniertem Netzwerk begonnen, da dies die Möglichkeit bietet, einen eigenen virtuellen Netzwerknamen zu erstellen. Ich habe /dev/vmnet3 und /dev/vmnet4 für die beiden Schnittstellen geschrieben. Nach dem Booten des Gastes habe ich jedoch keine dieser Schnittstellen oder Gerätedateien (in /dev) auf dem Host erstellt gesehen.

b. Dann habe ich „Nur Host“ versucht, aber das zeigt nicht, welche Bridge-/Gerätedatei mit der Schnittstelle verknüpft ist.

c. Schließlich habe ich den überbrückten Netzwerkmodus ausprobiert.

Ich sehe vmnet1, vmnet8 und vboxnet0 auf dem Host. Ich habe die Capture-Datei für alle drei oben genannten Fälle auf jeder dieser Schnittstellen per tcpreplay abgespielt. Ich habe versucht, Pakete in der VM mit „tcpdump -i any“ zu erfassen. Ich sehe jedoch keine Pakete.

Irgendwelche Ideen/Hinweise?

Antwort1

Ich habe dies in letzter Zeit nicht in VMware Workstation ausprobiert, aber normalerweise ist dies das Ergebnis eines der folgenden Dinge:

  1. Die VM, von der Sie Daten erfassen möchten, versetzt die Netzwerkkarte nicht in den Promiscuous-Modus und kann daher keine Pakete sehen, die nicht für sie bestimmt sind. Sie können dies lösen, indem Sie entweder tcpdump als Root in der VM ausführen oder indem Sie Ihr tcpreplay so ändern, dass die MAC-Adresse der VM als Ziel für die gesendeten Pakete verwendet wird (tcpreplay wird mit tcprewrite geliefert, was diese Art von Änderung einfach macht). Alternativ können Sie die Ziel-MAC-Adresse der wiedergegebenen Pakete zur Broadcast-Adresse machen, ff:ff:ff:ff:ff:ff (WARNUNG: SEHR GEFÄHRLICH. Sofern Sie nicht wirklich verstehen, was Sie tun, empfehle ich, sich vor diesem Schritt vom physischen Netzwerk zu trennen).

  2. Der Host erlaubt der VM nicht, die Schnittstelle in den Promiscuous-Modus zu versetzen. Ich bin nicht sicher, wie man das in VMware Workstation einstellt, aber in ESX[i] gibt es auf dem vSwitch eine Option für „Promiscuous-Modus zulassen“. Sie können dies auch umgehen, indem Sie die Ziel-MAC-Adresse des tcpreplay-Streams ändern, wie in 1 erwähnt.

  3. Die Berechtigungen für das VMnet im Host sind nicht ausreichend, um den Promiscuous-Modus zu ermöglichen (vorausgesetzt, Sie verwenden Linux als Host-Betriebssystem). Es gibt eine Reihe von VMware-KB-Artikeln zu diesem Thema, und die Lösung ist bestenfalls inkonsistent. Möglicherweise können Sie dies tun, indem Sie die Schnittstelle /dev/vmnetX auf 777 ändern, aber Sie sind wahrscheinlich besser dran, wenn Sie Ihren Replay-Verkehr einfach an die MAC der VM richten, wenn eine der anderen Antworten das Problem nicht zuerst löst.

Viel Glück,

--jed

Antwort2

Wenn die Ziel-MAC-Adresse in der von Ihnen wiedergegebenen Aufzeichnung nicht die MAC auf der Schnittstelle innerhalb der VM ist und es im selben VLAN einen Host mit dieser MAC gibt, werden Sie keinen Datenverkehr sehen, weil der virtuelle Switch die Frames an den Port weiterleitet, der dieser MAC zugeordnet ist.

Versuchen Sie, die Bridge-Forward-Tabelle aufzulisten und nach Ihrem Ziel-Mac zu suchen.

verwandte Informationen