iptablesを使用したポートミラーリング - :80のnginxと:8080のApache間のすべてのトラフィックのコピー

iptablesを使用したポートミラーリング - :80のnginxと:8080のApache間のすべてのトラフィックのコピー

私はポート80でnginxを実行し、ポート8080でApacheを実行しています。

私はnginxとApacheへのすべてのトラフィックを非同期にしたいと思います。つまり、あるサーバーのパフォーマンスは別のサーバーに依存しません。その理由は、nginxが私のウェブサイトを提供し、Apacheがトラフィックを分析するために使用されるためです。

以下の質問に記載されている解決策を試しました。

iptables ポートミラーリング

sudo iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1/32 --dport 80 -j TEE --gateway 127.0.0.1

そして

sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8080 -j SNAT --to 127.0.0.1:8080

ソリューションでは、NATテーブルでDNATとPOSTROUTINGを使用していると言いますが、これは許可されていません。 DNAT は PREROUTING/OUTPUT でのみ許可されます。

Ubuntu 11.04でiptables v1.4.10を使用しています。

答え1

私はこれが実際にどのように機能するかを理解しようとしています。ポートミラーリングの一般的な用途は、ネットワークプロトコルに積極的に参加することなく、特定のインターフェイスを通過するパケットを監視することです。

ポート80および8080にTCPパケットを転送するアプリケーションには、単一のソースTCPエンドポイントと通信する2つの宛先TCPエンドポイントが必要です。これは失敗でのみ終了できます。 SYN、ACK、および他の値が80と8080のTCPスタック間で同期する準備ができていても、アプリケーションは依然として出力を生成するため、要求者は2倍のデータを受け取ります。

ポートミラーリングを実際に使用するには、低レベルのパケット分析を実行するアプリケーションを使用する必要があります。あるいは、nginxが提供するトラフィックを分析するために、ある種のWeb access.log分析を実行する必要があるかもしれません。

関連情報