带有克隆数据包的 UDP 代理

带有克隆数据包的 UDP 代理

定期从动态公网 IP 向公网 IP X:20000 发送 UDP 消息。

需要一个代理来监听 IP X:20000,然后将重复/克隆数据包转发到 X:20001 和位于 IP Y:20000 的另一台机器。现在,当监听 X:20001 的应用程序响应发往 X:20001 的消息时,我希望该消息从 X:20000 转发回 PC A。

我如何在 Linux 中实现此功能?(尝试避免自定义脚本)


尝试在无头服务器中让一个应用程序响应消息,并在需要时让一台带有监视器的计算机实时调试消息。

答案1

我认为你可以做到这iptables一点samplicator如果您使用的内核足够新,可以支持该raw表。

首先,为什么socat不起作用:发送数据包流socat相当容易。你只需这样做:

socat - udp4-listen:20000,fork | tee >(socat - udp-sendto:X.X.X.X:20001) >(socat - udp-sendto:Y.Y.Y.Y:20000)

X.X.X.X:20001这会使到和 的流量重复Y.Y.Y.Y:20000

但这对您没有帮助,因为监听 XXXX:20001 的服务将“看到” 127.0.0.1 作为源地址。这就是samplicator可以提供帮助的地方。Google 代码页如此描述samplicator

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

这听起来正是我们需要的:源地址。(话虽如此,我还没有真正测试过这个工具。我测试的盒子没有安装编译器,我现在不会为了 Server Fault 而启动某些东西。>微笑<)

最后 一件 你 需要 的 就是 照顾 来自 的 交通X.X.X.X:20001, 使它 出现 来自X.X.X.X:20000.

然后,将来自的回复通过 NAT 转换X.X.X.X:20001为“来自” X.X.X.X:20000

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

注意:我还没有测试过所有这些。我模拟了它,socat除了提供的源地址“欺骗”外,它运行良好samplicator

相关内容