skybetik

Checking Openvpn-server tunnel status with bridge

Jan 13th, 2025 (edited)
73
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | Fixit | 0 0
  1. #!/bin/sh
  2.  
  3. # Конфигурация
  4. IP_TO_PING="172.31.0.1"
  5. BRIDGE="bridge0"
  6. TAP="tap0"
  7. OPENVPN_SERVICE="/usr/local/etc/rc.d/openvpn"
  8. LOG_FILE="/var/log/openvpn_monitor.log"
  9. LOCK_FILE="/tmp/openvpn_monitor.lock"
  10. MAX_ATTEMPTS=3 # Максимум попыток восстановления
  11.  
  12. # Получение текущей даты и времени
  13. log_with_time() {
  14. echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a $LOG_FILE
  15. }
  16.  
  17. # Проверка на существующий запуск
  18. if [ -f "$LOCK_FILE" ]; then
  19. log_with_time "[ERROR] Скрипт уже выполняется (lock-файл $LOCK_FILE существует). Выход."
  20. exit 1
  21. fi
  22.  
  23. # Создание lock-файла
  24. touch "$LOCK_FILE"
  25. trap 'rm -f "$LOCK_FILE"; exit' INT TERM EXIT # Удаляем lock при выходе
  26.  
  27. # Проверка пинга
  28. attempt=0
  29. while [ $attempt -lt $MAX_ATTEMPTS ]; do
  30. if ! ping -c 1 -t 2 $IP_TO_PING > /dev/null 2>&1; then
  31. attempt=$((attempt + 1))
  32. log_with_time "[ERROR] Нет ответа от $IP_TO_PING. Попытка восстановления $attempt/$MAX_ATTEMPTS..."
  33.  
  34. # Удаление интерфейса tap0 из bridge0
  35. log_with_time "[INFO] Удаляем $TAP из $BRIDGE..."
  36. if ifconfig $BRIDGE deletem $TAP 2>/dev/null; then
  37. log_with_time "[INFO] $TAP успешно удалён из $BRIDGE."
  38. else
  39. log_with_time "[WARNING] $TAP отсутствует в $BRIDGE или уже удалён."
  40. fi
  41.  
  42. # Остановка OpenVPN и принудительное убийство процессов
  43. log_with_time "[INFO] Останавливаем OpenVPN..."
  44. $OPENVPN_SERVICE stop
  45. sleep 2
  46. if pgrep openvpn > /dev/null; then
  47. log_with_time "[INFO] Принудительно убиваем оставшиеся процессы OpenVPN..."
  48. killall -9 openvpn 2>/dev/null
  49. fi
  50.  
  51. # Запуск OpenVPN
  52. log_with_time "[INFO] Запускаем OpenVPN..."
  53. $OPENVPN_SERVICE start
  54.  
  55. # Добавление интерфейса tap0 обратно в bridge0
  56. log_with_time "[INFO] Добавляем $TAP обратно в $BRIDGE..."
  57. retry=0
  58. while ! ifconfig $BRIDGE addm $TAP 2>/dev/null; do
  59. retry=$((retry + 1))
  60. log_with_time "[ERROR] Не удалось добавить $TAP в $BRIDGE. Попытка $retry..."
  61. if [ $retry -ge 3 ]; then
  62. log_with_time "[CRITICAL] Превышено количество попыток добавления $TAP в $BRIDGE."
  63. break
  64. fi
  65. sleep 2
  66. done
  67.  
  68. if ifconfig $BRIDGE | grep -q $TAP; then
  69. log_with_time "[INFO] $TAP успешно добавлен в $BRIDGE."
  70. fi
  71.  
  72. # Задержка для установки соединения
  73. log_with_time "[INFO] Ожидаем 10 секунд для установки VPN..."
  74. sleep 10
  75.  
  76. else
  77. log_with_time "[INFO] $IP_TO_PING доступен. Никаких действий не требуется."
  78. rm -f "$LOCK_FILE" # Удаляем lock перед выходом
  79. exit 0
  80. fi
  81. done
  82.  
  83. log_with_time "[CRITICAL] Превышено максимальное количество попыток ($MAX_ATTEMPTS). Выходим с ошибкой."
  84. rm -f "$LOCK_FILE" # Удаляем lock при выходе
  85. exit 1
  86.  
Comments
  • skybetik
    301 days
    # text 0.17 KB | 0 0
    1. /sbin/ifconfig bridge create
    2. # sleep for 5 seconds
    3. sleep 10
    4. /sbin/ifconfig bridge0 addm tap0
    5. sleep 5
    6. /sbin/ifconfig bridge0 inet 172.31.0.1/24
    7.  
    8. @reboot /bin/bridge.sh
Add Comment
Please, Sign In to add comment