harry390625 Опубликовано 29 июня, 2012 · Жалоба После долгих изучений данного форума удалось поднять следующую конфигурацию: root@TestServer:/# uname -rms Linux 2.6.32.28+drm33.13imq1 i686 eth0 - провайдер 1 (временно не используется) eth1 - провайдер 2 (подключение по pppoe) eth2 - внутрення сеть Инет юзерам раздается по средством pptp подключений. Установлен radius + squid transparent + nat. Скорость шейпится через imq интерфейсы следующими образом: root@TestServer:/# iptables -t mangle -nvxL Chain PREROUTING (policy ACCEPT 257371872 packets, 148567043931 bytes) pkts bytes target prot opt in out source destination 429204 40571952 IMQ all -- ppp+ * 0.0.0.0/0 !195.x.x.x IMQ: todev 0 Chain INPUT (policy ACCEPT 167552178 packets, 89828138499 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 89575625 packets, 58695542283 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 180530469 packets, 136566062795 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 269795668 packets, 195212974934 bytes) pkts bytes target prot opt in out source destination 619491 687022728 IMQ all -- * ppp+ !195.x.x.x 0.0.0.0/0 IMQ: todev 1 root@TestServer:/# grep -v "^#" /etc/init.d/shaper.sh | sed -e '/^$/d' modprobe imq ip link set dev imq0 up tc qdisc del dev imq0 root 2> /dev/null > /dev/null tc qdisc del dev imq0 ingress 2> /dev/null > /dev/null tc qdisc add dev imq0 root handle 1: htb default 10 r2q 10 tc class add dev imq0 parent 1: classid 1:1 htb rate 24mbit tc class add dev imq0 parent 1:1 classid 1:10 htb rate 512kbit ceil 512kbit prio 3 tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 15 ip link set dev imq1 up tc qdisc del dev imq1 root 2> /dev/null > /dev/null tc qdisc del dev imq1 ingress 2> /dev/null > /dev/null tc qdisc add dev imq1 root handle 2: htb default 10 r2q 10 tc class add dev imq1 parent 2: classid 2:2 htb rate 24mbit tc class add dev imq1 parent 2:2 classid 2:10 htb rate 512kbit ceil 512kbit prio 3 tc qdisc add dev imq1 parent 2:10 handle 10: sfq perturb 15 root@TestServer:/# grep -v "^#" /etc/ppp/ip-up | sed -e '/^$/d' PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin export PATH PPP_IFACE="$1" PPP_TTY="$2" PPP_SPEED="$3" PPP_LOCAL="$4" PPP_REMOTE="$5" PPP_IPPARAM="$6" export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM PPP_TTYNAME=`/usr/bin/basename "$2"` export PPP_TTYNAME if [ -f /var/run/radattr.$1 ] then Download_rate_speed=`/usr/bin/awk '/Download-rate-speed/ {print $2}' /var/run/radattr.$1` Download_ceil_speed=`/usr/bin/awk '/Download-ceil-speed/ {print $2}' /var/run/radattr.$1` Upload_rate_speed=`/usr/bin/awk '/Upload-rate-speed/ {print $2}' /var/run/radattr.$1` Upload_ceil_speed=`/usr/bin/awk '/Upload-ceil-speed/ {print $2}' /var/run/radattr.$1` Class_speed=`/usr/bin/awk '/Class-speed/ {print $2}' /var/run/radattr.$1` /sbin/tc class add dev imq1 parent 2:2 classid 2:${Class_speed} htb rate ${Download_rate_speed}kbit ceil ${Download_ceil_speed}kbit burst 40k /sbin/tc qdisc add dev imq1 parent 2:${Class_speed} handle ${Class_speed}: sfq perturb 15 /sbin/tc filter add dev imq1 parent 2: protocol ip prio 5 u32 match ip dst $5 flowid 2:${Class_speed} /sbin/tc class add dev imq0 parent 1:1 classid 1:${Class_speed} htb rate ${Upload_rate_speed}kbit ceil ${Upload_ceil_speed}kbit burst 40k /sbin/tc qdisc add dev imq0 parent 1:${Class_speed} handle ${Class_speed}: sfq perturb 15 /sbin/tc filter add dev imq0 parent 1: protocol ip prio 5 u32 match ip src $5 flowid 1:${Class_speed} fi if [ -x /etc/ppp/ip-up.local ]; then exec /etc/ppp/ip-up.local "$*" fi run-parts /etc/ppp/ip-up.d \ --arg="$1" --arg="$2" --arg="$3" --arg="$4" --arg="$5" --arg="$6" if [ -e /var/run/ppp-quick ]; then rm /var/run/ppp-quick wait kill $PPPD_PID fi root@TestServer:/var/log# grep -v "^#" /etc/ppp/ip-down | sed -e '/^$/d' PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin export PATH PPP_IFACE="$1" PPP_TTY="$2" PPP_SPEED="$3" PPP_LOCAL="$4" PPP_REMOTE="$5" PPP_IPPARAM="$6" export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM if [ -f /var/run/radattr.$1 ] then Download_rate_speed=`/usr/bin/awk '/Download-rate-speed/ {print $2}' /var/run/radattr.$1` Download_ceil_speed=`/usr/bin/awk '/Download-ceil-speed/ {print $2}' /var/run/radattr.$1` Upload_rate_speed=`/usr/bin/awk '/Upload-rate-speed/ {print $2}' /var/run/radattr.$1` Upload_ceil_speed=`/usr/bin/awk '/Upload-ceil-speed/ {print $2}' /var/run/radattr.$1` Class_speed=`/usr/bin/awk '/Class-speed/ {print $2}' /var/run/radattr.$1` for h in `/sbin/tc filter show dev imq1 | grep ":${Class_speed}" | cut -d" " -f10`; do /sbin/tc filter del dev imq1 parent 2: protocol ip prio 5 handle $h u32 done /sbin/tc qdisc del dev imq1 parent 2:${Class_speed} handle ${Class_speed}: sfq perturb 15 /sbin/tc class del dev imq1 parent 2:2 classid 2:${Class_speed} htb rate ${Download_rate_speed}kbit ceil ${Download_ceil_speed}kbit burst 40k for h in `/sbin/tc filter show dev imq0 | grep ":${Class_speed}" | cut -d" " -f10`; do /sbin/tc filter del dev imq0 parent 1: protocol ip prio 5 handle $h u32 done /sbin/tc qdisc del dev imq0 parent 1:${Class_speed} handle ${Class_speed}: sfq perturb 15 /sbin/tc class del dev imq0 parent 1:1 classid 1:${Class_speed} htb rate ${Upload_rate_speed}kbit ceil ${Upload_ceil_speed}kbit burst 40k fi PPP_TTYNAME=`/usr/bin/basename "$2"` export PPP_TTYNAME if [ -x /etc/ppp/ip-down.local ]; then exec /etc/ppp/ip-down.local "$*" fi run-parts /etc/ppp/ip-down.d \ --arg="$1" --arg="$2" --arg="$3" --arg="$4" --arg="$5" --arg="$6" Все работает вроде бы правильно, и скорость режется как надо. Только временами возникает увеличение пинга на внешние ресурсы до 1500-2000 мс. У меня подозрения на шейпер. Подскажите как выяснить что может давать такую картину. Может где допустил ошибку... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bos9 Опубликовано 29 июня, 2012 · Жалоба Только временами возникает увеличение пинга на внешние ресурсы до 1500-2000 мс. У меня подозрения на шейпер. Подскажите как выяснить что может давать такую картину. банальный оверкоммит в классе дает такую картину Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harry390625 Опубликовано 29 июня, 2012 · Жалоба банальный оверкоммит в классе дает такую картину Подскажите пожалуйста из-за чего так происходит - для каждого клиента (ip) я же создаю свой класс Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bos9 Опубликовано 29 июня, 2012 · Жалоба Подскажите пожалуйста из-за чего так происходит - для каждого клиента (ip) я же создаю свой класс Ну вы же создаете классы к конечными значениями rate/ceil, вот при привышении этого лимита и возникают задержки отправки пакетов (в терминологии htb кол-во пакетов значительно превышает кол-во токенов, генерируемых для их отправки) с целью выдержать заданное ограничение по скорости. В общем-то это и есть суть механизма шейпирования. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harry390625 Опубликовано 29 июня, 2012 · Жалоба т.е. грубо говоря если подключилось 60 человек с грантированной скоростью 512 кб/с, то 512 * 60 = 30 мб/с, а канал у меня 24 мб/с - отсюда и проблемы?.. Тогда нет смысла создавать на каждого клиента свой класс... А с другой стороны если несколько клиентов заворачивать в один класс, то не будет у них гарантированной скорости. Подскажите пожалуйста как правильно решить тогда мою задачу (каждому пользователю гарантированная скорость в зависимости от должности с возможностью увеличения скорости до определенного предела в случае простоя канала)? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bos9 Опубликовано 30 июня, 2012 · Жалоба Соблюдайте правило - сумма rate дочерних классов не должна превышать rate родительского класса. Тогда в часы максимальной нагрузки, все пользователи гарантированно получат свой rate. А ceil - это будет как раз та самая скорость "до", которую вы будете продавать/раздавать своим юзерам. Плюс, чтобы все это работало нужно ограничить максимальную входящую скорость до 80-90% от той полосы, что вам предоставляет аплинк, тогда очередь пакетов будет у вас, а не у аплинка, который её скорее всего даже не шейпит, а полисит. Ну и самое главное надо помнить, что шейпер чудес творить не умеет и внешних 30 мегабит в 100 подключений по мегабиту не превратит, поэтому, если все совсем грустно - может самое время подумать о расширении канала? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harry390625 Опубликовано 30 июня, 2012 · Жалоба Спасибо большое за разъяснения! Если переделать мои скрипты с учетом ваших замечаний - получится такой вариант: root@TestServer:/# grep -v "^#" /etc/init.d/shaper.sh | sed -e '/^$/d' modprobe imq ip link set dev imq0 up tc qdisc del dev imq0 root 2> /dev/null > /dev/null tc qdisc del dev imq0 ingress 2> /dev/null > /dev/null tc qdisc add dev imq0 root handle 1: htb default 10 r2q 10 tc class add dev imq0 parent 1: classid 1:1 htb rate 21mbit (0.9 * 24 мб/с на аплинке) tc class add dev imq0 parent 1:1 classid 1:10 htb rate 3mbit ceil 5mbit prio 3 tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 15 tc class add dev imq0 parent 1:1 classid 1:20 htb rate 7mbit ceil 10mbit prio 4 tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 15 tc class add dev imq0 parent 1:1 classid 1:30 htb rate 11mbit ceil 15mbit prio 5 tc qdisc add dev imq0 parent 1:30 handle 30: sfq perturb 15 ip link set dev imq1 up tc qdisc del dev imq1 root 2> /dev/null > /dev/null tc qdisc del dev imq1 ingress 2> /dev/null > /dev/null tc qdisc add dev imq1 root handle 2: htb default 10 r2q 10 tc class add dev imq1 parent 2: classid 2:2 htb rate 21mbit tc class add dev imq1 parent 2:2 classid 2:10 htb rate 3mbit ceil 5mbit prio 3 tc qdisc add dev imq1 parent 2:10 handle 10: sfq perturb 15 tc class add dev imq1 parent 2:2 classid 2:20 htb rate 7mbit ceil 10mbit prio 4 tc qdisc add dev imq1 parent 2:20 handle 20: sfq perturb 15 tc class add dev imq1 parent 2:2 classid 2:30 htb rate 11mbit ceil 15mbit prio 5 tc qdisc add dev imq1 parent 2:30 handle 30: sfq perturb 15 При поднятии ppp интерфейса буду с помощью фильтров назначать юзеру нужный класс скорости (в зависимости от должности). Только возникает еще один вопрос: получается три класса скоростей. Если в 10 классе будет один пользователь, то скорость у него будет гарантированно 3 мб/с. Получается многовато для рабочего, а поставить Rate=512 я не могу, т.к. в пиковые моменты в данном классе может быть до 30 человек... Как возможно решить такую задачу? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bos9 Опубликовано 30 июня, 2012 · Жалоба При поднятии ppp интерфейса буду с помощью фильтров назначать юзеру нужный класс скорости (в зависимости от должности). Только возникает еще один вопрос: получается три класса скоростей. Если в 10 классе будет один пользователь, то скорость у него будет гарантированно 3 мб/с. Получается многовато для рабочего, а поставить Rate=512 я не могу, т.к. в пиковые моменты в данном классе может быть до 30 человек... Как возможно решить такую задачу? Ну если развивать вашу идею, то можно еще ветвление добавить, то есть например к классу 1:10 добавлять дочерние классы для каждого пользователя с rate 100kbit (3mbit/30) и ceil в зависимости от должности. И ceil в родительских классах сделайте 21mbit, чтоб канал не простаивал даже если в сети будут пользователи только одного из классов. А вообще можно не усложнять и сразу к классу 1:1 прикреплять уже классы юзеров с rate=21/n (где n число юзеров всего) и ceil в зависимости от должности. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
harry390625 Опубликовано 30 июня, 2012 · Жалоба Спасибо большое за помощь. Посмотрю на поведение сети среди недели - отпишусь по результатам Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...