gigacode
This commit is contained in:
parent
22f6291fd2
commit
f35aa6987e
3 changed files with 157 additions and 37 deletions
34
README.md
34
README.md
|
|
@ -1,2 +1,36 @@
|
||||||
# get-ip-prefix
|
# 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
34
config.env.example
Normal 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
126
get-ip.sh
|
|
@ -1,41 +1,93 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Скрипт для скачивания IPv4 адресов и добавления их в bird
|
|
||||||
|
# Скрипт для скачивания IPv4-адресов и добавления их в BIRD
|
||||||
# Основан на https://habr.com/ru/articles/359268/
|
# Основан на https://habr.com/ru/articles/359268/
|
||||||
# Доработал AlexandrLinux (собака) bafista.ru
|
# Доработал AlexandrLinux (собака) bafista.ru
|
||||||
# Основной список адресов взят тут: https://github.com/lord-alfred/ipranges/tree/main?tab=readme-ov-file
|
# Переписан с выносом параметров в config.env
|
||||||
workdir=/opt/get-ip
|
|
||||||
cd $workdir/list
|
set -euo pipefail # exit on error, undefined var, fail pipe
|
||||||
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
|
# Load config
|
||||||
#wget -N https://antifilter.download/list/subnet.lst
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
wget -N -O ip.lst https://antifilter.network/download/ip.lst
|
CONFIG_FILE="$SCRIPT_DIR/config.env"
|
||||||
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
|
if [[ ! -f "$CONFIG_FILE" ]]; then
|
||||||
wget -N -O Microsoft.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/microsoft/ipv4.txt
|
echo "❌ Ошибка: не найден конфигурационный файл $CONFIG_FILE"
|
||||||
wget -N -O Telegram.lst https://github.com/lord-alfred/ipranges/raw/refs/heads/main/telegram/ipv4.txt
|
exit 1
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
echo "MD5 not change"
|
|
||||||
echo "Bird not reconfigure"
|
# shellcheck source=config.env
|
||||||
exit 0
|
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 "🎉 Готово."
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue