Список сетей в формате 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