iptables:重复的 UDP 数据包的目标 IP 错误

iptables:重复的 UDP 数据包的目标 IP 错误

我有以下设置:

  • 数据源 (IP 192.168.178.1) 向服务器发送 UDP 数据包。
  • 服务器(Debian)收集并处理UDP数据(IP 192.168.178.10、端口4000
  • PC(Windows 10)应该监视UDP数据(IP 192.168.178.22,端口4000

这个想法是复制 UDP 数据并使用iptabels.该规则在 Debian 服务器(IP 192.168.178.10)上设置:

iptables -t mangle -A PREROUTING -p udp --dport 4000 -j TEE --gateway 192.168.178.22 

效果是:

  • 服务器仍然接收并处理 UDP 数据(正常)。
  • PC 也接收该数据,但是错误的目标IP。因此,监控软件不会处理该数据。

在 PC 上,Wireshark 显示目标地址不是 PC 的 IP (.22),而是服务器的 IP (.10):

Internet Protocol Version 4, Src: 192.168.178.1, Dst: 192.168.178.10

现在有两个,也许三个问题:

  • 为什么PC会收到转发的UDP数据包,因为这些数据包的目的IP地址不匹配?
  • 如何将iptables规则的IP地址更改为PC的IP地址?也许我需要为 POSTROUTING 添加一条规则?
  • 我需要更新任何校验和吗?

答案1

我找到了针对此问题的以下解决方案:

  1. 在数据源处复制 UDP 数据包,而不是在目标处执行此操作。此规则复制 PC (.22) 的所有传出 UDP 数据包并将它们发送到服务器 (.10):

    sudo iptables -t mangle -A OUTPUT -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10

  2. 在服务器上,目标地址仍然是PC的地址,因此必须将其更改为服务器的IP地址:

    sudo iptables -t nat -A PREROUTING -p udp --dport 4000 -j NETMAP --to 192.168.178.10

现在服务器和 PC 都收到具有正确目标地址的 UDP 数据包,因此软件将接受数据。

相关内容