Дробление крупных подсетей на мелкие

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (29)

просмотр истории страницы
В текущей ситуации на 18 апреля 2018:

Большое число сетей приводят к медленной синхронизации.

*Подсказка*: крупные изменения списков применяются долго из-за удаления старых адресов, если перед синхронизацией полностью очистить список на маршрутизаторе - всё будет проходить значительно быстрее.
|| До какого \\
префикса режем || Сколько сетей \\
| /32 | ≈17280000 |

h2. Как дробить на CR7 (ЧЕРНОВИК)

{color:#808000}{*}ФАЙЛ НИЖЕ ЯВЛЯЕТСЯ ПРОТОТИПОМ И ЧЕРНОВИКОМ, В ПРОДАКШНЕ РАБОТАТЬ НЕ БУДЕТ{*}{color}
{color:#808000}{*}ЭТО ПРОТОТИП И ЧЕРНОВИК, В ПРОДАКШНЕ РАБОТАТЬ НЕ БУДЕТ{*}{color}

{color:#000000}Требуются бэкпорты из CR8.{color}
{code}
wget "https://download5.carbonsoft.ru/reductor/bgp_split_hotfix.tar.gz" -O /root/bgp_split_hotfix.tar.gz
cd /
tar xfz /root/bgp_split_hotfix.tar.gz
{code}

{color:#000000}Список недостающих частей:{color}
В файл

* {color:#000000}утилита для разбивки списка сетей до определённого префикса{color}
* {color:#000000}утилита для разбивки конкретной сети до определённого префикса{color}
* {color:#000000}исправления в пакет carbon_ip_tools{color}
{code}
/usr/local/Reductor/userinfo/hooks/events.sh
{code}
в начале добавить

{code}
. /usr/local/Reductor/userinfo/hooks/events.sh.split
#!/bin/bash {code}

declare -A app
app['bgpd_split_to_prefix']='16'
В файле events.sh.split в начале укажите префикс, до которого хотите дробить сети.

IP_BLOCK_FULL_LIST="$LISTDIR/load/ip_subnet_block.load" {code}
app['bgpd_split_to_prefix']='20'
{code}

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 {code}
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
} /usr/local/Reductor/bin/events.sh
{code}

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
echo "$1" >> /tmp/ip_block
}
h3. Чтобы откатиться

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
grep -v "^$1$" /tmp/ip_block > /tmp/ip_block.$$
mv /tmp/ip_block.$$ /tmp/ip_block
}
просто убрать строчку с подключением events.sh.split из events.sh и запустить:

# получить список уже заблокированных IP адресов, нужно для вычисления дельты
ip_block_full_get() {
cat /tmp/ip_block
}
{code}
/usr/local/Reductor/bin/events.sh
{code}
заново.