包含克隆数据包的UDP代理

从dynamic公共IP发送UDP消息定期到公共IP X:20000。

需要一个侦听IP X:20000的代理,然后将重复/克隆数据包转发到位于IP Y:20000的X:20001和不同的计算机。 现在,当应用程序在X:20001上进行侦听时,将对X:20001的消息作出响应,我希望将该消息从X:20000转发回PC A.

我怎样才能在Linux中实现这个function? (试图避免自定义脚本)


试图让一个应用程序在一个无头的服务器响应消息,一台计算机与监视器来实时debugging消息。

我想如果你使用足够新的内核来支持raw表,你可以使用w / iptablessamplicator工具。

首先,为什么socat不起作用:用socat开包stream是相当容易的。 你只要这样做:

 socat - udp4-listen:20000,fork | tee >(socat - udp-sendto:XXXX:20001) >(socat - udp-sendto:YYYY:20000) 

这会将stream量复制到XXXX:20001YYYY:20000

但是,这并不能帮助你,因为在XXXX:20001上监听的服务将“看到”127.0.0.1作为源地址。 这是samplicator可以帮助的地方。 samplicator Google代码页:

这个简单的程序监听networking端口上的UDP数据报,并将这些数据报的副本发送到一组目的地。 …另一个select是它可以“欺骗”IP源地址,以便副本看起来来自原始源,而不是中继。

这听起来正是我们所需要的:源地址。 (说了这么多,我还没有真正的testing过这个工具,我testing的那个盒子没有安装编译器,现在我不打算为Server Fault创build一个。> smile <)

你需要的最后一件事就是照顾来自XXXX:20001的stream量,使它看起来来自XXXX:20000

然后,将XXXX:20001的答复转换为“来自” XXXX:20000

 iptables -t raw -A POSTROUTING -s XXXX -p udp --sport 20001 -j NOTRACK iptables -t nat -A POSTROUTING -s XXXX -p udp --sport 20001 -j SNAT --to-source :20000 

当心:我没有一起testing所有这一切。 我用socat嘲笑它,它运行得很好,减去了samplicator提供的源地址“欺骗”。