BGP и подсети

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

Перед тем как начать

Проверьте, что хук работает:

tail -f /var/log/reductor/reductor.log

Если есть ошибки соединения с сервером или другие проблемы - сперва решите их.

Хук в примере только для quagga.

Для других способов синхронизации его необходимо адаптировать.

Проверить что используется quagga:

ps aux | grep bgpd

Что даёт

Позволяет настроить анонсирование IP адресов подсетями.

Появление крупных префиксов в реестре не будет приводить к зависаниям маршрутизаторов.

Для включения нужно:

Заменить хук приведённым ниже примером, с поддержкой подсетей.

#!/bin/bash

# этот хук поддерживает отправку только подсетями
# предполагается, что синхронизируемый список содержит
# только подсети уже с маской и в ответ мы получаем
# именно IP адреса с маской

commit() {
	echo "wr m" | vtysh
}

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
	local ip="$1"
	read SEQ < $TMPDIR/blockseq
	SEQ=${SEQ:-0}
	let SEQ+=5
	echo $SEQ > $TMPDIR/blockseq
	echo $SEQ
	{
		echo "conf t"
		echo "ip prefix-list BLACKHOLE seq $SEQ permit $ip"
		echo "ip route $ip Null0"
		echo "end"
		echo "clear ip bgp * soft"
	} | vtysh
}

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
	local ip="$1"
	{
		echo "conf t"
		echo "no ip prefix-list BLACKHOLE permit $ip"
		echo "no ip route $ip Null0"
		echo "end"
		echo "clear ip bgp * soft"
	} | vtysh
}

# получить список заблокированных ip адресов
ip_block_full_get() {
	echo -ne "show ip route static" | vtysh > $HOOKDIR/ip_route.txt
	egrep -o "$ipmask_regex" $HOOKDIR/ip_route.txt | tee $HOOKDIR/ip.txt
}

Включить опцию menu -> "Настройки алгоритма фильтрации" -> "Синхронизировать IP-адреса подсетями"

Очистить конфиги quagga от маршрутов и перезаполнить их:

cp -a /usr/local/Reductor/userinfo/hooks/events.sh /root/events.sh.$(date +%s)
/etc/init.d/crond stop
killall events.sh
grep -v '^ip prefix-list' /etc/quagga/bgpd.conf > /etc/quagga/bgpd.conf.no_ip
cat /etc/quagga/bgpd.conf.no_ip > /etc/quagga/bgpd.conf
egrep -v '^(ip prefix-list|ip route)' /etc/quagga/zebra.conf > /etc/quagga/zebra.conf.no_ip
cat /etc/quagga/zebra.conf.no_ip > /etc/quagga/zebra.conf
/etc/init.d/zebra restart
/etc/init.d/bgpd restart
/etc/init.d/crond start
/usr/local/Reductor/bin/events.sh

Если используется другой способ синхронизации (ssh, telnet, web api), лучше сперва вручную очистить маршруты перед синхронизацией.

Удаление ≈40 тысяч маршрутов по одному может занять много времени.

Как быстро откатиться назад

Выключить эту опцию и повторить то же самое, только вставив хук:

#!/bin/bash

# этот хук поддерживает отправку только IP адресами хостов
# предполагается, что синхронизируемый список содержит
# только IP адреса без масок, к ним автоматически добавляется
# префикс /32.

commit() {
	echo "wr m" | vtysh
}

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
	local ip="$1"
	read SEQ < $TMPDIR/blockseq
	SEQ=${SEQ:-0}
	let SEQ+=5
	echo $SEQ > $TMPDIR/blockseq
	echo $SEQ
	{
		echo "conf t"
		echo "ip prefix-list BLACKHOLE seq $SEQ permit $ip/32"
		echo "ip route $ip/32 Null0"
		echo "end"
		echo "clear ip bgp * soft"
	} | vtysh
}

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
	local ip="$1"
	{
		echo "conf t"
		echo "no ip prefix-list BLACKHOLE permit $ip/32"
		echo "no ip route $ip/32 Null0"
		echo "end"
		echo "clear ip bgp * soft"
	} | vtysh
}

# получить список заблокированных ip адресов
ip_block_full_get() {
	echo -ne "show ip route static" | vtysh > $HOOKDIR/ip_route.txt
	egrep -o "$ip_regex" $HOOKDIR/ip_route.txt | tee $HOOKDIR/ip.txt
}
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.