在“第n”模式下使用iptables进行负载均衡

时间:2015-02-25 13:47:38

标签: iptables

这是我的iptables脚本,它不起作用。端口9000关闭,打开端口为9001-9003。我想平衡位于localhost上这些端口的三个服务之间的负载。我做错了什么?

#!/bin/bash

start()
{
  echo -e "\e[32mStarting firewall ...\e[m"

  iptables -F

  iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9001 -m statistic --mode nth --every 3 --packet 0
  iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9002 -m statistic --mode nth --every 2 --packet 0
  iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9003 -m statistic --mode nth --every 1 --packet 0
}

stop()
{
  echo -e "\e[31mStoping firewall ...\e[m"

  iptables -F
}

case "$1" in
'start')
  start
  ;;
'stop')
  stop
  ;;
'restart')
  stop
  start
  ;;
*)
  echo -e "\e[36mUsage:\e[m {start|stop|restart}"
esac

谢谢。

2 个答案:

答案 0 :(得分:1)

这是解决方案:

#!/bin/bash

start()
{
  echo -e "\e[32mStarting firewall ...\e[m"

  iptables -t nat -F

  iptables -t nat -A OUTPUT -p tcp --dport 9000 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination :9001
  iptables -t nat -A OUTPUT -p tcp --dport 9000 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination :9002
  iptables -t nat -A OUTPUT -p tcp --dport 9000 -m state --state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination :9003
}

stop()
{
  echo -e "\e[31mStoping firewall ...\e[m"

  iptables -t nat -F
}

case "$1" in
'start')
  start
  ;;
'stop')
  stop
  ;;
'restart')
  stop
  start
  ;;
*)
  echo -e "\e[36mUsage:\e[m {start|stop|restart}"
esac

答案 1 :(得分:0)

这会将一个包发送到9001,然后发送到9002,依此类推......

iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9001 -m nth --every 3 --packet 0
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9002 -m nth --every 3 --packet 1
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 127.0.0.1:9003 -m nth --every 3 --packet 2

您指定了mode参数两次,-m和--mode。