URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93713
[ Назад ]

Исходное сообщение
"Переключение каналов и cron"

Отправлено feofs , 22-Авг-12 11:23 
Добрый день.
Имеется Centos 6.2, два провайдера. Качнул скрипт на переключение каналов при падении одного сhanel_switch.sh вот собственно он:
#! /bin/bash

MAIN=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, при ручном все ОК. Где проблема не пойму?


Содержание

Сообщения в этом обсуждении
"Переключение каналов и cron"
Отправлено reader , 22-Авг-12 11:47 
наверно в
/etc/sysconfig/provider1_firewall.sh
/etc/sysconfig/provider2_firewall.sh

"Переключение каналов и cron"
Отправлено feofs , 22-Авг-12 12:22 
Вроде не в них, проверял в ручную. Отключал один канал, другой. При двух включенных. Все корректно работает.

Но вот на всякий случай:
#!/bin/bash

echo 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 ACCEPT

iptables -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 ACCEPT

iptables -A INPUT -i eth1 -p tcp -m multiport --dport 25 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m multiport --dport 25 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp -m multiport --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m multiport --dport 110 -j ACCEPT

iptables -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 DROP

iptables -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"
Отправлено reader , 22-Авг-12 12:41 
в нем.
подсказка - у cron  и  у root значение $PATH разное.
частая ошибка писателей скриптов.

"Переключение каналов и cron"
Отправлено feofs , 22-Авг-12 12:53 
> в нем.
> подсказка - у cron  и  у root значение $PATH разное.
> частая ошибка писателей скриптов.

Спасибо, большое. То же только дошло, пропишу полные пути попробую.