J'ai besoin de pouvoir obtenir une copie des paquets reçus sur le port 8001 vers le port 8002. J'ai essayé ce qui suit mais j'obtiens une erreur indiquant que --tee n'est pas défini.
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
peut être trop vieux; voir Envoyer des paquets en double sur deux connexions Internet.Réponses:
Le
--tee
drapeau ne fait pas partie de la chaîne DNAT, il fait partie de ROUTE. Vous ne pouvez l'utiliser qu'à la suite d'une déclaration de-j ROUTE
. Vous pouvez obtenir une aide spécifique d'iptables sur le sujet comme ceci:Je regardais votre commande iptables, et cela n'a aucun sens pour moi. Pourquoi essayez-vous de faire la correspondance avec la source et le port source d'un paquet alors que dans votre question vous avez dit "paquets reçus sur le port"? Essayez-vous de diviser le trafic entrant pour atteindre deux ports ou de prendre la sortie d'un port et de le lier à l'entrée d'un autre?
Si le premier, il y a vraiment deux étapes. Vous ne pouvez pas utiliser tee pour obtenir une copie du paquet ET manipuler le paquet pour changer les numéros de port en même temps. Vous pouvez essayer ceci en deux étapes, en vous envoyant d'abord une copie en double du paquet, puis en faisant correspondre la copie uniquement et en modifiant le port de destination. AVERTISSEMENT: non testé, considérez ce pseudo-code:
la source
ROUTE
cible utilisée dans la réponse ci-dessus est obsolète au moment de la rédaction de cet article et n'est pas disponible dans iptables sur les distributions les plus récentes. Voir serverfault.com/questions/333155/…Suite à la réponse de Caleb , si vous travaillez avec une version plus récente
iptables
(v1.4.14) qui n'a plus laROUTE
cible, vous aurez besoin de quelque chose comme ce qui suit, testé sur Debian Wheezy *:Testez avec "netcat" (
man nc
). Dans une fenêtre de terminal, saisissez suivant et appuyez sur laEnter
touche:La commande attendra l'entrée que vous taperez dans une deuxième fenêtre de terminal.
Dans la deuxième fenêtre du terminal, saisissez ce qui suit et appuyez sur la
Enter
touche:La commande attendra une entrée supplémentaire. Tapez n'importe quoi et appuyez sur la
Enter
touche. Après avoir appuyé sur laEnter
touche dans la deuxième fenêtre de terminal, le texte que vous avez tapé dans la deuxième fenêtre de terminal doit apparaître dans la première fenêtre de terminal. Appuyez surCtrl
-c dans la deuxième fenêtre pour terminer la session.* Cette syntaxe n'est pas prise en charge dans RHEL / Centos (6.5 ou version antérieure) :-( vous devez donc utiliser
socat
pour té et transférer les paquets entrants sur le port d'origine vers deux nouveaux ports. Si vous aviez des processus d'écoute sur le port de réception d'origine, alors vous besoin de les reconfigurer pour écouter sur l'un des ports tee commesocat
c'est maintenant l'écouteur sur le port d'origine. Voir ce post SE pour un exemple desocat
syntaxe pour le clonage de port.la source
nc -l -p 8002