mishsoft 0 Опубликовано: 2007-02-17 14:11:48 Share Опубликовано: 2007-02-17 14:11:48 Недавно перешол с 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 Ссылка на сообщение Поделиться на других сайтах
S_ergey 21 Опубліковано: 2007-02-17 17:26:55 Share Опубліковано: 2007-02-17 17:26:55 СТГ и шейпер неимеет ниче общего. Копай в сторону CBQ HTB http://www.opennet.ru/base/net/cbq_rus.txt.html Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2007-02-17 17:32:57 Share Опубліковано: 2007-02-17 17:32:57 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 скорость указываетсья вюзердате примичание менять только когда пользователь отключен иначе менять правила не будет этот вариант не шейперит исходящий трафик у кого есть более лучшие варианты пишите будет интересно я думаю всем замечания тоже пишите Ссылка на сообщение Поделиться на других сайтах
mishsoft 0 Опубліковано: 2007-02-20 11:36:30 Автор Share Опубліковано: 2007-02-20 11:36:30 Спасибо всем кто ответил!!! Все работает номально, можнопользоваться. Ссылка на сообщение Поделиться на других сайтах
Ork Yason 8 Опубліковано: 2007-02-20 12:52:27 Share Опубліковано: 2007-02-20 12:52:27 есть более интересные варианты данные о пользователях дублируюся в БД при замене тарифа, запускается скрип, который собирает данные о всех пользователях, их тарифах, скоростях тарифов и создает скрипт для ТЦ с ХТБ, в котором делает полную нарезку с интернетового интерфейса... Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2007-02-20 18:04:41 Share Опубліковано: 2007-02-20 18:04:41 это хорошо на словах, если не жалко выложи своию наработку сюда думаю многие ей воспользуються потому как на эту тему вопросов очень много а готовое решение я видел только под freebsd Ссылка на сообщение Поделиться на других сайтах
S_ergey 21 Опубліковано: 2007-02-21 14:18:01 Share Опубліковано: 2007-02-21 14:18:01 Собрал ядро с поддержкой IMQ теперь можно шейпить на одном интерфейсе в обе стороны. Но к стг пока привязать немогу Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2007-02-21 22:16:49 Share Опубліковано: 2007-02-21 22:16:49 Правильнее всего разделить шейпинг входящего и исходящего потоков. Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2007-02-22 00:38:40 Share Опубліковано: 2007-02-22 00:38:40 это понятно что правильнее но вроде наткнулся на загнание в отдельную таблицу но пока не опробовал времени не хватает Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2007-02-22 06:31:26 Share Опубліковано: 2007-02-22 06:31:26 Без разделения на 2 канала на фряхе через dummynet нормального шейпинга не получится. Это я после некоторой *ботни определил. Ссылка на сообщение Поделиться на других сайтах
Xeddin 0 Опубліковано: 2007-02-22 08:19:02 Share Опубліковано: 2007-02-22 08:19:02 я сколько не пробовал на 5.4 динамический шейпинг делать, все криво получается. При увеличении толщины канала увеличиваются задержки. Буду PF + ALTQ шаманить. Как только будут приемлимые результаты - выложу. Ссылка на сообщение Поделиться на других сайтах
Ork Yason 8 Опубліковано: 2007-02-22 13:15:53 Share Опубліковано: 2007-02-22 13:15:53 это хорошо на словах, если не жалко выложи своию наработку сюда думаю многие ей воспользуютьсяпотому как на эту тему вопросов очень много а готовое решение я видел только под freebsd наработка - это куча переписанных скриптов СТГ, база данных под ФБ в которую пихается весь траффик, все сообщения логов, дублируются данные о пользователях, прикрученная веб-морда к базе, через которую смотрят свою статистику и пополняют карточки так что выкладывать тут нужно вагон и мальнькую тележку... Ссылка на сообщение Поделиться на других сайтах
S_ergey 21 Опубліковано: 2007-02-22 16:23:42 Share Опубліковано: 2007-02-22 16:23:42 Правильнее всего разделить шейпинг входящего и исходящего потоков. Так оно и делится imq0 входящий imq1 исходящий Ссылка на сообщение Поделиться на других сайтах
Keen 10 Опубліковано: 2007-03-14 20:42:35 Share Опубліковано: 2007-03-14 20:42:35 Подниму тему.... Возник следующий вопрос: Есть у меня 10 человек, которые берут канал по 32кбит/сек и качают фильмы одновременно. В случае примера, который привел p0int - не будет ли делится 32кбит на всех 10? Т.к. класс создается один. Ссылка на сообщение Поделиться на других сайтах
Sergek 123 Опубліковано: 2007-03-15 06:39:29 Share Опубліковано: 2007-03-15 06:39:29 Нареж каждому по 32к, тока не rate 32k, а типа rate 1k ceil 32k prio 5 Ссылка на сообщение Поделиться на других сайтах
Hunter13 0 Опубліковано: 2007-11-29 10:21:25 Share Опубліковано: 2007-11-29 10:21:25 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 в каждом классе) в классе? Ссылка на сообщение Поделиться на других сайтах
zacar 2 Опубліковано: 2007-11-30 13:24:32 Share Опубліковано: 2007-11-30 13:24:32 Народ у как добавить приоритизацию трафика? приоритет 1 - ssh приоритет 2 - UDP 5555 приоритет 3 - http & https приоритет 4 - ftp приоритет 5 - torrent, eDonKey ... (P2P вообщем) + весь остальной трафик Ссылка на сообщение Поделиться на других сайтах
Sergek 123 Опубліковано: 2007-11-30 17:41:13 Share Опубліковано: 2007-11-30 17:41:13 приоритет 5 - torrent, eDonKey ... (P2P вообщем) Тут придется Layer7 раскуривать, если предыдущее еще молжно портами вымаркировать, то тут все намного забористей Ссылка на сообщение Поделиться на других сайтах
zacar 2 Опубліковано: 2007-11-30 19:59:14 Share Опубліковано: 2007-11-30 19:59:14 для использования 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 народ ткните носом. Ссылка на сообщение Поделиться на других сайтах
fredik 0 Опубліковано: 2007-12-01 10:10:36 Share Опубліковано: 2007-12-01 10:10:36 вобщем автоматизировать ето все дело так не у кого и не получилось,да? приходится как всегда лезть на сервак и руками все править...или может ктото уже зделал себе?так может поделится с остальными... Ссылка на сообщение Поделиться на других сайтах
Maxxx 446 Опубліковано: 2007-12-03 23:10:24 Share Опубліковано: 2007-12-03 23:10:24 Народ, расскажите как сделать динамический шейпер, в зависимости от загрузки канала? Может кто знает или есть вебморда на шейпер по айпишкам например или что то в этом роде ? Может как то можно привязать к МРТЖ, что бы показывало загрузку канала определенным ипом и что бы его можно было подрезать =) Ссылка на сообщение Поделиться на других сайтах
point 0 Опубліковано: 2007-12-04 02:21:49 Share Опубліковано: 2007-12-04 02:21:49 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]; } } ?> вот моя реализация пашет на ура скорость выставляеться в зависимости от тарифа Ссылка на сообщение Поделиться на других сайтах
zacar 2 Опубліковано: 2007-12-05 12:09:33 Share Опубліковано: 2007-12-05 12:09:33 А как этот вариант ведет себя когда народ насидает торентами? судя по коду тут не получается организовать гарантированню пропускную способность для каждого юзера в момент когда работают одновременно (например) 20-25 пользователей (качают фильмы в p2p сетях в которых большое количесество одновременных соединений). Если я не прва не пинайте, а поподробнее раскажите что и как. Я не так давно сталкнулся с подобной проблемой. Ссылка на сообщение Поделиться на других сайтах
point 0 Опубліковано: 2007-12-05 13:15:35 Share Опубліковано: 2007-12-05 13:15:35 каждому юзеру выделяеться своя скорость Ссылка на сообщение Поделиться на других сайтах
Sergek 123 Опубліковано: 2007-12-05 20:11:44 Share Опубліковано: 2007-12-05 20:11:44 zacar А как ты всем даш гарантию? У нас например еслив сем выдать чесно то получится и 25мбит не хватит На практике доказано что в любой анлим из прайса рельно впихнуть троих т.к. есть обще известная статистика всегда онлайн 1/3 от всего количества Насчет торрентов и ТЦ была замечена такая фигня что иногда кто то прорывался сквозь шейпер и для этого человека скорость не зарезалась до рестарта скрипта! Вышли из положения - убрали sfq - стало жежще, но зато графики по ровнее. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас