#!/bin/bash # Скрипт для скачивания IPv4-адресов и добавления их в BIRD set -euo pipefail # exit on error, undefined var, fail pipe # Load config SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CONFIG_FILE="$SCRIPT_DIR/config.env" if [[ ! -f "$CONFIG_FILE" ]]; then echo "❌ Ошибка: не найден конфигурационный файл $CONFIG_FILE" exit 1 fi # shellcheck source=config.env source "$CONFIG_FILE" # Validate required variables for var in WORKDIR LIST_DIR MD5_FILE BIRD_DIR; do [[ -z "${!var:-}" ]] && { echo "❌ Переменная $var не установлена в config.env"; exit 1; } done # Create directories if missing mkdir -p "$LIST_DIR" echo "ℹ️ Работаем в $WORKDIR" # Скачиваем списки download_list() { local url="$1" local output="$LIST_DIR/$2" echo "⬇️ Скачивание $2..." wget -N -O "$output" "$url" || { echo "⚠️ Ошибка при скачивании $2"; return 1; } } download_list "$RU_URL" "RU.lst" download_list "$IP_URL" "ip.lst" download_list "$META_URL" "Meta.lst" download_list "$GOOGLE_URL" "Google.lst" download_list "$MICROSOFT_URL" "Microsoft.lst" download_list "$TELEGRAM_URL" "Telegram.lst" download_list "$FACEBOOK_URL" "Facebook.lst" download_list "$YOUTUBE_URL" "Youtube.lst" download_list "$CLOUDFLARE_URL" "Cloudflare.lst" # Считаем md5 от всех .lst-файлов old=$(cat "$MD5_FILE" 2>/dev/null || true) new=$(cat "$LIST_DIR"/*.lst 2>/dev/null | md5sum | cut -c1-32 || true) # Обновляем только если изменились данные if [[ "$old" != "$new" ]]; then echo "✅ MD5 изменился, обновляем конфигурацию BIRD..." # Генерируем конфиги для BIRD gen_bird_route() { local src="$1" local out="$2" local clean="$3" if [[ "$clean" == "true" ]] && [[ -f "$src" ]]; then sed -i '/^#/d' "$src" fi cat "$src" | sed 's_.*_route & reject;_' > "$out" echo "🔧 Сгенерирован $out" } # ru - может содержать комментарии, опционально удаляем gen_bird_route "$LIST_DIR/RU.lst" "$BIRD_DIR/$RU_OUT" "${CLEAN_RU:-true}" gen_bird_route "$LIST_DIR/ip.lst" "$BIRD_DIR/$IP_OUT" "false" gen_bird_route "$LIST_DIR/Meta.lst" "$BIRD_DIR/$META_OUT" "false" gen_bird_route "$LIST_DIR/Google.lst" "$BIRD_DIR/$GOOGLE_OUT" "false" gen_bird_route "$LIST_DIR/Microsoft.lst" "$BIRD_DIR/$MICROSOFT_OUT" "false" gen_bird_route "$LIST_DIR/Telegram.lst" "$BIRD_DIR/$TELEGRAM_OUT" "false" gen_bird_route "$LIST_DIR/Facebook.lst" "$BIRD_DIR/$FACEBOOK_OUT" "false" gen_bird_route "$LIST_DIR/Youtube.lst" "$BIRD_DIR/$YOUTUBE_OUT" "false" gen_bird_route "$LIST_DIR/Cloudflare.lst" "$BIRD_DIR/$CLOUDFLARE_OUT" "false" # Перезагружаем BIRD if /usr/sbin/birdc configure; then logger "BGP list reconfigured" echo "✅ Конфигурация BIRD применена успешно" else echo "❌ Ошибка при применении конфигурации BIRD" exit 1 fi # Сохраняем новый md5 echo "$new" > "$MD5_FILE" echo "💾 Новый MD5 сохранён: $new" else echo "ℹ️ MD5 не изменился, перенастройка BIRD не требуется" fi echo "🎉 Готово."