Главная > Freebsd, Всякое важное > Скрипт переключения на резервный канал интернета

Скрипт переключения на резервный канал интернета

3 827

Возникла необходимость реализовать автоматическое переключения шлюза Freebsd на резервный канал инета (с тарификацией трафика), когда основной (безлимитный) вдруг умирает. Тем самым — обеспечить стабильную связь последством OpenVPN с центральным офисом. Ну..и уведомить админа о переключении, чтобы знал куда стучаться ssh, если что.

# cat /etc/ch.sh

#!/bin/sh
# Основной шлюз
GW1=11.0.0.1
# Резервный шлюз
GW2=10.10.10.10
# IP сетевой карты, смотрящей в сторону основного канала интернета
eth0=11.0.0.2
# IP хоста в интернете, который мы будем проверять
dst1=8.8.8.8
inet=0
# делаем машрут на хост в инете через основной канал интернета
#/sbin/route add -host $dst1 $GW1
inet=$(ping -c 1 -S $eth0 $dst1 | grep "64 bytes from" | awk '{print $2}' )
if [ "$inet" != "bytes" ]; then
if [ -f /etc/ppp/reserv.gw ]; then
echo Already switched to secondary channel 
else
/sbin/route delete default
/sbin/route add default $GW2
#/sbin/route flush
/sbin/route add -host $dst1 $GW1
/usr/local/etc/rc.d/openvpn restart
touch /etc/ppp/reserv.gw
echo "Primary inet DEAD ->  Go to secondary" | mail admin@admin.admin
fi
else
if [ -f /etc/ppp/reserv.gw ]; then
/sbin/route delete default
/sbin/route add default $GW1
/sbin/route del -host $dst1 $GW1
/usr/local/etc/rc.d/openvpn restart
echo "Primary inet restored -> Go to Primary inet" | mail admin@admin.admin
rm /etc/ppp/reserv.gw
fi
fi

ну и ставим задание в cron:

# Route check and change
*       *       *       *       *       root   /etc/ch.sh
  1. Dmitrii
    2 августа 2018 в 20:34 | #1

    Спасибо за скрипт! Подскажите, пожалуйста, в чес может быть проблема, вручную всё отрабатывает, а при добавлении в крон даже в логе крона ничего не появляется. Спасибо.

    «# /etc/crontab — root’s crontab for FreeBSD
    #
    # $FreeBSD: releng/10.1/etc/crontab 194170 2009-06-14 06:37:19Z brian $
    #
    SHELL=/bin/sh
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
    #
    #minute hour mday month wday who command
    #
    */5 * * * * root /usr/libexec/atrun
    #
    # Save some entropy so that /dev/random can re-seed on boot.
    */11 * * * * operator /usr/libexec/save-entropy
    #
    # Rotate log files every hour, if necessary.
    0 * * * * root newsyslog
    #
    # Perform daily/weekly/monthly maintenance.
    1 3 * * * root periodic daily
    15 4 * * 6 root periodic weekly
    30 5 1 * * root periodic monthly
    #
    # Adjust the time zone if the CMOS clock keeps local time, as opposed to
    # UTC time. See adjkerntz(8) for details.
    1,31 0-5 * * * root adjkerntz -a

    # Route check and change
    */1 * * * * root /etc/ch.sh
    «

  2. 23 июня 2014 в 10:41 | #2

    @Antonio
    Да, но вот посмотрите как можно обойти ограничение крона минутой: http://nixtalk.com/cron1sec

  3. 22 июня 2014 в 18:07 | #3

    Полезно, жаль в самой системе никак не догадаются сделать какого-нибудь штатного демона, так как мучать крон не очень, да и 1 минута многовато, хочется быстрее

  1. Пока что нет уведомлений.

.