ポート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
ポート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チェーンの一部ではありません。の宣言の後にのみ使用でき-j ROUTE
ます。次のように、件名に関するiptablesから特定のヘルプを取得できます。
$ iptables -j ROUTE help
私はあなたのiptablesコマンドを見ていましたが、それは私には意味がありません。「パケットがポートで受信されました」という質問で、なぜパケットの送信元ポートと送信元ポートと照合しようとしているのですか?着信トラフィックを分割して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
ROUTE
上記の回答で使用されていたターゲットは、この記事の執筆時点では廃止されており、最新のディストリビューションのiptablesでは使用できません。serverfault.com/questions/333155/…を
さらににカレブの答え、あなたが新しいで作業している場合iptables
(v1.4.14)もはやが持っていないことをROUTE
目標に、あなたは*の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
キーを押します。あなたが押した後にEnter
第二ターミナルウィンドウでキーを、あなたは第二ターミナルウィンドウに入力したテキストは、最初のターミナルウィンドウに表示されます。Ctrl
2番目のウィンドウで-cを押して、セッションを終了します。
*この構文はRHEL / Centos(6.5以前)ではサポートされていません :-(したがって、を使用socat
して、元のポートの着信パケットを2つの新しいポートに転送する必要があります。元の受信ポートでリッスンするプロセスがある場合は、 tee'dポートの1つでリッスンするように再構成する必要がありsocat
ます。これで、元のポートのリスナーがそのままになります。socat
ポートクローンの構文例については、このSEの投稿を参照してください。
nc -l -p 8002
iptables
古すぎる可能性があります。2つのインターネット接続を介して重複パケット