Перейти до

СТГ настройка шейпера


Рекомендованные сообщения

Недавно перешол с Windows на Linux, еще многое пока непонятно. Если что извените за глупые вопросы. Установил себе СТГ, настроил пользователей и тарифы и появилась проблема с трафиком. На компе стоят 2 сетевухи:

1. eth0 - интернет (поключен к серверу с Windows XP по NAT) скорость от 8 -256 кбит/с

 

2. eth1 - локалка на 10 компов

 

Необходимо распределить трафик поровну между работающими в данный момент времени клиентами (иначе один ставит закачку и все сидят без инета).

 

А еще у неавторизированных пользователей подключаются службы (аськи, кипы и т.д.). Вот файл fw что в нем нужно исправить?:

 

 

admin=192.168.1.13

 

server0=192.168.1.1

server1=192.168.0.5

 

iface_cli=eth1

iface_world=eth0

 

conf_port=5555

user_port1=5555

user_port2=5555

 

echo "1" > /proc/sys/net/ipv4/ip_forward

 

iptables -t filter -F

iptables -t filter -X

iptables -t nat -F

iptables -t nat -X

iptables -t filter -P INPUT DROP

iptables -t filter -P FORWARD DROP

iptables -t filter -P OUTPUT DROP

 

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -A FORWARD -p icmp -j ACCEPT

iptables -t filter -A OUTPUT -p icmp -j ACCEPT

 

iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT

iptables -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT

 

iptables -t filter -A INPUT -i $iface_world -j ACCEPT

iptables -t filter -A OUTPUT -o $iface_world -j ACCEPT

 

iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT

iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

 

iptables -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 22 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp -d $admin -s $server0 --sport 22 -j ACCEPT

 

iptables -t filter -A INPUT -p tcp -s 192.168.1.0/24 -d $server0 --dport $conf_p

iptables -t filter -A OUTPUT -p tcp -d 192.168.1.0/24 -s $server0 --sport $conf_

 

iptables -t filter -A INPUT -p udp -s 192.168.1.0/24 --sport $user_port2 -d $ser

iptables -t filter -A OUTPUT -p udp -d 192.168.1.0/24 --dport $user_port1 -s $se

 

iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -j MASQUERADE

Ссылка на сообщение
Поделиться на других сайтах

OnConnect

usercfg="/var/stargazer/users/$LOGIN/conf"

speed=`cat "$usercfg" | grep "Userdata1=" | cut -d"=" -f2`

if [ -z "$speed"]; then

iptables -t mangle -A FORWARD -s $ip -j MARK --set-mark 6

iptables -t mangle -A FORWARD -d $ip -j MARK --set-mark 6

else

iptables -t mangle -A FORWARD -s $ip -j MARK --set-mark $speed

iptables -t mangle -A FORWARD -d $ip -j MARK --set-mark $speed

fi

 

 

OnDisconnect

usercfg="/var/stargazer/users/$LOGIN/conf"

speed=`cat "$usercfg" | grep "Userdata1=" | cut -d"=" -f2`

if [ -z "$speed"]; then

iptables -t mangle -D FORWARD -s $ip -j MARK --set-mark 6

while [ $? -eq 0 ]

do

iptables -t mangle -D FORWARD -s $ip -j MARK --set-mark 6

done

 

iptables -t mangle -D FORWARD -d $ip -j MARK --set-mark 6

while [ $? -eq 0 ]

do

iptables -t mangle -D FORWARD -d $ip -j MARK --set-mark 6

done

else

iptables -t mangle -D FORWARD -s $ip -j MARK --set-mark $speed

while [ $? -eq 0 ]

do

iptables -t mangle -D FORWARD -s $ip -j MARK --set-mark $speed

done

 

iptables -t mangle -D FORWARD -d $ip -j MARK --set-mark $speed

while [ $? -eq 0 ]

do

iptables -t mangle -D FORWARD -d $ip -j MARK --set-mark $speed

done

fi

 

cutspeed запускать с rc.local

/sbin/cbq stop

 

iptables -t mangle --flush

 

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 64kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:11 htb rate 32kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:13 htb rate 512kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:14 htb rate 1024kbit burst 20k

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 1 fw classid 1:10

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 2 fw classid 1:11

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 3 fw classid 1:12

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 4 fw classid 1:13

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 5 fw classid 1:14

 

это рабочий вариант

ессно

32k - 2

64k - 1

128 - 3

512 - 4

1024 -5

скорость указываетсья вюзердате

примичание менять только когда пользователь отключен иначе менять правила не будет

этот вариант не шейперит исходящий трафик

у кого есть более лучшие варианты пишите будет интересно я думаю всем

замечания тоже пишите

Ссылка на сообщение
Поделиться на других сайтах

есть более интересные варианты :)

 

данные о пользователях дублируюся в БД

 

при замене тарифа, запускается скрип, который собирает данные о всех пользователях, их тарифах, скоростях тарифов и создает скрипт для ТЦ с ХТБ, в котором делает полную нарезку с интернетового интерфейса...

Ссылка на сообщение
Поделиться на других сайтах

это хорошо на словах, если не жалко выложи своию наработку сюда думаю многие ей воспользуються

потому как на эту тему вопросов очень много

а готовое решение я видел только под freebsd

Ссылка на сообщение
Поделиться на других сайтах

Собрал ядро с поддержкой IMQ теперь можно шейпить на одном интерфейсе в обе стороны.

Но к стг пока привязать немогу :)

Ссылка на сообщение
Поделиться на других сайтах

я сколько не пробовал на 5.4 динамический шейпинг делать, все криво получается. При увеличении толщины канала увеличиваются задержки. Буду PF + ALTQ шаманить. Как только будут приемлимые результаты - выложу.

Ссылка на сообщение
Поделиться на других сайтах
это хорошо на словах, если не жалко выложи своию наработку сюда думаю многие ей воспользуються

потому как на эту тему вопросов очень много

а готовое решение я видел только под freebsd

наработка - это куча переписанных скриптов СТГ, база данных под ФБ в которую пихается весь траффик, все сообщения логов, дублируются данные о пользователях, прикрученная веб-морда к базе, через которую смотрят свою статистику и пополняют карточки

 

так что выкладывать тут нужно вагон и мальнькую тележку... :)

Ссылка на сообщение
Поделиться на других сайтах
Правильнее всего разделить шейпинг входящего и исходящего потоков.

Так оно и делится imq0 входящий imq1 исходящий

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

Подниму тему....

Возник следующий вопрос:

Есть у меня 10 человек, которые берут канал по 32кбит/сек и качают фильмы одновременно.

В случае примера, который привел p0int - не будет ли делится 32кбит на всех 10? Т.к. класс создается один.

Ссылка на сообщение
Поделиться на других сайтах
  • 8 months later...

cutspeed запускать с rc.local

/sbin/cbq stop

 

iptables -t mangle --flush

 

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 64kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:11 htb rate 32kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:13 htb rate 512kbit burst 20k

tc class add dev eth0 parent 1:1 classid 1:14 htb rate 1024kbit burst 20k

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 1 fw classid 1:10

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 2 fw classid 1:11

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 3 fw classid 1:12

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 4 fw classid 1:13

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 5 fw classid 1:14

 

это рабочий вариант

ессно

32k - 2

64k - 1

128 - 3

512 - 4

1024 -5

скорость указываетсья вюзердате

примичание менять только когда пользователь отключен иначе менять правила не будет

этот вариант не шейперит исходящий трафик

у кого есть более лучшие варианты пишите будет интересно я думаю всем

замечания тоже пишите

 

Это все хорошо, в примере работает без вопросов!

 

Только вот проблемка, он выделяет суммарную скорость на всех по классу.

А нужно что бы он выделял фиксированную скорость для каждого из своего класса!

 

tc class add dev eth0 parent 1:1 classid 1:11 htb rate 32kbit ceil 256kbit burst 20k

 

ceil 256kbit не совсем правильно! так не ограничения скорость т.е. используется выделенная скорость по максимуму, для одного пользователя и соответственно пропорционально на кол-во юзверей использующих этот класс.

 

Возникает вопрос как сделать фиксированную скорость для каждого юзверя (юзверей больше 10 в каждом классе) в классе?

Ссылка на сообщение
Поделиться на других сайтах

Народ у как добавить приоритизацию трафика?

приоритет 1 - ssh

приоритет 2 - UDP 5555

приоритет 3 - http & https

приоритет 4 - ftp

приоритет 5 - torrent, eDonKey ... (P2P вообщем) + весь остальной трафик

Ссылка на сообщение
Поделиться на других сайтах
приоритет 5 - torrent, eDonKey ... (P2P вообщем)

