Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Конфигурация
- IP_TO_PING="172.31.0.1"
- BRIDGE="bridge0"
- TAP="tap0"
- OPENVPN_SERVICE="/usr/local/etc/rc.d/openvpn"
- LOG_FILE="/var/log/openvpn_monitor.log"
- LOCK_FILE="/tmp/openvpn_monitor.lock"
- MAX_ATTEMPTS=3 # Максимум попыток восстановления
- # Получение текущей даты и времени
- log_with_time() {
- echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a $LOG_FILE
- }
- # Проверка на существующий запуск
- if [ -f "$LOCK_FILE" ]; then
- log_with_time "[ERROR] Скрипт уже выполняется (lock-файл $LOCK_FILE существует). Выход."
- exit 1
- fi
- # Создание lock-файла
- touch "$LOCK_FILE"
- trap 'rm -f "$LOCK_FILE"; exit' INT TERM EXIT # Удаляем lock при выходе
- # Проверка пинга
- attempt=0
- while [ $attempt -lt $MAX_ATTEMPTS ]; do
- if ! ping -c 1 -t 2 $IP_TO_PING > /dev/null 2>&1; then
- attempt=$((attempt + 1))
- log_with_time "[ERROR] Нет ответа от $IP_TO_PING. Попытка восстановления $attempt/$MAX_ATTEMPTS..."
- # Удаление интерфейса tap0 из bridge0
- log_with_time "[INFO] Удаляем $TAP из $BRIDGE..."
- if ifconfig $BRIDGE deletem $TAP 2>/dev/null; then
- log_with_time "[INFO] $TAP успешно удалён из $BRIDGE."
- else
- log_with_time "[WARNING] $TAP отсутствует в $BRIDGE или уже удалён."
- fi
- # Остановка OpenVPN и принудительное убийство процессов
- log_with_time "[INFO] Останавливаем OpenVPN..."
- $OPENVPN_SERVICE stop
- sleep 2
- if pgrep openvpn > /dev/null; then
- log_with_time "[INFO] Принудительно убиваем оставшиеся процессы OpenVPN..."
- killall -9 openvpn 2>/dev/null
- fi
- # Запуск OpenVPN
- log_with_time "[INFO] Запускаем OpenVPN..."
- $OPENVPN_SERVICE start
- # Добавление интерфейса tap0 обратно в bridge0
- log_with_time "[INFO] Добавляем $TAP обратно в $BRIDGE..."
- retry=0
- while ! ifconfig $BRIDGE addm $TAP 2>/dev/null; do
- retry=$((retry + 1))
- log_with_time "[ERROR] Не удалось добавить $TAP в $BRIDGE. Попытка $retry..."
- if [ $retry -ge 3 ]; then
- log_with_time "[CRITICAL] Превышено количество попыток добавления $TAP в $BRIDGE."
- break
- fi
- sleep 2
- done
- if ifconfig $BRIDGE | grep -q $TAP; then
- log_with_time "[INFO] $TAP успешно добавлен в $BRIDGE."
- fi
- # Задержка для установки соединения
- log_with_time "[INFO] Ожидаем 10 секунд для установки VPN..."
- sleep 10
- else
- log_with_time "[INFO] $IP_TO_PING доступен. Никаких действий не требуется."
- rm -f "$LOCK_FILE" # Удаляем lock перед выходом
- exit 0
- fi
- done
- log_with_time "[CRITICAL] Превышено максимальное количество попыток ($MAX_ATTEMPTS). Выходим с ошибкой."
- rm -f "$LOCK_FILE" # Удаляем lock при выходе
- exit 1
Comments
-
- /sbin/ifconfig bridge create
- # sleep for 5 seconds
- sleep 10
- /sbin/ifconfig bridge0 addm tap0
- sleep 5
- /sbin/ifconfig bridge0 inet 172.31.0.1/24
- @reboot /bin/bridge.sh
Add Comment
Please, Sign In to add comment