我有以下设置:
- 数据源 (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
我找到了针对此问题的以下解决方案:
在数据源处复制 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
在服务器上,目标地址仍然是PC的地址,因此必须将其更改为服务器的IP地址:
sudo iptables -t nat -A PREROUTING -p udp --dport 4000 -j NETMAP --to 192.168.178.10
现在服务器和 PC 都收到具有正确目标地址的 UDP 数据包,因此软件将接受数据。