вообщем имеется debian с 2-мя сетевыми интерфейсами,один получает интернет eth0,другой раздает на несколько компьтеров eth1,стоит dhcp сервер,интренет раздается простым способом
#############################
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
###############################
понадобилось урезать исходящую и входящую скорость каждому компьютеру в 1024 кбит,
нашел скрипт
###############################
#!/bin/sh
#
# Simple init.d shell script that can to modified to fit your favorite distro
#
# All Rates are in Kbits, so in order to gets Bytes divide by 8
# e.g. 25Kbps == 3.125KB/s
#
TC=/sbin/tc
DNLD=1024Kbit # DOWNLOAD Limit
DWEIGHT=1024Kbit # DOWNLOAD Weight Factor ~ 1/10 of DOWNLOAD Limit
UPLD=1024KBit # UPLOAD Limit
UWEIGHT=1024Kbit # UPLOAD Weight Factortc_start() {
$TC qdisc add dev eth1 root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64
$TC class add dev eth1 parent 11:0 classid 11:1 cbq rate $DNLD weight $DWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth1 parent 11:0 protocol ip handle 4 fw flowid 11:1$TC qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64
$TC class add dev eth0 parent 10:0 classid 10:1 cbq rate $UPLD weight $UWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth0 parent 10:0 protocol ip handle 3 fw flowid 10:1
}tc_stop() {
$TC qdisc del dev eth1 root
$TC qdisc del dev eth0 root
}tc_restart() {
tc_stop
sleep 1
tc_start
}tc_show() {
echo ""
echo "eth0:"
$TC qdisc show dev eth0
$TC class show dev eth0
$TC filter show dev eth0
echo ""echo "eth1:"
$TC qdisc show dev eth1
$TC class show dev eth1
$TC filter show dev eth1
echo ""
}case "$1" in
start)
echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;stop)
echo -n "Stopping bandwidth shaping: "
tc_stop
echo "done"
;;restart)
echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
;;show)
tc_show
;;*)
echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
;;
esacexit 0
###########################
маркировка пакетов
###########################
iptables -t mangle -A FORWARD -s 192.168.1.0/24 -j MARK --set-mark 3
iptables -t mangle -A FORWARD -s ! 192.168.1.0/24 -d 192.168.1.0/24 -j MARK --set-mark 4
###########################
в итоге получилось что это 1024 кбит делятся между всеми компьтерами,а нужно чтоб у каждого было 1024 кбита,помогите пожалуйста это реализовать
А сколько dhcp клиентов? Если не много то может быть легче попробывать реализовать это с помощью cbq?
скачайте вот от сюда https://sourceforge.net/projects/cbqinit
кидаем скрипт в /etc/init.d/
далее в /etc/sysconfig создаём (если её там нет) директорию cbq
туда кидаем файлики c именами типа cbq-1001.user1DOWN
в нем
DEVICE=eth1,100Mbit,10Mbit
RATE=1024Kbit
WEIGHT=128Kbit
PRIO=5
RULE=192.168.0.1/32
далее если нужно ограничить и исходящий трафик то можно маркировать все пакеты через iptables в цепочке mangle вот такiptables -t mangle -A FORWARD -s 192.168.0.1 -j MARK --set-mark 1001
и также создать еще один файл в /etc/sysconfig/cbq cbq-1002.user1UP следующего содержания
DEVICE=eth0,100Mbit,10Mbit
RATE=1024Kbit
WEIGHT=128Kbit
BOUNDED=yes
PRIO=5
MARK=1001далее делаем
/etc/init.d/cbq.init compile
/etc/init.d/cbq.init start
вставляем это в автозагрузку.
В данном примере eth1 локалка eth0 интерфейс каторый смотри в инет.
И так для каждого клиента.Возможно и есть вариант указать в конфиге чтоб он сразу на всю сеть одним правилом ограничел для каждого компа но я такого варианта незнаю(пусть подправят меня гуру).Если ваш диапазон ip адресов выдаваемых dhcp сервисом не очень большой то попробуйте данную схему.
диапазон не большой,спасибо,сейчас попробую
попробывал,все сделал как вы написали,опять при проверке 1024 кбит делится на 2(проверял на 2 машинах )результат тот же,в чем может быть ошибка?
>попробывал,все сделал как вы написали,опять при проверке 1024 кбит делится на 2(проверял
>на 2 машинах )результат тот же,в чем может быть ошибка?а сколько у вас входящий канал? и проверьте конфиги номер правил должны быть разные вот пример имен
cbq-1001.user1DOWN
cbq-1002.user1UP
cbq-1003.user2DOWN
cbq-1004.user2UP
cbq-1005.user3DOWN
cbq-1006.user3UP
и т.д
эта связка 100% рабочая посмотрите что выдает после /etc/init.d/cbq.init compiler и restart ???
видимо потому что я назвал файлы неправильно
cbq-1001.user1DOWN
cbq-1001.user1UP
cbq-1001.user2DOWN
cbq-1001.user2UP
cbq-1001.user3DOWN
cbq-1001.user3UP
>видимо потому что я назвал файлы неправильно
>cbq-1001.user1DOWN
>cbq-1001.user1UP
>cbq-1001.user2DOWN
>cbq-1001.user2UP
>cbq-1001.user3DOWN
>cbq-1001.user3UPисправили заработало?
>исправили заработало?да заработало,большое спасибо
а можно выставить разную скорость на разные ресурсы?
>а можно выставить разную скорость на разные ресурсы?конечно можно вот лучше сразу прочитайте ато обьяснять у меня хуже получаеться чем делать) http://www.opennet.me/base/net/cbq_rus.txt.html
там много что еще можно рад был памочь.
посмотрите на правильном ли я пути,допустим весь интернет нужно ограничить 1024 кб а определенный диапазон к примеру(91.151.254.0/26)10 мбит,я создаю правила
####################
cbq-1001.user1(1Mbit)DOWN
####################
DEVICE=eth1,100Mbit,10Mbit
RATE=1024Kbit
WEIGHT=128Kbit
PRIO=5
RULE=192.168.1.50/32
####################
cbq-1002.user1(10Mbit)DOWN
DEVICE=eth1,100Mbit,10Mbit
RATE=10Mbit
WEIGHT=1Mbit
PRIO=5
RULE=192.168.1.50/32,91.151.254.0/26
#####################
получится так или нет?
>[оверквотинг удален]
>RULE=192.168.1.50/32
>####################
>cbq-1002.user1(10Mbit)DOWN
>DEVICE=eth1,100Mbit,10Mbit
>RATE=10Mbit
>WEIGHT=1Mbit
>PRIO=5
>RULE=192.168.1.50/32,91.151.254.0/26
>#####################
>получится так или нет?вроде все правильно но лучше поменяйте правила местами тот что был 1001 сделайте 1002 и наоборот 1002 в 1001 кароче сначала обрежте на 10метров а вторым правилом на 1м.
а не получится что обрезанием на 1м,обрежется все
>а не получится что обрезанием на 1м,обрежется всепроверил так и получилось,попробывал наоборот результат тот же,обрезается все 1м...
>>а не получится что обрезанием на 1м,обрежется все
>
>проверил так и получилось,попробывал наоборот результат тот же,обрезается все 1м...проведитн краш тест будет видно = ) но по идеи недолжно
>>>а не получится что обрезанием на 1м,обрежется все
>>
>>проверил так и получилось,попробывал наоборот результат тот же,обрезается все 1м...
>
>проведитн краш тест будет видно = ) но по идеи недолжноя попробывал оба варианта,сначало резать 10 потом 1 и наоборот,все равно все 1 ограничивается ((....
>>>>а не получится что обрезанием на 1м,обрежется все
>>>
>>>проверил так и получилось,попробывал наоборот результат тот же,обрезается все 1м...
>>
>>проведитн краш тест будет видно = ) но по идеи недолжно
>
>я попробывал оба варианта,сначало резать 10 потом 1 и наоборот,все равно все
>1 ограничивается ((....попробуйте для того айпи каторому нужно дать 10 метров создать отдельное правила на исходящем интерфейсе
>попробуйте для того айпи каторому нужно дать 10 метров создать отдельное правила
>на исходящем интерфейсевозможно мы друг друга не понимаем,мне нужно к определенным сетям ограничить скорость в 10 метров а ко всем остальным в 1м
не проще было бы просто всё через tc написать ?
(а то этот огород городить жуть) .
>не проще было бы просто всё через tc написать ?
>(а то этот огород городить жуть) .подскажите пожалуйста как это реализовать на примере
кто нибудь может помоч?