Advertisement
skybetik

Checking tunnel status Openvpn client with bridge

Jan 13th, 2025
34
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | Fixit | 0 0
  1. #!/bin/sh
  2.  
  3. # Конфігурація
  4. IP_TO_PING="172.31.0.1"
  5. # Додаткові IP для перевірки (розкоментуйте за необхідності)
  6. # IP_TO_PING_2="192.168.0.2"
  7. # IP_TO_PING_3="192.168.0.3"
  8. # IP_TO_PING_4="192.168.0.4"
  9. BRIDGE="bridge0"
  10. TAP="tap0"
  11. OPENVPN_SERVICE="/usr/local/etc/rc.d/openvpn"
  12. LOG_FILE="/var/log/openvpn_monitor.log"
  13.  
  14. # Функція логування з додаванням часу
  15. log_with_time() {
  16. echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a $LOG_FILE
  17. }
  18.  
  19. # Функція відновлення з'єднання
  20. restore_connection() {
  21. log_with_time "[INFO] Виконується відновлення..."
  22.  
  23. # Видалення інтерфейсу tap0 з bridge0
  24. log_with_time "[INFO] Видаляємо $TAP з $BRIDGE..."
  25. if ifconfig $BRIDGE deletem $TAP 2>/dev/null; then
  26. log_with_time "[INFO] $TAP успішно видалено з $BRIDGE."
  27. else
  28. log_with_time "[WARNING] $TAP відсутній у $BRIDGE або вже видалений."
  29. fi
  30.  
  31. # Перезапуск OpenVPN
  32. log_with_time "[INFO] Перезапуск OpenVPN..."
  33. $OPENVPN_SERVICE restart
  34.  
  35. # Додавання інтерфейсу tap0 назад до bridge0
  36. log_with_time "[INFO] Додаємо $TAP назад до $BRIDGE..."
  37. retry=0
  38. while ! ifconfig $BRIDGE addm $TAP 2>/dev/null; do
  39. retry=$((retry + 1))
  40. log_with_time "[ERROR] Не вдалося додати $TAP до $BRIDGE. Спроба $retry..."
  41. if [ $retry -ge 3 ]; then
  42. log_with_time "[CRITICAL] Перевищено кількість спроб додавання $TAP до $BRIDGE."
  43. break
  44. fi
  45. sleep 2
  46. done
  47.  
  48. if ifconfig $BRIDGE | grep -q $TAP; then
  49. log_with_time "[INFO] $TAP успішно доданий до $BRIDGE."
  50. fi
  51. }
  52.  
  53. # Функція перевірки доступності IP
  54. check_ping() {
  55. local ip=$1
  56. if ! ping -c 1 -t 2 $ip > /dev/null 2>&1; then
  57. log_with_time "[ERROR] Немає відповіді від $ip."
  58. restore_connection
  59.  
  60. # Повторна перевірка після відновлення
  61. if ! ping -c 1 -t 2 $ip > /dev/null 2>&1; then
  62. log_with_time "[ERROR] Після відновлення $ip все ще недоступний. Повторюємо відновлення..."
  63. restore_connection
  64. fi
  65. fi
  66. }
  67.  
  68. # Основна логіка перевірки IP
  69. check_ping $IP_TO_PING
  70.  
  71. # Закоментовані перевірки додаткових IP
  72. # Розкоментуйте за необхідності для перевірки додаткових IP
  73. # check_ping $IP_TO_PING_2
  74. # check_ping $IP_TO_PING_3
  75. # check_ping $IP_TO_PING_4
  76.  
  77. exit 0
  78.  
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement