Copia dei pacchetti da un'interfaccia a un'altra


9

Ho un sistema Linux (lascia che sia A) con 2 schede ethernet, vale a dire eth0 ed eth1 che sono collegati a due LAN totalmente non correlate.

Fondamentalmente eth0 viene utilizzato per il normale traffico dell'applicazione e eth1 viene utilizzato solo per scopi di debug. Il debug significa che eth1 è collegato tramite un cavo incrociato a un altro box Linux (sia B) che esegue Wireshark. Voglio che Wireshark sia in grado di elaborare i pacchetti dell'applicazione viaggiando su eth0 di A.

Fondamentalmente ho bisogno di copiare i pacchetti di viaggio dall'interfaccia eth0 all'interfaccia eth1 in modo che Wireshark sulla casella B possa annusarli (per alcuni motivi non ho accesso fisico alla LAN eth0). Potrei anche aver bisogno di specificare quali pacchetti copiare da eth0 a eth1 secondo alcune regole (basato solo sui campi TCP / IP).

Nota anche che l'eth0 di A non deve essere messo in modalità promiscua perché voglio solo copiare un sottoinsieme di pacchetti che hanno A come destinazione

C'è un modo per raggiungere questo obiettivo usando solo iptables? O devo scrivere un'applicazione per farlo funzionare? Cosa devo fare per "copiare" i pacchetti?

Risposte:


7

Se il kernel è abbastanza recente, è possibile utilizzare iptables --tee per inoltrare i frame da eth0 alla macchina di acquisizione.


Quel collegamento è ora protetto da password.
Pipe

4

Puoi usare tc mirred action. Ad esempio: per il traffico in entrata:

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

Per il traffico in uscita:

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

3

Cerca in rete tcpbridge, che è esattamente ciò che fa il lavoro. Può essere utilizzato anche per parlare con macchine virtuali.


1

Qualcosa come rinetd potrebbe funzionare (redirector / server solo per TCP , credo, quindi nessun ARP, Layer 2, ecc.), Ma in tutta onestà, ottenere alcuni switch gestiti che hanno capacità di mirroring delle porte o se quella casella viene utilizzata esclusivamente per WireShark, è possibile aggiungere un'altra scheda NIC ad esso, collegare le due interfacce, metterlo di fronte alla macchina A's eth0 e disporre di una macchina da fiuto dedicata.



0

Nella mia configurazione il traffico TX multicast è stato contrassegnato da iptables ma il routing dei criteri utilizzando nuove tabelle di routing non ha mai funzionato. Ha funzionato per i pacchetti TX unicast (reindirizzando i pacchetti di origine da eth0 a eth5). Usando tc potrei ottenere il traffico di eth0 mcast su eth5 L'indirizzo IP di src mac e src vengono cambiati in quello di eth5, quindi non creeranno problemi con gli apprendimenti degli switch. Tutto il supporto del kernel per la pianificazione dei pacchetti del kernel CONFIG_NET_SCHED deve essere abilitato

Di seguito WORKS per il traffico unicast e multicast che reindirizza da eth0 a eth5

Netfilter può essere usato per interagire direttamente con la struttura che rappresenta un pacchetto nel kernel. Questa struttura, sk_buff, contiene un campo chiamato "__u32 nfmark" che stiamo per modificare. TC leggerà quindi quel valore per selezionare la classe di destinazione di un pacchetto.

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

Andando a creare un albero che rappresenta la nostra politica di pianificazione e che utilizza il qdisc PRIO (scheduler di pacchetti) (puoi provare altri disponibili). qdisc si collega alla radice di un dispositivo

tc qdisc aggiungi dev eth0 root handle 15: prio

Ora hanno da una parte una politica di modellamento del traffico e dall'altra la marcatura dei pacchetti. Per collegare i due, abbiamo bisogno di un filtro.

refer man tc-mirred (8): L'azione mirred consente il mirroring dei pacchetti (copia) o il reindirizzamento (furto) del pacchetto che riceve. Il mirroring è ciò che viene talvolta chiamato Switch Port Analyzer (SPAN) e viene comunemente utilizzato per analizzare e / o eseguire il debug dei flussi.

refer man tc-fw (8): fw - filtro di controllo del traffico fwmark il filtro fw consente di classificare i pacchetti in base a un fwmark precedentemente impostato da iptables. Se è identico alla "maniglia" del filtro, il filtro corrisponde. iptables consente di contrassegnare singoli pacchetti con il target MARK o intere connessioni usando CONNMARK.

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' filtro tc aggiungi dev eth0 parent 15: 0 protocollo ip prio 1 handle 0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred egress red dev eth1

mostra le regole sopra impostate: tc qdisc mostra dev eth0 filtro tc mostra dev eth0

elimina / disattiva le regole sopra impostate: tc qdisc del dev eth0 root

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.