Тут придется Layer7 раскуривать, если предыдущее еще молжно портами вымаркировать, то тут все намного забористей :(

Ссылка на сообщение
Поделиться на других сайтах

для использования Layer7 нужно ядро+iproute патчить (лень если чесно) и судя по тому что пишут я пришел к выводу что он (Layer7) работает только когда канал на равные полосы разделен.

 

Я думаю сдесь тоже можно портами обойтись.

разграничить рприоритеты по портам:

1пр - 22 и 5555

2пр - 53, 80, 443, 25, 110

3пр - все что останица

 

 

Делаю так: но не работает

т.е. канал шейпит на 128, 256, 512 и 1024, а приоритеты не работают

 

#!/bin/bash

iptables -t mangle --flush

tc qdisc del dev eth0 root

 

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit burst 2k

 

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 64kbit burst 2k

tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit burst 2k

tc class add dev eth0 parent 1:1 classid 1:12 htb rate 256kbit burst 2k

tc class add dev eth0 parent 1:1 classid 1:13 htb rate 512kbit burst 2k

tc class add dev eth0 parent 1:1 classid 1:14 htb rate 1024kbit burst 2k

 

tc qdisc add dev eth0 parent 1:10 handle 20: pfifo limit 5

tc qdisc add dev eth0 parent 1:11 handle 30: pfifo limit 5

tc qdisc add dev eth0 parent 1:12 handle 40: pfifo limit 5

tc qdisc add dev eth0 parent 1:13 handle 50: sfq perturb 10

 

tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip protocol 1 0xff flowid 1:10

tc filter add dev eth0 protocol ip parent 1:1 prio 2 u32 match ip src 192.168.25.0\24 match ip dport 22 0xffff flowid 1:11

tc filter add dev eth0 protocol ip parent 1:1 prio 3 u32 match ip src 192.168.25.0\24 match ip dport 5555 0xffff flowid 1:11

tc filter add dev eth0 protocol ip parent 1:1 prio 3 u32 match ip src 192.168.25.0\24 match ip dport 5550 0xffff flowid 1:11

tc filter add dev eth0 protocol ip parent 1:1 prio 2 u32 match ip src 192.168.25.0\24 match ip dport 7777 0xffff flowid 1:11

tc filter add dev eth0 protocol ip parent 1:1 prio 3 u32 match ip src 192.168.25.0\24 match ip dport 53 0xffff flowid 1:12

tc filter add dev eth0 protocol ip parent 1:1 prio 3 u32 match ip src 192.168.25.0\24 match ip dport 80 0xffff flowid 1:12

tc filter add dev eth0 protocol ip parent 1:1 prio 3 u32 match ip src 192.168.25.0\24 match ip dport 443 0xffff flowid 1:12

 

 

tc filter add dev eth0 protocol ip parent 1:1 prio 4 u32 match ip src 192.168.25.0\24 flowid 1:13

 

 

tc filter add dev eth0 parent 1: protocol ip prio 100 handle 1 fw classid 1:10

tc filter add dev eth0 parent 1: protocol ip prio 100 handle 2 fw classid 1:11

tc filter add dev eth0 parent 1: protocol ip prio 100 handle 3 fw classid 1:12

tc filter add dev eth0 parent 1: protocol ip prio 100 handle 4 fw classid 1:13

tc filter add dev eth0 parent 1: protocol ip prio 100 handle 5 fw classid 1:14

 

 

iptables -t mangle -A FORWARD -s 192.168.25.100 -j MARK --set-mark 4

iptables -t mangle -A FORWARD -d 192.168.25.100 -j MARK --set-mark 4

 

*************************

*************************

*************************

 

iptables -t mangle -A FORWARD

 

 

 

народ ткните носом.

Ссылка на сообщение
Поделиться на других сайтах

вобщем автоматизировать ето все дело так не у кого и не получилось,да?

приходится как всегда лезть на сервак и руками все править...или может ктото уже зделал себе?так может поделится с остальными...

Ссылка на сообщение
Поделиться на других сайтах

Народ, расскажите как сделать динамический шейпер, в зависимости от загрузки канала? Может кто знает или есть вебморда на шейпер по айпишкам например или что то в этом роде ? Может как то можно привязать к МРТЖ, что бы показывало загрузку канала определенным ипом и что бы его можно было подрезать =)

Ссылка на сообщение
Поделиться на других сайтах

cat /etc/rc.d/cutspeed

#!/bin/bash
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k
tc filter add dev eth0 parent 1: prio 2 protocol ip u32 match ip src 192.168.32.1 flowid 1:1

