|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (23)
просмотр истории страницы... |
Если есть ошибки соединения с сервером или другие проблемы - сперва решите их. |
Хук в примере *только для 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} |
Заменить хук приведённым ниже примером, с поддержкой подсетей. |
... |
Если используется другой способ синхронизации (ssh, telnet, web api), лучше сперва вручную очистить маршруты перед синхронизацией. |
Удаление ≈40-60 тысяч маршрутов по одному может занять много времени. |
|
h1. Как быстро откатиться назад |
h1. Хук для Mikrotik |
|
Выключить эту опцию и повторить то же самое, только вставив хук: |
Очистка address-list: |
{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 } |
echo '/ip firewal address-list remove [find list~"reductor_ip_block_list"]' | /usr/bin/ssh -T admin@10.0.0.1 |
{code} |
h1. Хук для микротик |
Сам хук |
{code} |
... |
__only_ip() { egrep -o "$ip_or_ipmask_regex" | sed -E "s|^$ip_regex$|&/32|g" |
} |
# Отправляем на оборудование команду на блокирование ip адреса |
... |
local ip="$1" echo "/ip firewall address-list add list=reductor_ip_block_list address=$ip comment=${ip}_reductor_ip_block" | $SSH |
} |
# Отправляем на оборудование команду на снятие блокировки ip адреса ip_block_full_del() { local ip="$1" echo "/ip firewall address-list remove [find comment=${ip}_reductor_ip_block]" | $SSH |
} |
mikrotik_firewall_prepare() { |
... |
} {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} |