get-ip-prefix/get-ip.sh
2026-07-21 07:13:51 +00:00

98 lines
3.6 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"
download_list "$AWS_URL" "AWS.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"
gen_bird_route "$LIST_DIR/AWS.lst" "$BIRD_DIR/$AWS_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 "🎉 Готово."