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
|
||||
|
||||
Скрипт для скачивания списков 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
|
||||
# Скрипт для скачивания 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 "🎉 Готово."
|
||||
|
|
|
|||
Loading…
Reference in a new issue