Kopieren von Paketen von einer Schnittstelle zu einer anderen

9

Ich habe ein Linux-System (sei es A) mit 2 Ethernet-Karten, nämlich eth0 und eth1, die an zwei völlig unabhängige LANs angeschlossen sind.

Grundsätzlich wird eth0 für den normalen Anwendungsverkehr verwendet und eth1 wird nur für Debugging-Zwecke verwendet. Debugging bedeutet, dass eth1 über ein Querkabel mit einer anderen Linux-Box (sei es B) verbunden ist, auf der Wireshark ausgeführt wird. Ich möchte, dass Wireshark Anwendungspakete verarbeiten kann, die auf eth0 von A übertragen werden.

Im Grunde muss ich kopieren Reisepakete von eth0 Schnittstelle so als Schnittstelle eth1 , dass Wireshark auf Feld B kann sie schnüffeln (aus irgendwelchen Gründen habe ich nicht den physischen Zugriff auf LAN eth0). Möglicherweise muss ich auch angeben, welche Pakete gemäß einer Regel von eth0 nach eth1 kopiert werden sollen (übrigens nur basierend auf TCP / IP-Feldern).

Beachten Sie auch, dass A's eth0 nicht in den Promiscuous-Modus versetzt werden muss, da ich nur eine Teilmenge von Paketen kopieren möchte, deren Ziel A ist

Gibt es eine Möglichkeit, dies nur mit iptables zu erreichen? Oder muss ich eine Anwendung schreiben, damit dies funktioniert? Was soll ich tun, um die Pakete zu "kopieren"?

Emiliano
quelle

Antworten:

7

Wenn Ihr Kernel aktuell genug ist, können Sie iptables --tee verwenden , um Frames von eth0 an den Erfassungscomputer weiterzuleiten.

Gerald Combs
quelle
Dieser Link ist jetzt passwortgeschützt.
Pipe
4

Sie können tc mirred action verwenden. Zum Beispiel: Für eingehenden Verkehr:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 1:1 \
   action mirred egress mirror dev eth1

Für ausgehenden Verkehr:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1
undefinieren
quelle
3

Durchsuchen Sie das Internet nach tcpbridge, genau das macht der Job. Es kann auch verwendet werden, um mit virtuellen Maschinen zu kommunizieren.

Walter
quelle
1

So etwas wie rinetd Macht Arbeit (Redirector / Server für TCP nur glaube ich, so dass kein ARP, Layer 2, etc.), aber ehrlich gesagt, einige Managed Switches erhalten , die Port Mirroring - Funktionen haben , oder wenn das Feld nur für wireshark verwendet wird, Sie können eine weitere Netzwerkkarte hinzufügen, die beiden Schnittstellen überbrücken, sie vor das eth0 von Maschine A stellen und über eine dedizierte Sniffing-Maschine verfügen.

Soßengesicht
quelle
0

In meinem Setup wurde Multicast-TX-Verkehr durch iptables markiert, aber das Richtlinienrouting unter Verwendung neuer Routingtabellen funktionierte nie. Obwohl es für Unicast-TX-Pakete funktioniert hat (Umleiten von Ursprungspaketen von eth0 nach eth5). Mit tc könnte ich eth0 mcast-Verkehr zu eth5 bringen. Die src mac- und src ip-Adresse werden gegenüber eth5 geändert, sodass keine Probleme mit dem Switch-Lernen entstehen. Die gesamte Kernelunterstützung für die Kernelpaketplanung CONFIG_NET_SCHED muss aktiviert sein

Unten FUNKTIONIERT für Unicast- und Multicast-Verkehr, der von eth0 nach eth5 umgeleitet wird

Netfilter kann verwendet werden, um direkt mit der Struktur zu interagieren, die ein Paket im Kernel darstellt. Diese Struktur, der sk_buff, enthält ein Feld namens "__u32 nfmark", das wir ändern werden. TC liest dann diesen Wert, um die Zielklasse eines Pakets auszuwählen.

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329,330 -o eth0 -j MARK --set-mark 2

Erstellen Sie einen Baum, der unsere Planungsrichtlinie darstellt und der PRIO qdisc (Paketplaner) verwendet (kann andere verfügbare ausprobieren). qdiscs, die im Stammverzeichnis eines Geräts angehängt werden

tc qdisc add dev eth0 root handle 15: prio

Haben Sie jetzt auf der einen Seite eine Traffic-Shaping-Richtlinie und auf der anderen Seite die Paketmarkierung. Um die beiden zu verbinden, benötigen wir einen Filter.

refer man tc-mirred (8): Die Mirred-Aktion ermöglicht das Spiegeln (Kopieren) oder Umleiten (Stehlen) des empfangenen Pakets. Das Spiegeln wird manchmal als Switch Port Analyzer (SPAN) bezeichnet und wird häufig zum Analysieren und / oder Debuggen von Flows verwendet.

refer man tc-fw (8): fw - fwmark-Verkehrssteuerungsfilter Der fw-Filter ermöglicht die Klassifizierung von Paketen basierend auf einer zuvor von iptables festgelegten fwmark. Wenn es mit dem 'Handle' des Filters identisch ist, stimmt der Filter überein. Mit iptables können einzelne Pakete mit dem MARK-Ziel oder ganze Verbindungen mit CONNMARK markiert werden.

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' tc filter add dev eth0 parent 15: 0 Protokoll ip prio 1 handle 0x2 fw Aktion pedit ex munge eth src set $ {MAC_ADDR_ETH1} Pipe \ Aktion pedit ex munge ip src set $ {IP_ADDR_ETH1} Pipe \ action mirred egress dev eth1

oben festgelegte Regeln anzeigen: tc qdisc show dev eth0 tc filter show dev eth0

Löschen / Deaktivieren der oben festgelegten Regeln: tc qdisc del dev eth0 root

noel av
quelle