我有一台服务器在端口50000上运行UDP服务器。此服务器接收来自客户端的更新,并将客户端每5秒钟ping回它们连接的套接字。
现在我想通过另一台服务器redirect到和来自这个UDP服务器的所有stream量。 基本上我想在这个服务器前面设置一个透明代理。 原因是我想能够轻松地控制哪个服务器处理UDP通信,而不需要更改DNS设置。
起初我试着用socat来创build这个代理:
socat UDP-LISTEN:50000,fork UDP:myserver:50000
但是,这似乎适用于传入stream量,但是从我的服务器返回到客户端的stream量不能到达目的地。 此外,似乎socat为每个连接分配了另一个进程,所以当客户端断开/切换IP时,最终可能会有太多的进程和死进程。
我意识到,我可以使用iptables的NATfunction,但它似乎并没有为我工作。 我试过的configuration是:
sudo iptables -t nat -A PREROUTING -p udp --dport 50000 -j DNAT --to-destination myserver:50000
但它似乎并没有工作 – 我甚至没有看到我的服务器上的连接。 我不确定是由于configuration错误还是由于其他问题。
一些问题:
更新:实际处理stream量的服务器是在一个不同的机器上,而我试图设置iptables。
你的描述中有一些你没有提到的点:
FORWARD链默认策略设置为ACCEPT ,或者通过允许特定stream量(ip / port)来完成。 要启用IP转发,请在/etc/sysctl.conf取消注释以下行:
net.ipv4.ip_forward=1
然后,执行: sudo sysctl -p 。
使用iptables命令添加规则只会将它们添加到内存中(重新启动后它们会丢失)。 您需要使用iptables-save将它们保存到一个文本文件中,并在需要时使用iptables-restore 。