Advertisement
skybetik

Checking Openvpn-server tunnel status with bridge

Jan 13th, 2025 (edited)
42
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | Fixit | 0 0
  1. #!/bin/sh
  2.  
  3. # Конфігурація
  4. IP_TO_PING_1="172.31.0.2"
  5. BRIDGE="bridge0"
  6. TAP="tap0"
  7. OPENVPN_SERVICE="/usr/local/etc/rc.d/openvpn"
  8. LOG_FILE="/var/log/openvpn_monitor.log"
  9. MONITOR_LOG="/var/log/openvpn_monitor_status.log" # Лог, де будуть записуватися недоступні IP
  10.  
  11. # Конфігурація Telegram-бота
  12. TELEGRAM_BOT_TOKEN="-------"
  13. TELEGRAM_CHAT_IDS="--------" # Перелічіть через пробіл
  14.  
  15. # Функція логування з додаванням часу
  16. log_with_time() {
  17. echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a $LOG_FILE
  18. }
  19.  
  20. # Функція відправки повідомлення в Telegram
  21. send_telegram_message() {
  22. local message=$1
  23. for chat_id in $TELEGRAM_CHAT_IDS; do
  24. curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
  25. -d chat_id="$chat_id" \
  26. -d text="$message" > /dev/null
  27. done
  28. }
  29.  
  30. # Функція відновлення з'єднання
  31. restore_connection() {
  32. log_with_time "[INFO] Виконується відновлення..."
  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. service openvpn restart
  45.  
  46. # Додавання інтерфейсу tap0 назад у bridge0
  47. log_with_time "[INFO] Додаємо $TAP назад у $BRIDGE..."
  48. retry=0
  49. while ! ifconfig $BRIDGE addm $TAP 2>/dev/null; do
  50. retry=$((retry + 1))
  51. log_with_time "[ERROR] Не вдалося додати $TAP до $BRIDGE. Спроба $retry..."
  52. if [ $retry -ge 3 ]; then
  53. log_with_time "[CRITICAL] Перевищено кількість спроб додавання $TAP до $BRIDGE."
  54. break
  55. fi
  56. sleep 2
  57. done
  58.  
  59. if ifconfig $BRIDGE | grep -q $TAP; then
  60. log_with_time "[INFO] $TAP успішно додано до $BRIDGE."
  61. else
  62. log_with_time "[ERROR] Не вдалося додати $TAP до $BRIDGE."
  63. fi
  64. }
  65.  
  66. # Функція запису недоступних IP у лог
  67. log_ip_down() {
  68. local ip=$1
  69. if ! grep -q "$ip" $MONITOR_LOG; then
  70. echo "$ip" >> $MONITOR_LOG
  71. fi
  72. }
  73.  
  74. # Функція видалення запису про доступний IP із лога
  75. remove_ip_from_log() {
  76. local ip=$1
  77. # Використовуємо sed із прапором -i для редагування файлу на місці і видаляємо рядок
  78. sed -i '' "/$ip/d" $MONITOR_LOG
  79. }
  80.  
  81. # Функція перевірки доступності IP
  82. check_ping() {
  83. local ip=$1
  84. local current_status="up"
  85.  
  86. # Перевірка доступності IP
  87. if ! ping -c 1 -t 2 $ip > /dev/null 2>&1; then
  88. current_status="down"
  89. fi
  90.  
  91. # Якщо IP недоступний і ще не записаний у лог
  92. if [ "$current_status" = "down" ]; then
  93. if ! grep -q "$ip" $MONITOR_LOG; then
  94. log_ip_down $ip
  95. log_with_time "[ERROR] Немає відповіді від $ip."
  96. send_telegram_message "⚠️ IP $ip недоступний!"
  97. restore_connection
  98. fi
  99. # Якщо IP доступний і записаний у лог, видаляємо його
  100. elif [ "$current_status" = "up" ]; then
  101. if grep -q "$ip" $MONITOR_LOG; then
  102. remove_ip_from_log $ip
  103. log_with_time "[INFO] $ip доступний знову."
  104. send_telegram_message "✅ IP $ip знову доступний."
  105. fi
  106. fi
  107. }
  108.  
  109. # Функція перевірки IP, які були недоступні, при запуску скрипта
  110. check_ips_from_log() {
  111. if [ -f $MONITOR_LOG ]; then
  112. for ip in $(cat $MONITOR_LOG); do
  113. log_with_time "[INFO] Перевірка IP із лога: $ip"
  114. # Перевірка доступності IP
  115. check_ping $ip
  116. done
  117. fi
  118. }
  119.  
  120. # Перевірка існування файлу лога /var/log/openvpn_monitor_status.log
  121. check_log_file() {
  122. if [ ! -f $MONITOR_LOG ]; then
  123. log_with_time "[INFO] Лог-файл $MONITOR_LOG не існує. Створюємо його..."
  124. touch $MONITOR_LOG
  125. chmod 666 $MONITOR_LOG
  126. log_with_time "[INFO] Лог-файл $MONITOR_LOG було успішно створено з правами на запис."
  127. fi
  128. }
  129.  
  130. # Перевірка і створення файлу лога, якщо він не існує
  131. check_log_file
  132.  
  133. # Перевірка IP-адрес
  134. check_ping $IP_TO_PING_1
  135. # Перевіряємо IP-адреси із лога
  136. check_ips_from_log
  137.  
  138. # Uncomment для перевірки додаткових IP
  139. # check_ping $IP_TO_PING_2
  140. # check_ping $IP_TO_PING_3
  141. # check_ping $IP_TO_PING_4
  142.  
  143. exit 0
  144.  
Advertisement
Comments
  • skybetik
    156 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
Advertisement