This commit is contained in:
a.kazantsev 2026-07-01 17:11:00 +03:00
parent 22f6291fd2
commit f35aa6987e
3 changed files with 157 additions and 37 deletions

View file

@ -1,2 +1,36 @@
# get-ip-prefix
Скрипт для скачивания списков IPv4-адресов и генерации конфигурации BIRD.
## Установка
1. Скопируйте `config.env.example` в `config.env` и настройте параметры:
- URL-адреса списков
- Директории для хранения файлов
- Имена выходных файлов
2. Установите зависимости:
- `bash`
- `wget`
- `md5sum`
- `bird` (для перезагрузки конфигурации)
## Использование
```bash
./get-ip.sh
```
Скрипт автоматически:
- Скачивает списки IP-адресов
- Проверяет изменение данных через MD5-хеш
- Генерирует конфигурацию BIRD
- Перезагружает службу BIRD
## Настройка cron
Добавьте в crontab для автоматического обновления:
```cron
0 */6 * * * /path/to/get-ip.sh >> /var/log/get-ip.log 2>&1
```

34
config.env.example Normal file
View file

@ -0,0 +1,34 @@
#!/bin/bash
# Рабочая директория
WORKDIR="/var/lib/bird"
# Директория для хранения скачанных списков
LIST_DIR="$WORKDIR/lists"
# Файл для хранения MD5 хеша
MD5_FILE="$WORKDIR/md5sum.txt"
# Директория для конфигурации BIRD
BIRD_DIR="/etc/bird/conf.d"
# Имена выходных файлов для BIRD
RU_OUT="ru_routes.conf"
IP_OUT="ip_routes.conf"
META_OUT="meta_routes.conf"
GOOGLE_OUT="google_routes.conf"
MICROSOFT_OUT="microsoft_routes.conf"
TELEGRAM_OUT="telegram_routes.conf"
FACEBOOK_OUT="facebook_routes.conf"
# URL для скачивания списков (примерные URL, укажите <20><>вои)
RU_URL="https://example.com/ru.lst"
IP_URL="https://example.com/ip.lst"
META_URL="https://example.com/meta.lst"
GOOGLE_URL="https://example.com/google.lst"
MICROSOFT_URL="https://example.com/microsoft.lst"
TELEGRAM_URL="https://example.com/telegram.lst"
FACEBOOK_URL="https://example.com/facebook.lst"
# Удалять комментарии из RU.lst перед генерацией конфига (true/false)
CLEAN_RU="true"

126
get-ip.sh
View file

@ -1,41 +1,93 @@
#!/bin/bash
# Скрипт для скачивания IPv4 адресов и добавления их в bird
# Скрипт для скачивания IPv4-адресов и добавления их в BIRD
# Основан на https://habr.com/ru/articles/359268/
# Доработал AlexandrLinux (собака) bafista.ru
# Основной список адресов взят тут: https://github.com/lord-alfred/ipranges/tree/main?tab=readme-ov-file
workdir=/opt/get-ip
cd $workdir/list
wget -N -O RU.lst https://github.com/ipverse/rir-ip/raw/refs/heads/master/country/ru/ipv4-aggregated.txt
#wget -N https://antifilter.download/list/ipsum.lst
#wget -N https://antifilter.download/list/subnet.lst
wget -N -O ip.lst https://antifilter.network/download/ip.lst
wget -N -O Meta.lst https://raw.githubusercontent.com/SecOps-Institute/FacebookIPLists/master/facebook_ip_list.lst
wget -N -O Google.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/google/ipv4.txt
wget -N -O Microsoft.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/microsoft/ipv4.txt
wget -N -O Telegram.lst https://github.com/lord-alfred/ipranges/raw/refs/heads/main/telegram/ipv4.txt
wget -N -O Facebook.lst https://github.com/lord-alfred/ipranges/raw/refs/heads/main/facebook/ipv4.txt
old=$(cat $workdir/md5.txt);
new=$(cat $workdir/list/*.lst | md5sum | head -c 32);
if [ "$old" != "$new" ]
then
echo "md5 chandge"
#cat $workdir/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
#cat $workdir/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
echo "Configure bird start"
sed -i '/^#/d' $workdir/list/RU.lst && cat $workdir/list/RU.lst | sed 's_.*_route & reject;_' > /etc/bird/RU.txt
cat $workdir/list/ip.lst | sed 's_.*_route & reject;_' > /etc/bird/ip.txt
cat $workdir/list/Meta.lst | sed 's_.*_route & reject;_' > /etc/bird/Meta.txt
cat $workdir/list/Google.lst | sed 's_.*_route & reject;_' > /etc/bird/Google.txt
cat $workdir/list/Microsoft.lst | sed 's_.*_route & reject;_' > /etc/bird/Microsoft.txt
cat $workdir/list/Telegram.lst | sed 's_.*_route & reject;_' > /etc/bird/Telegram.txt
cat $workdir/list/Facebook.lst | sed 's_.*_route & reject;_' > /etc/bird/Facebook.txt
/usr/sbin/birdc configure;
logger "BGP list reconfigured";
echo "Configure bird done"
echo $new > $workdir/md5.txt;
echo "New md5 write"
exit 0
# Переписан с выносом параметров в config.env
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
echo "MD5 not change"
echo "Bird not reconfigure"
exit 0
# 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 "🎉 Готово."