Просмотр Исходного

В текущей ситуации на 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 "При синхронизации списков 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}