Перейти до

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

Опубликовано:

Недавно перешол с 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 теперь можно шейпить на одном интерфейсе в обе стороны.

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

Опубліковано:

это понятно что правильнее

но вроде наткнулся на загнание в отдельную таблицу

но пока не опробовал

времени не хватает

Опубліковано:

Без разделения на 2 канала на фряхе через dummynet нормального шейпинга не получится.

Это я после некоторой *ботни определил.

Опубліковано:

я сколько не пробовал на 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 - стало жежще, но зато графики по ровнее.

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

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

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

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

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

Вхід

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

Войти сейчас
×
×
  • Створити нове...