使用 iptables 进行端口镜像 - 复制 :80 上的 nginx 和 :8080 上的 Apache 之间的所有流量

使用 iptables 进行端口镜像 - 复制 :80 上的 nginx 和 :8080 上的 Apache 之间的所有流量

我有 nginx 在端口 80 上运行,Apache 在端口 8080 上运行

我想将所有流量异步传输到 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

我正在努力了解这在实践中如何发挥作用。端口镜像的通常用途是监视通过特定接口的数据包,而不主动参与网络协议。

将 TCP 数据包传递到端口 80 和 8080 上的应用程序需要有两个目标 TCP 端点与单个源 TCP 端点进行通信。这只能以失败告终。即使您可以安排 SYN、ACK 和其他值在 80 和 8080 上的 TCP 堆栈之间同步,应用程序仍将产生输出,因此请求者将获得双倍数据。

如果您确实想使用端口镜像,那么您需要使用执行低级数据包分析的应用程序。或者,您可能需要进行某种形式的 Web access.log 分析来分析 nginx 提供的流量。

相关内容