Ich möchte den Datenverkehr auf virtuellen Linux-Schnittstellen zu Debugging-Zwecken erfassen. Ich habe experimentiert mit veth
, tun
und dummy
Interface - Typen; Bei allen dreien habe ich Probleme, tcpdump
etwas zu zeigen.
So richte ich die Dummy-Schnittstelle ein:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
In einem Terminal sehen Sie es mit tcpdump
:
tcpdump -i dummy10
Hören Sie gleich mit nc
:
nc -l 99.99.99.1 2048
In einem dritten Schritt stellen Sie eine HTTP-Anfrage mit curl
:
curl http://99.99.99.1:2048/
Obwohl wir in Terminal 2 die Daten aus der curl
Anfrage sehen können, zeigt sich nichts von tcpdump
.
In einem Tun / Tap-Tutorial werden einige Situationen erläutert , in denen der Kernel möglicherweise keine Pakete sendet, wenn er auf einer lokalen Schnittstelle ausgeführt wird:
Wenn wir die Ausgabe von tshark betrachten, sehen wir ... nichts. Es wird kein Datenverkehr über die Schnittstelle geleitet. Dies ist richtig: Da wir die IP-Adresse der Schnittstelle anpingen, entscheidet das Betriebssystem korrekt, dass kein Paket "auf dem Draht" gesendet werden muss, und der Kernel selbst antwortet auf diese Pings. Wenn Sie darüber nachdenken, ist es genau das, was passieren würde, wenn Sie die IP-Adresse einer anderen Schnittstelle anpingen würden (zum Beispiel eth0): Es würden keine Pakete gesendet. Dies mag offensichtlich klingen, könnte aber zunächst Verwirrung stiften (es war für mich).
Es ist jedoch schwer einzusehen, wie dies auf TCP-Datenpakete zutreffen könnte.
Vielleicht tcpdump
sollte das Interface anders angebunden sein?
Antworten:
Der Verkehr läuft über die
lo
Schnittstelle.Wenn einer Box eine IP hinzugefügt wird, wird eine Route für diese Adresse zur 'lokalen' Tabelle hinzugefügt. Alle Routen in dieser Tabelle leiten den Verkehr über die Loopback-Schnittstelle weiter.
Sie können den Inhalt der 'lokalen' Tabelle folgendermaßen anzeigen:
Was auf meinem System so aussieht:
Also im Grunde , wenn ich keinen Verkehr senden
10.230.134.38
,127.0.0.0/8
,127.0.0.1
(redundant) ,172.17.42.1
oder192.168.0.20
wird der Verkehr über das Loopback - Interface geroutet, obwohl dieser IPs ist wirklich auf einer andere Schnittstelle.quelle
Sie können
tcpdump
mit jeder Schnittstelle auf dem Host (tcpdump -i any ...
) verwendenquelle
Dies sollte durch Aufrufen eines zweiten Systems möglich sein (möglicherweise sogar einer VM auf diesem Host).
Sie können
DNAT
in derOUTGOING
Kette dernat
Tabelle verwenden und die Pakete an eine Schnittstelle umleiten, die der Kernel nicht steuert. Sie müssen sie dort widerspiegeln:quelle