... В текущей ситуации на 18 апреля 2018: || До какого \\ префикса режем || Сколько сетей \\ получаем || | не режем | ≈1800 | | /16 | 2015 | | /17 | 2289 | | /18 | 2837 | | /19 | 3934 | | /20 | 6128 | | /21 | 10518 | | /22 | 19301 | | /23 | 36872 | | /24 | 72014 | | /25 | ≈140000 | | /26 | ≈280000 | | /27 | ≈560000 | | /28 | ≈1080000 | | /29 | ≈2160000 | | /30 | ≈4320000 | | /31 | ≈8640000 | | /32 | ≈17280000 | h2. Как дробить на CR7 (ЧЕРНОВИК) {color:#808000}{*}ФАЙЛ НИЖЕ ЯВЛЯЕТСЯ ПРОТОТИПОМ И ЧЕРНОВИКОМ, В ПРОДАКШНЕ РАБОТАТЬ НЕ БУДЕТ{*}{color} {color:#000000}Требуются бэкпорты из CR8.{color} {color:#000000}Список недостающих частей:{color} * {color:#000000}утилита для разбивки списка сетей до определённого префикса{color} * {color:#000000}утилита для разбивки конкретной сети до определённого префикса{color} * {color:#000000}исправления в пакет carbon_ip_tools{color} {code} #!/bin/bash declare -A app app['bgpd_split_to_prefix']='16' IP_BLOCK_FULL_LIST="$LISTDIR/load/ip_subnet_block.load" check_lists() { # $IP_BLOCK_FULL_LIST должен быть инициализирован в хуке [ -s "$IP_BLOCK_FULL_LIST" ] && return 0 log "Пустой список $IP_BLOCK_FULL_LIST, ждём 2 секунды"
|
sleep 2 [ -s "$IP_BLOCK_FULL_LIST" ] && return 0
|
log "Не синхронизируем пустой список, алертим и завершаем работу."
|
log "При синхронизации списков IP с маршрутизатором $IP_BLOCK_FULL_LIST оказался пустым" return 1
|
... } __main() { log "tick begin" local DATA_DIR=/var/lib/reductor/ local FILE=$DATA_DIR/ip_block_full local NEW=$FILE.new local OLD=$FILE.old mkdir -p $DATA_DIR/ check_lists || return 0 prepare maskify < "$IP_BLOCK_FULL_LIST" \ | ${HOOKDIR}/split-subnet-list.sh - "${app['bgpd_split_to_prefix']}" > "$NEW" ip_block_full_get | sort -u | maskify > $OLD mikrotik_retry "$OLD" log "На сервере содержится $(wc -l < "$OLD") записей" log "Для полной блокировки имеется $(wc -l < "$NEW") записей" files_to_events "$OLD" "$NEW" | process_events log "tick end" return 0 } # отправить на оборудование команду на блокирование ip адреса ip_block_full_add() { echo "$1" >> /tmp/ip_block } # отправить на оборудование команду на снятие блокировки ip адреса ip_block_full_del() { grep -v "^$1$" /tmp/ip_block > /tmp/ip_block.$$ mv /tmp/ip_block.$$ /tmp/ip_block } # получить список уже заблокированных IP адресов, нужно для вычисления дельты ip_block_full_get() { cat /tmp/ip_block } {code}
|