faq обучение настройка
Текущее время: Ср июл 23, 2025 21:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Помогите с BusyBox 1.9.1
СообщениеДобавлено: Вт авг 09, 2011 07:38 
Не в сети

Зарегистрирован: Пт фев 12, 2010 22:07
Сообщений: 11
Откуда: Москва
Есть DSA-3110, прошивка 2.0.8-1, BusyBox 1.9.1.
Хочу хоть как-то использовать эту железяку, пусть в виде простого роутера на два WAN.
Пытаюсь настроить Load Balancing & Failover под Linux, как описано (http://tech.gaeatimes.com/index.php/archive/how-to-load-balancing-failover-with-dual-multi-wan-adsl-cable-connections-on-linux/). Гружу их скрипт (http://www.amperisblog.com/doc/blogspot/20100110/gwping) на DSA-3110 в папочку /tmp/tst, при проверке:
Код:
/tmp/tst # sh -n gwping
gwping: line 91: syntax error: word unexpected (expecting "then")

На компьютере под openSUSE - все в полном порядке, никаких ошибок.
В чем может быть разница с BusyBox? Какие там ограничения?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите с BusyBox 1.9.1
СообщениеДобавлено: Чт авг 11, 2011 08:30 
Не в сети

Зарегистрирован: Пт фев 12, 2010 22:07
Сообщений: 11
Откуда: Москва
После нескольких проб нашел скриптик, котрый работает на BusyBox, слегка подправил его под DSA-3110.
Может, кому-то еще пригодится:
Код:
#!/bin/sh

# Указываем путь у log-файлу
log="/tmp/scr/routing.log"

# Задаем периодичность опроса шлюзов.
# 30s - 30 секунд
# 10m - 10 минут
# 1h - 1 час
check_period="30s"

# Если log-файл не найден, создаем его, иначе отчищаем
clear_log ()
{
if [ ! -f ${log} ]
then
    touch ${log}
else
    cat /dev/null > ${log}
fi
}

init ()
{
    gw1="XXX.XXX.XXX.XXX"
    gw2="YYY.YYY.YYY.YYY"
    prefered_gw=${gw1}

    dev_if1="eth2"
    dev_if2="eth3"

    if1=`ifconfig ${dev_if1} | awk -F ' *|:' '/inet addr/{print $4}'`
    if2=`ifconfig ${dev_if2} | awk -F ' *|:' '/inet addr/{print $4}'`

# Текущие статусы шлюзов: 0 - шлюз недоступен, 1 - шлюз работает
    gw1_curr_status=0
    gw2_curr_status=0

# Текущие потери пакетов на шлюзе
    gw1_curr_packet_loss=0
    gw2_curr_packet_loss=0

# Максимальный процент потерь пакетов, при превышении данного числа, шлюз считается недоступным
    gw1_max_packet_loss=40
    gw2_max_packet_loss=40

# Отчищаем log-файл и сохраняем значения основных переменных
    clear_log
    echo `date +"%T %d.%m.%Y"`." Init environment OK. Check gateways status every ${check_period}." >> ${log}
#    echo `date +"%T %d.%m.%Y"`." ISP1 [if1=${if1}, dev_if1=${dev_if1}, gw1=${gw1}], ISP2 [if2=${if2}, dev_if2=${dev_if2}, gw2=${gw2}]" >> ${log}

# Удаляем все default route
    /sbin/ip route delete default via ${gw1}
    /sbin/ip route delete default via ${gw2}

# Добавляем default route через gw1
    /sbin/ip route replace default via ${gw1} dev ${dev_if1}
}

get_current_status ()
{
#    echo `date +"%T %d.%m.%Y"`." Get current status ISP gateways." >> ${log}

# Get current status default gateway ISP1
    gw1_curr_packet_loss=`ping -I ${dev_if1} -c20 -q ${gw1} | grep loss | awk '{print $(NF-2)}' | cut -d"%" -f1`
    if [ ${gw1_curr_packet_loss} -le ${gw1_max_packet_loss} ]
    then
#        echo `date +"%T %d.%m.%Y"`. "ISP1. [STATUS - OK]. Current packet loss on ${gw1} via ${dev_if1} is ${gw1_curr_packet_loss}%." >> ${log}
        gw1_curr_status=1
    else
#        echo `date +"%T %d.%m.%Y"`. "ISP1. [STATUS - CRITICAL]. Current packet loss on ${gw1} via ${dev_if1} is ${gw1_curr_packet_loss}%." >> ${log}
        gw1_curr_status=0
    fi

# Get current status default gateway ISP2
    gw2_curr_packet_loss=`ping -I ${dev_if2} -c20 -q ${gw2} | grep loss | awk '{print $(NF-2)}' | cut -d"%" -f1`
    if [ ${gw2_curr_packet_loss} -le ${gw2_max_packet_loss} ]
    then
#        echo `date +"%T %d.%m.%Y"`. "ISP2. [STATUS - OK]. Current packet loss on ${gw2} via ${dev_if2} is ${gw2_curr_packet_loss}%." >> ${log}
        gw2_curr_status=1
    else
#        echo `date +"%T %d.%m.%Y"`. "ISP2. [STATUS - CRITICAL]. Current packet loss on ${gw2} via ${dev_if2} is ${gw2_curr_packet_loss}%." >> ${log}
        gw2_curr_status=0
    fi
}

switch_default_gw ()
{
    curr_gw=`ip route show | grep default | awk '{print $3}'`
    if [ ${curr_gw} = ${prefered_gw} -a ${gw1_curr_status} -eq 1 ]
    then
#        echo `date +"%T %d.%m.%Y"`. "[STATUS - OK]. Current default gateway is prefered and running up. Nothing to do." >> ${log}
        return
    fi

    if [ ${curr_gw} = ${prefered_gw} -a ${gw1_curr_status} -eq 0 -a ${gw2_curr_status} -eq 1 ]
    then
        echo `date +"%T %d.%m.%Y"`. "Prefered gw ${gw1} is down. Change default gw to ${gw2}" >> ${log}
        echo `date +"%T %d.%m.%Y"`. "ip route replace default via ${gw2} dev ${dev_if2}" >> ${log}
#Changed gw2 to if2
        /sbin/ip route delete default via ${gw1}
        /sbin/ip route replace default via ${gw2} dev ${dev_if2}
        return
    fi

    if [ ${curr_gw} != ${prefered_gw} -a ${gw1_curr_status} -eq 1 ]
    then
        echo `date +"%T %d.%m.%Y"`. "Prefered gw ${prefered_gw} is running up now. Change default gw ${curr_gw} to prefered ${prefered_gw}" >> ${log}
        echo `date +"%T %d.%m.%Y"`. "ip route replace default via ${gw1} dev ${dev_if1}" >> ${log}
        /sbin/ip route delete default via ${gw2}
        /sbin/ip route replace default via ${gw1} dev ${dev_if1}
        return
    fi

    if [ ${curr_gw} != ${prefered_gw} -a ${gw1_curr_status} -eq 0 -a ${gw2_curr_status} -eq 1 ]
    then
#        echo `date +"%T %d.%m.%Y"`. "Prefered gw ${prefered_gw} is still down. Current default gw is ${gw2}" >> ${log}
        return
    fi

    if [ ${gw1_curr_status} -eq 0 -a ${gw2_curr_status} -eq 0 ]
    then
        echo "*************************************************************************" >> ${log}
        echo `date +"%T %d.%m.%Y"`. "CRITICAL. Two gateways are down. Try again later." >> ${log}
        echo "*************************************************************************" >> ${log}
        return
    fi
}

init

# "Заходим" в вечный цикл, в котором по очереди вызываем функции get_current_status () и switch_default_gw ()
# После этого делаем паузу, время паузы задается в переменной ${check_period}
while [ 1 ]
do
    get_current_status
    switch_default_gw
    sleep ${check_period}
done


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 304


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB