ne-vlezay80 Опубликовано 24 апреля, 2018 · Жалоба 1 час назад, x86 сказал: Простой ответ - никак. Сложный - используйте u32, но это все-равно не даст всех возможностей iptables. А как тогда классифицировать трафик? Веди при использовании suricata используется iptables. А ifb не работает с iptables? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 24 апреля, 2018 · Жалоба #!/bin/bash TARIFS_DB="/srv/billing/tarrifs.txt" if ls $TARIFS_DB 2>/dev/null >/dev/null then true else echo "ERROR: Tarif database not found." exit 4 fi ACTION=$1 U=$2 CLS=$3 # Avaible tarifs # Format: # <tarif_name>=<tc-class>=<tarif_speed> # TARIFS=' # Default=1:1=2500M # Tresh=1:16=32M # Ultra=1:11=16M # Maxi=1:12=8M # Mini=1:13=2M # Nano=1:14=1M # Micro=1:15=512K # Minimal=1:64=64K # ' TARIFS="$(cat $TARIFS_DB)" case $ACTION in enable) IFACES=$(ip netns exec $U cat /proc/net/dev|awk '{print $1}'|sed '1d'|sed '1d'|tr -d ':'|sed '/lo/d'|sed '/ovs-system/d') for a in $IFACES do ip netns exec $U /sbin/tc qdisc del dev $a root handle 1: ip netns exec $U /sbin/tc qdisc add dev $a root handle 1: htb default 1 r2q 1 for b in $(echo $TARIFS) do TARRIF=$(echo $b|tr '=' ' '|awk '{print $1}') CLASS=$(echo $b|grep $TARRIF|tr '=' ' '|awk '{print $2}') SPEED=$(echo $b|grep $TARRIF|tr '=' ' '|awk '{print $3}') ip netns exec $U /sbin/tc class add dev $a parent 1: classid $CLASS htb rate ${SPEED}bit quantum 8000 burst 8 done # ip netns exec $U /sbin/tc class add dev $a parent 1: classid 1:11 htb rate ${Ultra}bit quantum 8000 burst 8 # ip netns exec $U /sbin/tc class add dev $a parent 1: classid 1:12 htb rate ${Maxi}bit quantum 8000 burst 8 # ip netns exec $U /sbin/tc class add dev $a parent 1: classid 1:13 htb rate ${Mini}bit quantum 8000 burst 8 # ip netns exec $U /sbin/tc class add dev $a parent 1: classid 1:14 htb rate ${Nano}bit quantum 8000 burst 8 done ;; disable) IFACES=$(ip netns exec $U cat /proc/net/dev|awk '{print $1}'|sed '1d'|sed '1d'|tr -d ':'|sed '/lo/d'|sed '/ovs-system/d') for a in $IFACES do ip netns exec $U /sbin/tc qdisc del dev $a root handle 1: done ;; class) for a in $(echo $TARIFS) do if [ "$CLS" == "$(echo $TARIFS|tr ' ' '\n'|grep $CLS|tr '=' ' '|awk '{print $1}')" ] then true else echo "ERROR: Tarif not found. Please contact developer to add new tarif." exit 1 fi CLASS=$(echo $a|grep $CLS|tr '=' ' '|awk '{print $2}') if [ "$CLASS" != "" ] then break else true fi done for a in $(ip netns exec $U iptables -t mangle -L -v --line-numbers|grep CLASSIFY|cut -d' ' -f1) do ip netns exec $U iptables -t mangle -D FORWARD 1 done ip netns exec $U iptables -t mangle -A FORWARD -i ${U}0p1 -j CLASSIFY --set-class $CLASS ip netns exec $U iptables -t mangle -A FORWARD -o ${U}0p1 -j CLASSIFY --set-class $CLASS ;; tarifs) echo "Available tarifs:" printf "Tarif:\tClass:\tSpeed:\t\n" for a in $(seq 0 32) do printf "=" done printf "\n" for a in $(echo $TARIFS) do TR=$(echo $a|tr '=' ' '|awk '{print $1}') CLS=$(echo $a|tr '=' ' '|grep ":"|awk '{print $2}') SPD=$(echo $a|tr '=' ' '|grep "M"|awk '{print $3}') printf "$TR\t$CLS\t$SPD\t\n" done ;; help|* ) echo "$0 enable <client_ns> - enable shaper from client" echo "$0 disable <client_ns> - disable shaper from client" echo "$0 class <client_ns> <tariff> - set tarrif from client" echo "$0 tarifs - list awail tarifs" exit 0 ;; esac Вот мой скрипт для шейпинга. Подходит, если клиенты распиханны по netns. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
x86 Опубликовано 25 апреля, 2018 · Жалоба Судя по скрипту, классификация делается по интерфейсу. Для шейпинга входящего трафика следует на каждый такой интерфейс завести соответствующий ему ifb, перенаправить на него входящий трафик и соответственно шейпить его на данном ifb. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 25 апреля, 2018 (изменено) · Жалоба 1 час назад, x86 сказал: Судя по скрипту, классификация делается по интерфейсу. Для шейпинга входящего трафика следует на каждый такой интерфейс завести соответствующий ему ifb, перенаправить на него входящий трафик и соответственно шейпить его на данном ifb. Да, но у меня на пользователя выделен vlan и на роутере netns. Классификация делается через iptables. Изменено 25 апреля, 2018 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
x86 Опубликовано 26 апреля, 2018 · Жалоба Еще раз - что является критерием классификации? Если это интерфейс, то его входящий трафик нужно заворачивать на соответствующий ifb и соответственно на нем шейпить входящий трафик. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 26 апреля, 2018 · Жалоба 29 минут назад, x86 сказал: Еще раз - что является критерием классификации? Если это интерфейс, то его входящий трафик нужно заворачивать на соответствующий ifb и соответственно на нем шейпить входящий трафик. ifb не работает с iptables. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
x86 Опубликовано 26 апреля, 2018 · Жалоба Классифицировать тоже надо через tc - типа tc filter add dev $ifb parent 1: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 26 апреля, 2018 · Жалоба 2 часа назад, x86 сказал: Классифицировать тоже надо через tc - типа tc filter add dev $ifb parent 1: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 А как ты думаешь через tc залазеть на 7-мой уровень модели OSI? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 27 апреля, 2018 · Жалоба 17 часов назад, ne-vlezay80 сказал: ifb не работает с iptables. А если классифицировать средствами iptables на входящих интерфейсах, а шейпить уже на ifb? skb->prio у пакета сохраняется на всем протяжении его жизни в системе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
x86 Опубликовано 27 апреля, 2018 · Жалоба 7 минут назад, taf_321 сказал: А если классифицировать средствами iptables на входящих интерфейсах, а шейпить уже на ifb? skb->prio у пакета сохраняется на всем протяжении его жизни в системе. ifb на входящем интерфейсе сработает ДО iptables 15 часов назад, ne-vlezay80 сказал: А как ты думаешь через tc залазеть на 7-мой уровень модели OSI? Хочешь показать, что знаешь умные слова? Ну, покажи где у тебя 7-й уровень используется? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 30 апреля, 2018 · Жалоба В 4/27/2018 в 09:57, x86 сказал: Ну, покажи где у тебя 7-й уровень используется? Это DPI, которые реализуется через suricata. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
x86 Опубликовано 2 мая, 2018 · Жалоба В 30.04.2018 в 09:18, ne-vlezay80 сказал: Это DPI, которые реализуется через suricata. Т.е. suricata маркирует трафик? Тогда использование ifb смысла не имеет( или нужно маркировать самому ). Можно пробовать шейпить на исходящем интерфейсе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 2 мая, 2018 · Жалоба 4 часа назад, x86 сказал: Т.е. suricata маркирует трафик? Тогда использование ifb смысла не имеет( или нужно маркировать самому ). Можно пробовать шейпить на исходящем интерфейсе. Я так и делаю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...