Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Конфігурація
- IP_TO_PING_1="172.31.0.2"
- BRIDGE="bridge0"
- TAP="tap0"
- OPENVPN_SERVICE="/usr/local/etc/rc.d/openvpn"
- LOG_FILE="/var/log/openvpn_monitor.log"
- MONITOR_LOG="/var/log/openvpn_monitor_status.log" # Лог, де будуть записуватися недоступні IP
- # Конфігурація Telegram-бота
- TELEGRAM_BOT_TOKEN="-------"
- TELEGRAM_CHAT_IDS="--------" # Перелічіть через пробіл
- # Функція логування з додаванням часу
- log_with_time() {
- echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a $LOG_FILE
- }
- # Функція відправки повідомлення в Telegram
- send_telegram_message() {
- local message=$1
- for chat_id in $TELEGRAM_CHAT_IDS; do
- curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
- -d chat_id="$chat_id" \
- -d text="$message" > /dev/null
- done
- }
- # Функція відновлення з'єднання
- restore_connection() {
- log_with_time "[INFO] Виконується відновлення..."
- # Видалення інтерфейсу 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..."
- service openvpn restart
- # Додавання інтерфейсу 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."
- else
- log_with_time "[ERROR] Не вдалося додати $TAP до $BRIDGE."
- fi
- }
- # Функція запису недоступних IP у лог
- log_ip_down() {
- local ip=$1
- if ! grep -q "$ip" $MONITOR_LOG; then
- echo "$ip" >> $MONITOR_LOG
- fi
- }
- # Функція видалення запису про доступний IP із лога
- remove_ip_from_log() {
- local ip=$1
- # Використовуємо sed із прапором -i для редагування файлу на місці і видаляємо рядок
- sed -i '' "/$ip/d" $MONITOR_LOG
- }
- # Функція перевірки доступності IP
- check_ping() {
- local ip=$1
- local current_status="up"
- # Перевірка доступності IP
- if ! ping -c 1 -t 2 $ip > /dev/null 2>&1; then
- current_status="down"
- fi
- # Якщо IP недоступний і ще не записаний у лог
- if [ "$current_status" = "down" ]; then
- if ! grep -q "$ip" $MONITOR_LOG; then
- log_ip_down $ip
- log_with_time "[ERROR] Немає відповіді від $ip."
- send_telegram_message "⚠️ IP $ip недоступний!"
- restore_connection
- fi
- # Якщо IP доступний і записаний у лог, видаляємо його
- elif [ "$current_status" = "up" ]; then
- if grep -q "$ip" $MONITOR_LOG; then
- remove_ip_from_log $ip
- log_with_time "[INFO] $ip доступний знову."
- send_telegram_message "✅ IP $ip знову доступний."
- fi
- fi
- }
- # Функція перевірки IP, які були недоступні, при запуску скрипта
- check_ips_from_log() {
- if [ -f $MONITOR_LOG ]; then
- for ip in $(cat $MONITOR_LOG); do
- log_with_time "[INFO] Перевірка IP із лога: $ip"
- # Перевірка доступності IP
- check_ping $ip
- done
- fi
- }
- # Перевірка існування файлу лога /var/log/openvpn_monitor_status.log
- check_log_file() {
- if [ ! -f $MONITOR_LOG ]; then
- log_with_time "[INFO] Лог-файл $MONITOR_LOG не існує. Створюємо його..."
- touch $MONITOR_LOG
- chmod 666 $MONITOR_LOG
- log_with_time "[INFO] Лог-файл $MONITOR_LOG було успішно створено з правами на запис."
- fi
- }
- # Перевірка і створення файлу лога, якщо він не існує
- check_log_file
- # Перевірка IP-адрес
- check_ping $IP_TO_PING_1
- # Перевіряємо IP-адреси із лога
- check_ips_from_log
- # Uncomment для перевірки додаткових IP
- # check_ping $IP_TO_PING_2
- # check_ping $IP_TO_PING_3
- # check_ping $IP_TO_PING_4
- exit 0
Advertisement
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
Advertisement