Copie de paquets d'une interface à une autre

9

J'ai un système Linux (que ce soit A) avec 2 cartes Ethernet, à savoir eth0 et eth1 qui sont attachées à deux réseaux locaux totalement indépendants.

Fondamentalement, eth0 est utilisé pour le trafic d'application normal et eth1 est utilisé uniquement à des fins de débogage. Le débogage signifie que eth1 est lié à l'aide d'un câble croisé à une autre boîte Linux (que ce soit B) qui exécute Wireshark. Je veux que Wireshark puisse traiter les paquets d'application voyageant sur eth0 de A.

Fondamentalement, je dois copier les paquets itinérants de l'interface eth0 vers l'interface eth1 afin que Wireshark sur la boîte B puisse les sniffer (pour certaines raisons, je n'ai pas d'accès physique au LAN eth0). Je pourrais également avoir besoin de spécifier les paquets à copier de eth0 vers eth1 selon une règle (basée uniquement sur les champs TCP / IP en passant).

Notez également que le eth0 de A n'a pas besoin d'être mis en mode promiscuous car je veux seulement copier un sous-ensemble de paquets qui ont A comme destination

Existe-t-il un moyen d'y parvenir en utilisant uniquement iptables? Ou dois-je écrire une application pour que cela fonctionne? Que dois-je faire pour "copier" les paquets?

Emiliano
la source

Réponses:

7

Si votre noyau est assez récent, vous pouvez utiliser iptables --tee pour transférer les trames de eth0 vers la machine de capture.

Gerald Combs
la source
Ce lien est désormais protégé par mot de passe.
Pipe
4

Vous pouvez utiliser l'action miroir tc. Par exemple: Pour le trafic entrant:

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

Pour le trafic sortant:

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
indéfinir
la source
3

Recherchez le tcpbridge sur le net, c'est exactement ce que fait le Job. Il peut également être utilisé pour parler aux machines virtuelles.

Walter
la source
1

Quelque chose comme rinetd pourrait fonctionner (redirecteur / serveur pour TCP uniquement, je pense, donc pas d'ARP, couche 2, etc.), mais en toute honnêteté, obtenir des commutateurs gérés qui ont des capacités de mise en miroir des ports ou si cette boîte est uniquement utilisée pour Wharkshark, vous pouvez y ajouter un autre NIC, relier les deux interfaces, le placer devant eth0 de la machine A et avoir une machine de reniflement dédiée.

gravyface
la source
0

Dans ma configuration, le trafic TX multidiffusion a été marqué par iptables, mais le routage de stratégie à l'aide de nouvelles tables de routage n'a jamais fonctionné. Bien que cela ait fonctionné pour les paquets TX unicast (redirigeant les paquets d'origine de eth0 vers eth5). L'utilisation de tc i pourrait obtenir du trafic mcast eth0 vers eth5. L'adresse src mac et src ip sont modifiées par rapport à eth5, donc cela ne créera pas de problèmes d'apprentissage du commutateur. Toute la prise en charge du noyau pour la planification des paquets du noyau CONFIG_NET_SCHED doit être activée

Ci-dessous TRAVAUX pour la redirection du trafic unicast et multicast de eth0 vers eth5

Netfilter peut être utilisé pour interagir directement avec la structure représentant un paquet dans le noyau. Cette structure, le sk_buff, contient un champ appelé «__u32 nfmark» que nous allons modifier. TC lira ensuite cette valeur pour sélectionner la classe de destination d'un paquet.

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

Je vais créer une arborescence qui représente notre politique de planification et qui utilise le qdisc PRIO (planificateur de paquets) (peut en essayer d'autres disponibles). qdiscs attachés à la racine d'un périphérique

tc qdisc add dev eth0 root handle 15: prio

Maintenant, d'un côté, une politique de mise en forme du trafic et de l'autre côté, le marquage des paquets. Pour connecter les deux, nous avons besoin d'un filtre.

refer man tc-mirred (8): L'action mirred permet la mise en miroir de paquets (copie) ou la redirection (vol) du paquet qu'elle reçoit. La mise en miroir est ce que l'on appelle parfois Switch Port Analyzer (SPAN) et qui est couramment utilisée pour analyser et / ou déboguer les flux.

refer man tc-fw (8): fw - filtre de contrôle du trafic fwmark le filtre fw permet de classer les paquets en fonction d'un fwmark préalablement défini par iptables. S'il est identique à la «poignée» du filtre, le filtre correspond. iptables permet de marquer des paquets uniques avec la cible MARK, ou des connexions entières en utilisant 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' filtre tc ajouter dev eth0 parent 15: 0 protocole ip prio 1 gérer 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 redirect dev eth1

afficher les règles définies ci-dessus: tc qdisc afficher dev eth0 filtre tc afficher dev eth0

supprimer / annuler les règles définies ci-dessus: tc qdisc del dev eth0 root

noel av
la source