... {toc} h1. Перед тем как начать Проверьте, что хук работает: {code} tail -f /var/log/reductor/reductor.log {code} Если есть ошибки соединения с сервером или другие проблемы - сперва решите их. Хук в примере *только для quagga.* Для других способов синхронизации его необходимо адаптировать. Проверить что используется quagga: {code} ps aux | grep bgpd {code} h1. Что даёт Позволяет настроить анонсирование IP адресов подсетями. Появление крупных префиксов в реестре не будет приводить к зависаниям маршрутизаторов. Для включения нужно: Бэкапим старый хук: {code} cp -a /usr/local/Reductor/userinfo/hooks/events.sh /root/events.sh.$(date +%s) {code} Заменить хук приведённым ниже примером, с поддержкой подсетей. {code} #!/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 } {code} Включить опцию menu \-> "Настройки алгоритма фильтрации" \-> "Синхронизировать IP-адреса подсетями" Очистить конфиги quagga от маршрутов и перезаполнить их: {code} /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 {code} Если используется другой способ синхронизации (ssh, telnet, web api), лучше сперва вручную очистить маршруты перед синхронизацией. Удаление ≈40 тысяч маршрутов по одному может занять много времени. h1. Как быстро откатиться назад Выключить эту опцию и повторить то же самое, только вставив хук: {code} #!/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 } {code}
|