我可以使用多端口选项通过 iptables 进行负载平衡吗?

我可以使用多端口选项通过 iptables 进行负载平衡吗?

我正在尝试使用 iptables 进行负载平衡。

我的规则如下:

iptables -t nat -A PREROUTING -p tcp --dport 5000 -m statistic --mode nth --every 6 --packet 0 -j REDIRECT --to-port 5890

iptables -t nat -A PREROUTING -p tcp --dport 5000 -m statistic --mode nth --every 5 --packet 0 -j REDIRECT --to-port 5891

iptables -t nat -A PREROUTING -p tcp --dport 5000 -m statistic --mode nth --every 1 --packet 0 -j REDIRECT --to-port 5896

我可以使用多端口选项将六条规则合并为一条吗?

答案1

多端口匹配用作选择器。没有多端口选项目标REDIRECT。如果您尝试在--to-portsREDIRECT 选项中放置端口范围,则只会选择范围中的第一个端口。如果您(设法)使用-j DNAT --to-destination规则而不是 REDIRECT,情况也是如此。不会使用循环。

您当前使用 iptables 的方法肯定是正确的。我能看到的唯一小优化是您不需要-m statistic --mode nth --every 1 --packet 0在最后一条规则上进行优化,因为它始终匹配,并且--packet默认值为 0,因此可以在任何地方省略。

注意:另一种可能的方法是使用 ipvs(又名 lvs),但如果在这种情况下可能的话,这肯定是过度的,特别是对于本地重定向。

相关内容