如果目标端口未被侦听,则使用iptablesredirect

我有一个服务器在端口10000监听。但是这个服务器只在特殊情况下运行(然后有一些第三个服务可用)。 否则,端口不会被监听。 如果10000不在监听,是否有可能将客户端redirect到另一个端口?

我看到两个解决scheme:1)插入/删除服务器启动/停止iptables规则,但由于服务器可能会被杀死,它可能不会插入正确的iptableredirect规则之前死亡。

2)制定永久用户空间规则,检查端口是否正在侦听,如果没有侦听,则redirect数据包。

怎么做2)? 有人有ipq食谱吗?

可能有人可以build议我一个更好的方法?

这就像回退redirect:我会有不同的端口(10000-11000)的客户端,如果他们的服务器实例没有运行,乳清应该被redirect到一些页面,解释为什么他们没有和实例连接。

使用-m socket匹配。

看到这个网页的一些更明确的说明: http : //carnivore.it/2009/11/22/iptables_-_match_closed_ports

我认为更好的select是使用负载均衡器,如haproxy。 您可以将其configuration为侦听多个端口并使用不同的后端服务器。

要实现将用户redirect到不同端口(或不同服务器)的function,可以在haproxy中使用backup选项。

这是您的前端(客户端)和后端服务器的简化configuration:

 frontend my_clients 0.0.0.0:10000 acl its_ok always_true use_backend my_backend if its_ok default_backend my_backend backend my_backend balance source server server1 IP:port other options... server server2 IP:port other options... 

如这里所说,你可以使用backup关键字。 这意味着仅当没有其他非备份服务器可用时才使用备份服务器。

这主要用于HTTP负载平衡,但他们说,它可以用于其他基于TCP的服务。