Copiar paquetes de una interfaz a otra


9

Tengo un sistema Linux (que sea A) con 2 tarjetas ethernet, a saber, eth0 y eth1 que están conectadas a dos LAN totalmente no relacionadas.

Básicamente, eth0 se usa para el tráfico normal de aplicaciones y eth1 se usa solo para fines de depuración. La depuración significa que eth1 está vinculado mediante un cable cruzado a otra caja de Linux (que sea B) que ejecuta Wireshark. Quiero que Wireshark pueda procesar paquetes de aplicaciones que viajan en el eth0 de A.

Básicamente, necesito copiar los paquetes de viaje de la interfaz eth0 a la interfaz eth1 para que Wireshark en la casilla B pueda rastrearlos (por algunas razones no tengo acceso físico a LAN eth0). También podría necesitar especificar qué paquetes copiar de eth0 a eth1 de acuerdo con alguna regla (por cierto, según los campos TCP / IP).

También tenga en cuenta que el eth0 de A no necesita ponerse en modo promiscuo porque solo quiero copiar un subconjunto de paquetes que tienen A como destino

¿Hay alguna manera de lograr esto usando solo iptables? ¿O necesito escribir una aplicación para que esto funcione? ¿Qué debo hacer para "copiar" los paquetes?

Respuestas:


7

Si su núcleo es lo suficientemente reciente, puede usar iptables --tee para reenviar marcos desde eth0 a la máquina de captura.


Ese enlace ahora está protegido con contraseña.
Pipe

4

Puede usar la acción reflejada tc. Por ejemplo: para el tráfico entrante:

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

Para tráfico saliente:

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

Busque en la red tcpbridge, que es exactamente lo que hace el trabajo. También se puede usar para hablar con máquinas virtuales.


1

Algo como rinetd podría funcionar (redirector / servidor para TCP solo creo, por lo que no hay ARP, capa 2, etc.), pero honestamente, obtener algunos conmutadores administrados que tengan capacidades de duplicación de puertos o si esa caja se usa únicamente para cables de conexión, podría agregarle otra NIC, conectar las dos interfaces, ponerla frente al eth0 de la máquina A y tener una máquina de detección exclusiva.



0

En mi configuración, el tráfico TX de multidifusión estaba marcado por iptables, pero el enrutamiento de políticas utilizando nuevas tablas de enrutamiento nunca funcionó. Aunque funcionó para paquetes TX de unidifusión (redirigiendo paquetes de origen de eth0 a eth5). Usando tc, podría llevar el tráfico eth0 mcast a eth5. La dirección src mac y src ip se cambian a la de eth5, por lo que no creará problemas con los aprendizajes de los conmutadores. Todo el soporte del núcleo para la programación de paquetes del núcleo CONFIG_NET_SCHED debe estar habilitado

Abajo FUNCIONA para el tráfico de unidifusión y multidifusión que redirige de eth0 a eth5

Netfilter se puede usar para interactuar directamente con la estructura que representa un paquete en el núcleo. Esta estructura, sk_buff, contiene un campo llamado "__u32 nfmark" que vamos a modificar. TC leerá ese valor para seleccionar la clase de destino de un paquete.

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 multipuerto --dports 329,330 -o eth0 -j MARK --set-mark 2

Vamos a crear un árbol que represente nuestra política de programación y que use el qdisc PRIO (programador de paquetes) (puede probar otros disponibles). qdiscs adjuntando en la raíz de un dispositivo

tc qdisc add dev eth0 root handle 15: prio

Ahora tenga a un lado una política de modelado de tráfico y al otro lado la marca de paquetes. Para conectar los dos, necesitamos un filtro.

refer man tc-mirred (8): la acción mirred permite la duplicación de paquetes (copia) o la redirección (robo) del paquete que recibe. La duplicación es lo que a veces se denomina Switch Port Analyzer (SPAN) y se usa comúnmente para analizar y / o depurar flujos.

refer man tc-fw (8): fw - filtro de control de tráfico fwmark el filtro fw permite clasificar paquetes basados ​​en un fwmark previamente establecido por iptables. Si es idéntico al 'identificador' del filtro, el filtro coincide. iptables permite marcar paquetes individuales con el objetivo MARK, o conexiones completas 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' tc filter add dev eth0 parent 15: 0 protocol 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 redirect de salida dev eth1

mostrar las reglas establecidas arriba: tc qdisc show dev eth0 filtro tc show dev eth0

eliminar / desarmar las reglas establecidas arriba: tc qdisc del dev eth0 root

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.