IPTABLES:在本地处理数据包并将副本发送到另一台主机

IPTABLES:在本地处理数据包并将副本发送到另一台主机

我在配置 iptables 来执行此操作时遇到问题:某些客户端向服务器发送消息。我希望主机服务器在本地处理消息(主机 A,正常情况下),但另外对于每个消息(tcp 数据包),将数据包的副本发送到另一台主机(主机 B,运行服务器的修改版本,并且我想看看相同消息的行为如何,以便我可以比较两个服务器)。应该用 iptables 来完成。我尝试过以下命令。这些将数据包发送到 B,但主机 A 不处理该消息(应该由第二个命令完成?)。

iptables -t nat -A PREROUTING -p tcp --dport 31090 -j DNAT --to-destination IP_HOST_B:32090
iptables -t nat -A POSTROUTING -p tcp --dport 32090 -j SNAT --to-source IP_HOST_A:31090

为了实现我的目标,我的配置中遗漏了哪些内容?

谢谢。

答案1

一些注意事项:

  • SNAT 不会按照您在描述中描述的方式工作,SNAT 会替换源 IP,但不会更改目标 IP。数据包通过 2 条规则后,它将具有:
    • 来源:IP_HOST_A:31090
    • 目的地:IP_HOST_B:32090
  • DNAT 或 SNAT 目标都无法复制数据包

为了复制数据包,您可以使用 TEE target , cf man iptables-extensions

球座

   The TEE target will clone a packet and redirect this clone
   to another machine on the local network segment. In  other
   words, the nexthop must be the target, or you will have to
   configure the nexthop to forward it further if so desired.

   --gateway ipaddr
          Send the cloned packet to the host reachable at the
          given  IP  address.  Use of 0.0.0.0 (for IPv4 pack‐
          ets) or :: (IPv6) is invalid.

在你的情况下,这将给出:

iptables -t mangle -A POSTROUTING -p tcp --dport 31900 -j TEE --gateway IP_HOST_B

但是,我怀疑这种数据包复制是否适合您的情况,因为使用了 TCP。 TCP 旨在在客户端和服务器之间建立连接。在这里,您会遇到一个客户端和 2 个服务器的情况:将会出现问题。

相关内容