91 lines
3.2 KiB
Bash
Executable file
91 lines
3.2 KiB
Bash
Executable file
#!/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"
|
||
|
||
# Считаем 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"
|
||
|
||
# Перезагружаем 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 "🎉 Готово."
|