thumb

Для отримання адреси IPv6 на одному з серверів я користуюся послугами тунельного брокера gogo6.com. Для підключення до брокеру використовується програма gogoc (gogo client), яка піднімає віртуальний інтерфейс tun для створення тунелю. Але, час від часу, цей інтерфейс падає, що робить сервер більш недоступним по IPv6 адресу.

Причину падіння інтерфейсу я визначив але вирішив, що оптимальним рішенням буде перезапускати інтерфейс в разі падіння. Для цього я написав сценарій на “Shell” перевіряючий потрібний інтерфейс на існування, а в разі відсутності перезапускає програму gogoc. І ще необхідна запис в cron для запуску цього сценарію за розкладом.

Код написаний під перезапуск gogoc але може бути легко перероблений під інші потреби.

  • Name: IfDownTun.sh
  • Description: Check and start interface tun if it down
  • Language: Shell
#!/bin/sh
#=============================================================#
# Name:         IfDownTun                                     #
# Description:  Check and start iinterface tun if it down     #
# Author:       Arthur Gareginyan                             #
# Author URI:   https://www.arthurgareginyan.com              #
# License:      GNU General Public License, version 3 (GPLv3) #
# License URI:  http://www.gnu.org/licenses/gpl-3.0.html      #
#=============================================================#

#                   USAGE:
#      chmod +x ./IfDownTun.sh
#      sudo ./IfDownTun.sh


# The interface to test
DEVICE='tun'
#TEST_IFACE=`/sbin/ip link show dev $DEVICE >/dev/null 2>/dev/null`

# Check the availability of an interfac
/sbin/ip link show dev $DEVICE >/dev/null 2>/dev/null

# Raising of the interface tun if not raised
if [ "$?" = "1" ] ; then
        if [ ! -f /tmp/iface_tun.error ] ; then
        	echo "$(date '+%F(%H:%M)') iface tun DOWN" >> /var/log/iface_tun.log
        	touch /tmp/iface_tun.error
        fi
        killall gogoc ;
        service gogoc start ;
        sleep 10

        # Again checking and recording info in /var/log/iface_tun.log when success
        /sbin/ip link show dev $DEVICE >/dev/null 2>/dev/null
        if [ "$?" = "0" ] ; then
                echo "$(date '+%F(%H:%M)') iface tun UP" >> /var/log/iface_tun.log
                rm /tmp/iface_tun.error
                exit 0
        fi
fi

exit 0

Необхідно дати права на виконання:

chmod +x IfDownTun.sh

І зробити запис в cron для автоматичного запуску скрипта за розкладом:

sudo nano /etc/crontab
# Test if iface tun is down
*/3 *   * * *   root    /home/IfDownTun.sh

Сценарій також пише логи в /var/log/iface_tun.log. В такому форматі:

2014-03-18(02:51) iface tun DOWN
2014-03-19(16:45) iface tun UP
2014-03-19(16:48) iface tun DOWN
2014-03-20(16:21) iface tun UP
2014-03-20(22:57) iface tun DOWN
2014-03-20(22:57) iface tun UP
2014-03-21(14:51) iface tun DOWN
2014-03-21(14:51) iface tun UP

Fork on Github