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

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

В текущей ситуации на 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

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

ФАЙЛ НИЖЕ ЯВЛЯЕТСЯ ПРОТОТИПОМ И ЧЕРНОВИКОМ, В ПРОДАКШНЕ РАБОТАТЬ НЕ БУДЕТ

Требуются бэкпорты из CR8.

Список недостающих частей:

  • утилита для разбивки списка сетей до определённого префикса
  • утилита для разбивки конкретной сети до определённого префикса
  • исправления в пакет carbon_ip_tools
#!/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
}
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.