Добрый день.
Имеется Centos 6.2, два провайдера. Качнул скрипт на переключение каналов при падении одного сhanel_switch.sh вот собственно он:
#! /bin/bashMAIN=172.18.19.1
SECOND=192.168.35.1# Получаем текущий роутер по умолчанию.
CURRENT=$(route -n | tail -1 | awk '{ print $2}')#echo $CURRENT
# Проверяем, пингуется ли основной роутер.
if ping -c4 $MAIN > /dev/null 2>&1; then
# echo "MAIN working"
# Если пингуется, проверяем, является ли он
# сейчас роутером по умолчанию.
if [ $MAIN = $CURRENT ]; then
# Если да, то просто выходим
# echo "MAIN current. Exit"
exit 0
else
# Если нет, то меняем маршрут на основной роуер.
# echo "MAIN not Current, switch yo MAIN"
route del default 2> /dev/null
route add default gw $MAIN
/etc/sysconfig/provider1_firewall.sh
echo "Default chanel switched to Provider1: $MAIN" | mail -s "Internet chanel switched to Provider1" ivc@company.com
logger "Default chanel switched to Provider1: $MAIN"
# echo "Default chanel switched to Provider1: $MAIN"
exit 0
fi
else
# echo "MAIN not working"
# Если MAIN не является маршрутом по умолчанию
# Проверяем, является ли SECOND маршрутом по умолчанию.
if [ $SECOND = $CURRENT ]; then
# Если является, то ничего не далаем.
# echo "Second = Current. Exit"
exit 0
else
# Если не является, то меняем маршрут
# на вспомогательный роутер/
# echo "Second not Current. switch to Second"
route del default 2> /dev/null
route add default gw $SECOND
/etc/sysconfig/provider2_firewall.sh
echo "Default chanel switched to Provider2: $SECOND"| mail -s "Internet chanel switched to Provider2" ivc@company.com
logger "Default chanel switched to Provider2: $SECOND"
# echo "Default route switched to SECOND: $SECOND"
exit 0
fi
fiЗапускаю вручную
cd /etc/sysconfig
./chanel_switch.sh
Все работает отличноПоставил в CRON на запуск каждые 5 мин.
*/5 * * * * /etc/sysconfig/chanel_switch.sh
Запускается, при этом стираются все цепочки iptables, не пингуется не LAN не Инет. Причем это только при запуске из CRON, при ручном все ОК. Где проблема не пойму?
наверно в
/etc/sysconfig/provider1_firewall.sh
/etc/sysconfig/provider2_firewall.sh
Вроде не в них, проверял в ручную. Отключал один канал, другой. При двух включенных. Все корректно работает.Но вот на всякий случай:
#!/bin/bashecho 0 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD
/sbin/iptables -F -t nat/sbin/iptables -P FORWARD DROP
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPTiptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT
iptables -A FORWARD -s 127.0.0.1 -j ACCEPTiptables -A INPUT -i eth1 -p tcp -m multiport --dport 25 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m multiport --dport 25 -j ACCEPTiptables -A INPUT -i eth0 -p tcp -m multiport --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m multiport --dport 110 -j ACCEPTiptables -A INPUT -i eth1 -s 90.94.171.122 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i eth1 -s 90.94.171.122 -p udp --dport 110 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 110 -j DROP
iptables -A INPUT -i eth1 -p udp -m multiport --dport 110 -j DROP#iptables -A INPUT -i eth2 -p icmp -j ACCEPT
#iptables -A INPUT -i eth2 -p icmp -j DROPiptables -A INPUT -i eth0 -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT/sbin/iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.18.19.90
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.13 -d 94.100.177.4 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.13 -d 94.100.184.75 -j ACCEPT###################################################################
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.25 -d 94.100.177.4 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.25 -d 94.100.184.75 -j ACCEPT###################################################################
/sbin/iptables -A FORWARD -i eth1 -s 195.149.70.70 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -s 195.149.70.70 -p udp --sport 500 -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -s 195.149.70.70 -p udp --sport 4500 -j ACCEPT
##########################################
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.101 -d 94.100.177.4 -p tcp --dport 2525 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.101 -d 94.100.184.75 -p tcp --dport 110 -j ACCEPT###########################################
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.36 -j ACCEPT############################################
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.116 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.160 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.102 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.101 -j ACCEPT###################################################################
/sbin/iptables -A FORWARD -s 192.168.0.6 -o eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.0.6 -o eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.0.160 -o eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Enable ping
#/sbin/iptables -A INPUT -i eth2 -p icmp -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.0.220/32 -i eth0 -p udp --dport 53 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -s 192.168.0.220/32 -i eth0 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128
iptables -A INPUT -i eth0 -p udp --dport 37528 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --dport 37528 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT/sbin/iptables -A FORWARD -i eth0 -p icmp -s 192.168.0.7 -d 172.18.19.1 -j ACCEPT
#╨Ф╨╗╤П jabber
#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.18.19.90 --dport 5222 -j DNAT --to-destination 192.168.0.2:5222
#/sbin/iptables -t nat -A PREROUTING -p udp -d 172.18.19.90 --dport 5222 -j DNAT --to-destination 192.168.0.2:5222
#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.18.19.90 --dport 5269 -j DNAT --to-destination 192.168.0.2:5269
#/sbin/iptables -t nat -A PREROUTING -p udp -d 172.18.19.90 --dport 5222 -j DNAT --to-destination 192.168.0.2:5269
#/sbin/iptables -A FORWARD -p tcp -m multiport --dport 5222,5269 -j ACCEPT
#/sbin/iptables -A FORWARD -p udp -m multiport --dport 5222,5269 -j ACCEPT############╨Ф╨╗╤П ╨▓╨╕╨┤╨╡╨╛╨╜╨░╨▒╨╗╤О╨┤╨╡╨╜╨╕╤П#########################
#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.18.19.90 --dport 6036 -j DNAT --to-destination 192.168.0.224:6036
#/sbin/iptables -t nat -A PREROUTING -p udp -d 172.18.19.90 --dport 6036 -j DNAT --to-destination 192.168.0.224:6036
#/sbin/iptables -A FORWARD -p tcp --dport 6036 -j ACCEPT
#/sbin/iptables -A FORWARD -p udp --dport 6036 -j ACCEPT#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.18.19.90 --dport 80 -j DNAT --to-destination 192.168.0.224:80
#/sbin/iptables -t nat -A PREROUTING -p udp -d 172.18.19.90 --dport 80 -j DNAT --to-destination 192.168.0.224:80
#/sbin/iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -p udp --dport 80 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
Второй такой же только eth1 на eth3 изменен и SNAT.
А вот еще забыл, через CRON при рабочем основном канале, он все равно выполняет условие скрипта к-е должно идти, если основной канал поднялся, но роутинг не еще не прописан:# Если нет, то меняем маршрут на основной роутер.
# echo "MAIN not Current, switch yo MAIN"
route del default 2> /dev/null
route add default gw $MAIN
/etc/sysconfig/slavtel_firewall.sh
echo "Default chanel switched to Provider1: $MAIN" | mail -s "Internet chanel switched to Provider1" ivc@company.com.com
logger "Default chanel switched to Provider1: $MAIN"
# echo "Default chanel switched to Provider1: $MAIN"
exit 0При ручном запуске(раз 8 запускал) все нормально, он проверяет что пинги идут на основной и завершает работу ничего не делая.
в нем.
подсказка - у cron и у root значение $PATH разное.
частая ошибка писателей скриптов.
> в нем.
> подсказка - у cron и у root значение $PATH разное.
> частая ошибка писателей скриптов.Спасибо, большое. То же только дошло, пропишу полные пути попробую.