ポート8001で受信したパケットのコピーをポート8002に取得できるようにする必要があります。次のことを試しましたが、-teeが未定義であるというエラーが表示されます。
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
--tee
フラグはDNATチェーンの一部ではなく、ROUTEの一部です。 -j ROUTE
の宣言の後にのみ使用できます。次のように、iptablesから特定のヘルプを取得できます。
$ iptables -j ROUTE help
私はあなたのiptablesコマンドを見ていましたが、それは私には意味がありません。質問で「packegs received on port」と言ったのに、なぜパケットの送信元および送信元ポートと照合しようとしているのですか?着信トラフィックを分割して2つのポートにヒットするか、1つのポートの出力を取得して別のポートの入力に結び付けようとしていますか?
前者の場合、実際には2つのステップがあります。 teeを使用してパケットのコピーを取得し、同時にパケットをマングルしてポート番号を変更することはできません。これは2つのステップで試すことができます。最初にパケットのコピーを自分に送信し、次にコピーのみを照合して宛先ポートをマングリングします。 警告:テストされていません。この疑似コードを検討してください:
$ Sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ Sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002
Caleb の回答に加えて、iptables
ターゲットがなくなった新しいROUTE
(v1.4.14)を使用している場合は、次のようなものが必要になります。 、Debian Wheezy *でテスト済み:
iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002
"netcat"(man nc
)。ターミナルウィンドウで次のように入力し、Enter
キーを押します。
nc -l 8002
コマンドは、2番目のターミナルウィンドウに入力する入力を待ちます。
2番目のターミナルウィンドウで次のように入力し、Enter
キーを押します。
nc 127.0.0.1 8001
コマンドはさらに入力を待ちます。何かを入力し、Enter
キーを押します。 2番目のターミナルウィンドウでEnter
キーを押すと、2番目のターミナルウィンドウに入力したテキストが最初のターミナルウィンドウに表示されます。 2番目のウィンドウでCtrl
- cを押して、セッションを終了します。
*この構文はRHEL/Centos(6.5以前)ではサポートされていません: したがって、socat
を使用して元のポートの着信パケットを2つの新しいポートに転送します。元の受信ポートでリッスンしているプロセスがある場合、socat
がリスナーになるので、それらをtee'dポートの1つでリッスンするように再構成する必要があります。元のポート。ポートクローンのsocat
構文の例---(このSEの投稿 を参照してください。