使用统计模块的iptables nth模式进行简单的负载均衡

时间:2014-12-09 11:55:41

标签: iptables

我正在尝试使用iptables进行负载平衡。我正在使用virtualbox。所有虚拟机(debian)都在内部网络中,IP是静态的。我想将来自我的Web服务器(apache2)的IP地址10.0.0.2:80的请求路由到另一个网络上的服务器10.0.0.3:80192.168.0.2:80的IP地址。网络构造如下:
网关进行IP转发,它有两个接口:eth0用于网络10.0.0.0eth1用于网络192.168.0.0。然后是一个IP地址为10.0.0.2的负载均衡器。我试图制定这些规则,但它们没有成功:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.3:80    
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.0.2:80

1 个答案:

答案 0 :(得分:5)

首先,因为在您的情况下,传入连接应分布在2台服务器上,因此可以预期与建议的解决方案类似的解决方案,但使用--every 2而不是--every 3工作

但是,正如this answer所示,当nth模式成为statistic模块的一部分(过去它是一个单独的模块)时,数据包计数器已从全局一对多个人,每个规则一个。

因此,以下内容应该有效:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 10.0.0.3:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 192.168.0.2:80

当然在第二条规则中没有实际需要使用statistic模块,但是我已将它放在那里供将来参考,以便阐明如果传入连接是如何构建规则的分布在3个或更多服务器上,而不仅仅是2个。