2011/4/13 Alexander Bolshakov <[email protected]>:
> Доброе время суток!
>
> Я понимаю, что вопрос несколько другой тематики, но т.к. реализация на
> топике, то рискну спросить здесь. :)
> Итак, есть ящик под фрёй-8.2, в него приходят два линка от одного провайдера
> (мир+UA-X) и третий - от второго. Наш мир не идеален, потому каналы
> непериодически падают. Задача в том, чтоб следить за состоянием каналов и
> менять маршрутизацию в зависимости от ситуации. Как дополнительный бонус -
> хочется(нужно) использовать канал второго провайдера при заполнении того или
> другого канала первого. Карты - em, воткнуты в медиаконверторы. Если что-то
> мрёт (а в последнее время что-то участилось), то чаще всего - канал оптики
> или за ней, т.е., физически для ящика канал всегда жив. Как и чем такое
> можно реализовать? Каковы рекомендации опытных собаководов? Вариант через
> cron слишком инертен. :(

Если хочеться без динамического роутинга (хотя с ним правильней)

конфиг на базе ifstated
Проверяется живость непосредственно next-hop  и сервера с хорошим
аптаймом в дельта окресности.
Имена провадеров вымышленные, совпадения случайны.

# $OpenBSD: ifstated.conf,v 1.6 2005/02/07 06:08:10 david Exp $
# $Id: ifstated.conf,v 1.3 2005/05/05 16:06:08 mdg Exp $

# Set the initial state
init-state auto

# MACROS varset
#
#   if_test   = string ".link." ( "up" | "down" | "unknown" )
#   ext_test  = string "every" number

pri_link_up = '( "ping -q -c 3 -n -t 4 -S 10.34.2.5  zzz.zzz.40.193"
every 180 || "ping -q -c 2 -n -t 4 -S 10.34.2.5  xxx.xxx.64.7" every
180 )'
sec_link_up = '( "ping -q -c 2 -n -t 4 -S xxx.xxx.50.250
xxx.xxx.50.249" every 180 && "ping -q -c 2 -n -t 4 -S xxx.xxx.50.250
xxx.xxx.64.7" every 180 )'


# STATE DEFINITIONS

state auto{
        if ( $pri_link_up ) set-state primary
        if ( $sec_link_up ) set-state backup
}

# Freenet link
state primary {
        init {
            run "logger -t ifstated Using Freenet "
            run "route change default 10.34.2.1"
        }

        if (! $pri_link_up && $sec_link_up)
                set-state backup

}

# GT
state backup {
        init {
            run "logger -t ifstated Using GoldenTelecom "
            run "route change default  xxx.xxx.xx.249"
            run "sleep 10"
        }

        if $pri_link_up
                set-state primary

        if ! $sec_link_up
                set-state auto

}


-- 
Best regards,
Andriy Yakovlev (AYA-RIPE)

Ответить