我有一个应用程序,其中设备将UDP流量发送到Linux机箱,在那里使用UDP samplicator进行复制并发送到多个其他设备进行分析 . UDP samplicator配置为在复制时保留原始传入数据包的源地址 . 那部分完美无缺 .
我今天在samplicator盒子上使用iptables有选择地不将UDP流量从某些来源转发到特定的分析目标,因为一些分析目标只需要查看来自某些设备的数据,这也很有效 .
我遇到麻烦的地方是,有一些设备需要在其传入的UDP流量上重写源地址,以克服某个特定设备供应商的一些限制 . 克服这个限制的最简单方法是在samplicator上使用iptables重新编写来自设备10.1.2.3的传入UDP数据包的源地址,然后将这些数据包复制到分析目标,这样他们就能看到流量到来另一个地址,如10.4.5.6 .
由于这是UDP并且分析目标不直接响应它们从设备接收的UDP数据包,因此我不需要担心双向转换流量 .
10.1.2.3 =设备的UDP流量来自的IP地址
10.4.5.6 =我们需要看到它的IP地址
10.7.8.9 =分析目标之一
我在我的samplicator盒子上尝试了这个: sudo iptables -t nat -A POSTROUTING -p udp -s 10.1.2.3 --dport 6343 -j SNAT --to-source 10.4.5.6:6343
但是在分析目标上,我仍然看到许多UDP流量通过源地址10.1.2.3,而10.4.5.6没有 .
$ sudo tcpdump -n -i eth0 host 10.1.2.3 and port 6343
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:02:56.443038 IP 10.1.2.3.19147 > 10.7.8.9.6343: sFlowv5, IPv4 agent 10.1.2.3, agent-id 2, length 276
19:02:56.914536 IP 10.1.2.3.55326 > 10.7.8.9.6343: sFlowv5, IPv4 agent 10.1.2.3, agent-id 1, length 1336
我在iptables中尝试了一些其他选项,但似乎都没有 . 任何人都可以提供有关如何使NAT正常工作的任何见解将不胜感激 .