Изменение интернет-канала при ошибке

Ситуация:

  • 2 интернет-соединения – A и B – оба подключены к маршрутизатору linux.
  • 2 таблицы маршрутизации, один по умолчанию через A, второй по умолчанию через B.
  • iptables и ip rule выбирают «лучшую» таблицу для определенного трафика.

Все работает нормально, но – это статическая конфигурация.

Что делать – если одна из интернет-ссылок терпит неудачу? В этом сценарии все должно пройти через вторую, правильную ссылку. И – когда неудавшаяся ссылка вверх – все должно вернуться к ситуации, когда трафик проходит по обеим ссылкам.

Существуют ли какие-либо «стандартные» инструменты для подобных действий? это не проблема, чтобы написать что-то (скрипт), что делать такие вещи, но – может быть, есть больше стандартных инструментов?

(определение неудачной ссылки – один из важных ip недоступен для конкретной ссылки, но доступен из второй ссылки).

One Solution collect form web for “Изменение интернет-канала при ошибке”

Мои маршрутизаторы с несколькими WAN-серверами Draytek могут использовать либо ping, либо arp для мониторинга keep-alive через ethernet и VPN-соединения. (Очевидно, что для xDSL есть лучшие альтернативы.) Ssh и OpenVPN можно настроить для создания внутренних keepalives. Я не знаю другого стандартного подхода.

Что-то вроде этого (непроверено):

 ROUTE1=up LINK1=up COUNT1=3 ROUTE2=up LINK2=up COUNT2=3 SHOUT=once while sleep 5 do if ping {destination_via1} then LINK1_UP=up COUNT1=3 else [[ 0 -lt $COUNT1 ]] && COUNT1=$((COUNT1 - 1)) [[ 0 -ge $COUNT1 ]] && LINK1=down fi if ping {destination_via2} then LINK2_UP=up COUNT2=3 else [[ 0 -lt $COUNT2 ]] && COUNT2=$((COUNT2 - 1)) [[ 0 -ge $COUNT2 ]] && LINK2=down fi if [[ down = $LINK1 -a up = $ROUTE1 ]] then # add code here to remove route via LINK1 # ROUTE1=down elif [[ up = $LINK1 -a down = $ROUTE1 ]] # add code here to add route via LINK1 # ROUTE1=up SHOUT=once fi if [[ down = $LINK2 -a up = $ROUTE2 ]] then # add code here to remove route via LINK2 # ROUTE2=down elif [[ up = $LINK2 -a down = $ROUTE2 ]] # add code here to add route via LINK2 # ROUTE2=up SHOUT=once fi if [[ once = $SHOUT -a down = $ROUTE1 -a down = $ROUTE2 ]] then # add code here to shout that both routes are down # SHOUT=no fi done 
Linux и Unix - лучшая ОС в мире.