Суммарное ограничение скорости трафика на список (городских) сетей

Skip to end of metadata
Go to start of metadata

Список сетей в формате 11.22.33.44/19 , по одному адресу в строке, должен быть помещен в файл /mnt/rw_disc/local_nets_sum_shaper . Правило для первой подсети из этого списка нужно создать вручную в файрволе в Carbon Manager, из этого правила будут скопированы ограничения скорости для остальных сетей.

if [ "$1" == 'firewall_custom.sh' ]; then
    # Ограничить суммарную скорость по группе подсетей.
    # Ограничение для первой сети из списка должно быть создано в Carbon Manager вручную.
    LOCAL_NET_LIST='/mnt/rw_disc/local_nets_sum_shaper'
    read first_net < "$LOCAL_NET_LIST"
    first_net="`echo \"$first_net\" | grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}' | head -n 1`" # Вырезаем ип/маска, только первый.
    first_net_escaped="`echo \"$first_net\" | sed 's/\./\\\./g;s/\//\\\\\//g'`" # Два лишних слеша во втором s из-за скрипта. В командной строке на два слеша меньше работает.
    first_net_mark="`iptables -nv -t mangle -L fw_custom_postr_shaper | sed -n \"/${first_net_escaped}/s/.*MARK set \([^ ]*\).*/\1/p\"`" # Вырезаем метку из правила, созданного вручную.
    if [ -n "$first_net_mark" ]; then
    net_counter=0
    while read local_net; do
        ((net_counter++))
        if [ "$net_counter" == 1 ]; then continue; fi
        for local_nets_in_string in `echo "$local_net" | grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'`; do # Вырезаем только ип/маска из строки, по одному в строке, если несколько.
        iptables -t mangle -A fw_custom_postr_shaper -d "$local_nets_in_string" -j MARK --set-mark "$first_net_mark"
        iptables -t mangle -A fw_custom_prer_shaper -s "$local_nets_in_string" -j MARK --set-mark "$first_net_mark"
        done
    done < "$LOCAL_NET_LIST"
    fi
fi
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.