cat OnConnect

#!/bin/bash
# Login
LOGIN=$1

#user IP
ip=$2

#cash
CASH=$3

#user ID
ID=$4
eth=eth1
#eth=tun0
eth_local=eth0
mir=xx.xx.xx.xx
tarif=`/etc/stargazer/tarif.php $2`
iptables -t filter -A FORWARD -s $ip -j QUEUE
iptables -t filter -A FORWARD -d $ip -j QUEUE
prioid="${ID}0"

if [ "$tarif" = "A64" ]; then
speed=64
elif [ "$tarif" = "A128" ]; then
speed=128
elif [ "$tarif" = "A256" ]; then
speed=256
elif [ "$tarif" = "el" ]; then
speed=1024
elif [ "$tarif" = "club" ]; then
speed=512
else
speed=0
fi

if [ $speed != 0 ]; then
echo $1 $2 $prioid $speed $tarif >> log
   tc class add dev $eth_local parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k
   tc filter add dev $eth_local parent 1: protocol ip prio ${prioid} u32 match ip dst $ip flowid 1:${prioid}
fi

   iptables -t nat -A POSTROUTING -s $ip -d 0.0.0.0/0 -j MASQUERADE > /dev/null
#    iptables  -I FORWARD -m state --state NEW -m limit --limit 10 -s $ip --limit-burst 5 -j QUEUE
#    iptables  -I FORWARD -m state --state NEW -m limit --limit 10 -d $ip --limit-burst 5 -j QUEUE

 

cat /etc/stargazer/OnDisconnect

#!/bin/bash

# Login
LOGIN=$1

#user IP
ip=$2

#cash
CASH=$3

#user ID
ID=$4
eth=eth2
#eth=tun0
eth_local=eth0
iptables -t filter -D FORWARD -s $ip -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
   iptables -t filter -D FORWARD -s $ip -j QUEUE > /dev/null
done

iptables -t filter -D FORWARD -d $ip -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
   iptables -t filter -D FORWARD -d $ip -j QUEUE > /dev/null
done


iptables -t nat -D POSTROUTING -s $ip -d 0.0.0.0/0 -j MASQUERADE > /dev/null
while [ $? -eq 0 ]
do
   iptables -t nat -D POSTROUTING -s $ip -d 0.0.0.0/0 -j MASQUERADE > /dev/null
#    iptables -t nat -D POSTROUTING -s $ip -o $eth -j SNAT --to-source $mir > /dev/null
done


tc filter del dev $eth_local pref ${prioid}
while [ $? -eq 0 ]
do
tc filter del dev $eth_local pref ${prioid}
done
tc class del dev $eth_local classid 1:${prioid}
while [ $? -eq 0 ]
do
tc class del dev $eth_local classid 1:${prioid}
done

cat /etc/stargazer/tarif.php

#!/usr/bin/php
<?
@mysql_connect("localhost","root","adasdad") or die('Sorry can`t connect to database');
@mysql_select_db("stg") or die('error db');
   {
       $sql="SELECT `Tariff` FROM `users` WHERE `IP` = '".$argv[1]."';";
$res=mysql_query($sql) or die ('error query');
   while ($row = mysql_fetch_array($res)) {
       echo $row[0];
   }
}


?>

вот моя реализация пашет на ура

скорость выставляеться в зависимости от тарифа

Ссылка на сообщение
Поделиться на других сайтах

А как этот вариант ведет себя когда народ насидает торентами?

судя по коду тут не получается организовать гарантированню пропускную способность для каждого юзера в момент когда работают одновременно (например) 20-25 пользователей (качают фильмы в p2p сетях в которых большое количесество одновременных соединений).

Если я не прва не пинайте, а поподробнее раскажите что и как.

Я не так давно сталкнулся с подобной проблемой.

Ссылка на сообщение
Поделиться на других сайтах

zacar

А как ты всем даш гарантию?

У нас например еслив сем выдать чесно то получится и 25мбит не хватит :)

На практике доказано что в любой анлим из прайса рельно впихнуть троих т.к. есть обще известная статистика всегда онлайн 1/3 от всего количества :)

Насчет торрентов и ТЦ была замечена такая фигня что иногда кто то прорывался сквозь шейпер и для этого человека скорость не зарезалась до рестарта скрипта!

Вышли из положения - убрали sfq - стало жежще, но зато графики по ровнее.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...