Ich muss in der Lage sein, eine Kopie der an Port 8001 bis Port 8002 empfangenen Pakete zu erhalten. Ich habe Folgendes versucht, erhalte jedoch die Fehlermeldung, dass --tee undefiniert ist.
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
möglicherweise zu alt; Siehe Senden doppelter Pakete über zwei Internetverbindungen.Antworten:
Das
--tee
Flag ist nicht Teil der DNAT-Kette, sondern Teil der ROUTE. Sie können es nur nach einer Deklaration von verwenden-j ROUTE
. Sie können spezifische Hilfe von iptables zu diesem Thema erhalten:Ich habe mir Ihren Befehl iptables angesehen, und er ergibt für mich keinen Sinn. Warum versuchen Sie, mit der Quelle und dem Quellport eines Pakets abzugleichen, wenn Sie in Ihrer Frage "Packegs auf Port empfangen" sagten ? Versuchen Sie, eingehenden Datenverkehr auf zwei Ports aufzuteilen oder die Ausgabe eines Ports mit der Eingabe eines anderen zu verknüpfen?
Wenn erstere, gibt es wirklich zwei Schritte. Sie können tee nicht verwenden, um eine Kopie des Pakets zu erhalten UND das Paket zu zerfleischen, um gleichzeitig die Portnummern zu ändern. Sie können dies in zwei Schritten versuchen: Senden Sie sich zuerst eine doppelte Kopie des Pakets, stimmen Sie dann nur mit der Kopie überein und beschädigen Sie den Zielport. WARNUNG: ungetestet, betrachten Sie diesen Pseudocode:
quelle
ROUTE
in der obigen Antwort verwendete Ziel ist zum jetzigen Zeitpunkt veraltet und in den neuesten Distributionen nicht in iptables verfügbar. Siehe serverfault.com/questions/333155/…Im Anschluss an Caleb ‚s Antwort, wenn Sie mit neueren arbeiten
iptables
(v1.4.14) , dass nicht mehr das hatROUTE
Ziel werden Sie so etwas wie die folgenden, getestet auf Debian Wheezy * benötigen:Test mit "netcat" (
man nc
). Geben Sie in einem Terminalfenster Folgendes ein und drücken Sie dieEnter
Taste:Der Befehl wartet auf Eingaben, die Sie in ein zweites Terminalfenster eingeben.
Geben Sie im zweiten Terminalfenster Folgendes ein und drücken Sie die
Enter
Taste:Der Befehl wartet auf weitere Eingaben. Geben Sie etwas ein und drücken Sie die
Enter
Taste. Nachdem Sie dieEnter
Taste im zweiten Terminalfenster gedrückt haben, sollte der Text, den Sie im zweiten Terminalfenster eingegeben haben, im ersten Terminalfenster angezeigt werden. Drücken SieCtrl
-c im zweiten Fenster die Sitzung zu beenden.* Diese Syntax wird in RHEL / Centos (6.5 oder früher) nicht unterstützt :-( Sie müssen also verwenden
socat
, um eingehende Pakete am ursprünglichen Port abzutasten und an zwei neue Ports weiterzuleiten Sie müssen neu konfiguriert werden, um einen der Tee-Ports abzuhören, wie diessocat
jetzt der Listener des ursprünglichen Ports ist. In diesem SE-Beitrag finden Sie beispielsweise diesocat
Syntax für das Klonen von Ports.quelle
nc -l -p 8002