Анонсирование IP адресов подсетями

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

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

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

Хук в примере *только для quagga.*
h1. Хук для Quagga (BGP)

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

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

{code}
ps aux | grep bgpd
{code}

h1. Что даёт
Хук позволяет настроить анонсирование IP адресов подсетями, появление крупных префиксов в реестре не будет приводить к зависаниям маршрутизаторов.

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

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

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

Бэкапим старый хук:

Для Carbon Reductor 7:
{code}
cp -a /usr/local/Reductor/userinfo/hooks/events.sh /root/events.sh.$(date +%s)
{code}

Для Carbon Reductor 8:
{code}
cp -a /app/reductor/cfg/userinfo/hooks/events.sh /root/events.sh.$(date +%s)
{code}
Заменить хук приведённым ниже примером, с поддержкой подсетей.

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

h1. Хук для микротик Mikrotik

Очистка address-list:
}
{code}

h1. Хук для Linux-роутеров

Предполагаем, что ipset hash type = hash:net. В случае с hash:ip надо пересоздавать ipset, рестартить iptables итд.

Чтобы пересоздать ipset нужно удалить все правила в iptables, которые его используют.

Быстрая очистка ipset:

{code}
ipset flush rkn
{code}

Хук:

{code}
#!/bin/bash

SSH="/usr/bin/ssh -T root@10.0.0.1 bash"
SET_RKN=rkn

# отсекаем лишнее из вывода ipset
__only_ip() {
grep add | egrep -o "$ip_or_ipmask_regex" | sed -E "s|^$ip_regex$|&/32|g"
}

# отправить на оборудование команду на блокирование ip адреса
ip_block_full_add() {
local ip="$1"
echo "/sbin/ipset add $SET_RKN $ip" | $SSH
}

# отправить на оборудование команду на снятие блокировки ip адреса
ip_block_full_del() {
local ip="$1"
echo "/sbin/ipset del $SET_RKN $ip" | $SSH
}

# получить список заблокированных ip адресов
ip_block_full_get() {
echo "/sbin/ipset save $SET_RKN" | $SSH | __only_ip
}
{code}