Necesito poder obtener una copia de los paquetes recibidos en el puerto 8001 al puerto 8002. He intentado lo siguiente, pero aparece un error que --tee no está definido.
sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee
iptables
puede ser demasiado viejo; consulte Enviar paquetes duplicados a través de dos conexiones a Internet.Respuestas:
La
--tee
bandera no es parte de la cadena DNAT, es parte de ROUTE. Solo puede usarlo después de una declaración de-j ROUTE
. Puede obtener ayuda específica de iptables sobre el tema de esta manera:Estaba mirando su comando iptables, y no tiene ningún sentido para mí. ¿Por qué está tratando de hacer coincidir el origen y el puerto de origen de un paquete cuando en su pregunta dijo "paquetes recibidos en el puerto"? ¿Está tratando de dividir el tráfico entrante para alcanzar dos puertos o tomar la salida de un puerto y vincularlo a la entrada de otro?
Si es lo primero, realmente hay dos pasos. No puede usar tee para obtener una copia del paquete Y manipular el paquete para cambiar los números de puerto al mismo tiempo. Puede intentar esto en dos pasos, primero enviándose una copia duplicada del paquete, luego haciendo coincidir solo la copia y destrozando el puerto de destino. ADVERTENCIA: no probado, considere este pseudocódigo:
fuente
ROUTE
objetivo utilizado en la respuesta anterior es obsoleto a partir de este escrito y no está disponible en iptables en las distribuciones más recientes. Ver serverfault.com/questions/333155/…Además de la respuesta de Caleb , si está trabajando con una
iptables
versión más reciente (v1.4.14) que ya no tiene elROUTE
objetivo, necesitará algo como lo siguiente, probado en Debian Wheezy *:Prueba con "netcat" (
man nc
). En una ventana de terminal, escriba lo siguiente y presione laEnter
tecla:El comando esperará la entrada que escribirá en una segunda ventana de terminal.
En la segunda ventana de terminal, escriba lo siguiente y presione la
Enter
tecla:El comando esperará más información. Escriba cualquier cosa y presione la
Enter
tecla. Después de presionar laEnter
tecla en la segunda ventana de terminal, el texto que escribió en la segunda ventana de terminal debe aparecer en la primera ventana de terminal. PresioneCtrl
-c en la segunda ventana para finalizar la sesión.* Esta sintaxis no es compatible con RHEL / Centos (6.5 o anterior) :-(, por lo que debe utilizarla
socat
para enviar y enviar paquetes entrantes en el puerto original a dos puertos nuevos. Si tuvo procesos de escucha en el puerto de recepción original, entonces necesita reconfigurarlos para que escuchen en uno de los puertos en T, yasocat
que ahora es el oyente en el puerto original. Vea esta publicación SE, por ejemplo, lasocat
sintaxis para la clonación de puertos.fuente
nc -l -p 8002