如果目标端口未被监听,则使用 iptables 重定向

如果目标端口未被监听,则使用 iptables 重定向

我有一个服务器监听端口 10000。但是这个服务器只在特殊情况下运行(即某些第三种服务可用)。否则端口不会被监听。如果 10000 没有监听,是否可以将客户端重定向到另一个端口?

我看到两个解决方案:1)在服务器启动/停止时插入/删除 iptables 规则,但由于服务器可能会被终止,因此它可能无法在终止之前插入正确的 iptable 重定向规则。

2)制定一个永久的用户空间规则,检查端口是否正在监听,如果未监听则重定向数据包。

如何做 2) ?有人有 ipq 的配方吗?

也许有人可以建议我一个更好的方法?

这有点像后备重定向:我有数千个具有不同端口(10000-11000)的客户端,如果它们的服务器实例没有运行,则应该将它们重定向到某个页面,解释为什么它们没有连接实例。

答案1

使用-m socket匹配。

请参阅此网页以获取更明确的说明:http://carnivore.it/2009/11/22/iptables_-_match_closed_ports

答案2

我认为更好的选择是使用诸如 haproxy 之类的负载平衡器。您可以将其配置为侦听多个端口并使用不同的后端服务器。

要实现将用户重定向到不同端口(或不同服务器)的功能,可以使用backuphaproxy 中的选项。

这是针对您的前端(客户端)和后端服务器的过于简单的配置:

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 的服务。

相关内容