定期从动态公网 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
。