我正在尝试使用 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-ports
REDIRECT 选项中放置端口范围,则只会选择范围中的第一个端口。如果您(设法)使用-j DNAT --to-destination
规则而不是 REDIRECT,情况也是如此。不会使用循环。
您当前使用 iptables 的方法肯定是正确的。我能看到的唯一小优化是您不需要-m statistic --mode nth --every 1 --packet 0
在最后一条规则上进行优化,因为它始终匹配,并且--packet
默认值为 0,因此可以在任何地方省略。
注意:另一种可能的方法是使用 ipvs(又名 lvs),但如果在这种情况下可能的话,这肯定是过度的,特别是对于本地重定向。