Ich habe einen Bare-Metal-Computer mit Ubuntu Server 16.04 mit KVM und 3 Netzwerkkarten, die über die Bridges br1, br2 und br3 mit einer Gast-VM verbunden sind, auf der ebenfalls Ubuntu Server 16.04 läuft.
Die erste Netzwerkkarte – br1 – ist mit dem Internet verbunden und ihre Routeradresse ist als Standard-Gateway für den Gast definiert.
Auf meinem Gast läuft ein Code, der die von br2 und br3 empfangenen Pakete abhören muss. Der Code sollte nur auf 1 NIC abhören.
Ich habe versucht, den Datenverkehr von en2 (der Name der Gast-NIC, die über br2 überbrückt wird) an en3 (dasselbe mit br3) weiterzuleiten, indemim Anschluss daran:
sudo nano /etc/sysctl.conf
uncomment net.ipv4.ip_forward = 1
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING --out-interface en3 -j MASQUERADE
sudo iptables -A FORWARD --in-interface en2 --out-interfac en3 -j ACCEPT
Es wird jedoch nichts aufgezeichnet, wenn ich sudo tpcdump -i en3
eine Ping-Nachricht an NIC2 verwende und sende (während ich beim Ausführen sudo tpcdump -i en2
die Ping-Nachrichten sehen kann).
Was übersehe ich hier? Gibt es für mich eine bessere Möglichkeit, das gewünschte Ergebnis zu erzielen (dass mein Code auf einer Netzwerkkarte hört und den Datenverkehr beider Netzwerkkarten abfängt)?
Antwort1
Um gezielt den weitergeleiteten Datenverkehr abzuhören, ist es besser, eine nflog
Regel/Schnittstelle zu erstellen.
Erstellen von Datenverkehrsdumps unter Linux
Sie erstellen also eine nflog
Schnittstelle:
sudo iptables -t filter -I FORWARD -j NFLOG --nflog-group 6
und dann hör es dir an:
sudo tcpdump -s 0 -n -i nflog:6
Die Lösung des Problems besteht darin, die nflog-Schnittstelle im iptables-Framework zu verwenden, um genau die Pakete zu erhalten, an denen wir interessiert sind.
nflog-Regeln protokollieren in einer kernelinternen Multicast-Gruppe, die durch eine Ganzzahl im Bereich 0 - 2^16-1 identifiziert wird. Nur der Teil des Datagramms, den das Framework sieht, wird erfasst. Für iptables ist das ein IPv4-Paket.
Wenn Sie nflog zum Dumpen von Paketen verwenden, müssen Sie eine spezielle Schnittstellensyntax für tcpdump und wireshark verwenden. Sie müssen nflog:groupnumber als Schnittstelle verwenden.
Da es sich bei NFLOG-Regeln um normale iptables-Regeln handelt, benötigen die Regeln einen passenden Match- und Zielteil, damit Sie genau den gewünschten Datenverkehr erhalten. Sie müssen die Regel auch an der richtigen Stelle einfügen, damit sie die Pakete erhält, an denen Sie interessiert sind.