这是我的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
谢谢。
答案 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。