LINUX.ORG.RU
ФорумAdmin

Ограничение трафика


0

0

Есть два компа - один выходит через другой в интернет по NAT. Но так как первый жрёт слишком много трафика, через второй в инет не пробиться. Поэтому такая задача есть - ограничить скорость первого компа. Сейчас делаю это с помощью rshaper для ядра 2.6.24, но оно уже достаточно устарело и не поддерживает новую веб-камеру. Так что приходится обновить ядро, а замены rshaper'у для него нету. Между тем, вникать в HTB, CFQ и прочие термины не хочется - компы домашние и такие вещи для крупных сетей на них не нужны.

Думаю, вопрос уже понятен - как ограничить трафик первому компу, пользуя настройки второго? На первом - венда, и народ совершенно не понимает зачем им ограничивать скорости своим торрентам, а мне бегать ограничивать уже надоело. Может есть новые версии rshaper'а или какие-нибудь подобные аналоги?

anonymous

> Между тем, вникать в HTB, CFQ и прочие термины не хочется

Да что там вникать-то? 1 строчка для ограничения на интерфейс или 3 для ограничения на IP... Здесь были примеры, поищи.

Или если тема будет интересна ещё 1 день, то завтра выложу сюда эти чудо-строчки.

anonymous
()
Ответ на: комментарий от anonymous

> А динамически скорость можно менять так?

Iptables проверяет что куда, помечает пакеты, tc по этим отметкам зарезает скорость куда надо. Может и силами одного tc можно, не пробовал...

anonymous
()

вот поэтому винадмины любят фрибсд и циско, там это одной командой и вникать не надо

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

Я это уже понял. :) Но фрибзд для дома - пока ещё рановато. :)

anonymous
()
Ответ на: комментарий от dimon555

> вот поэтому винадмины любят фрибсд и циско, там это одной командой и вникать не надо

"винадмин", но iptables мне кажется намного более понятным и интуитивным, чем pf, и уж тем более чем ios. Хотя iptables более низкоуровневый, да.

anonymous
()
Ответ на: комментарий от anonymous

А вот и я, раз вчера обещал.

Ограничение на интерфейс:

#!/bin/sh
lan=eth0
tc=`which tc`
$tc qdisc del dev $lan root
$tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate 2048kbps

Ограничение на IP/подсеть:

#!/bin/sh
lan=eth0
tc=`which tc`
$tc qdisc del dev $lan root
$tc qdisc add dev $lan root handle 1: htb default 3
$tc class add dev $lan parent 1: classid 1:1 htb rate 2048kbit
$tc class add dev $lan parent 1:1 classid 1:2 htb rate 2024kbit ceil 2048kbit prio 1
$tc class add dev $lan parent 1:1 classid 1:3 htb rate 24kbit ceil 2048kbit prio 2
$tc filter add dev $lan protocol ip parent 1: u32 match ip dst 192.168.0.0/24 flowid 1:2


Ну и наконец применение ограничителя по отметке (MARK) проставленной при помощи iptables:

#!/bin/sh
lan=eth0
tc=`which tc`
$tc qdisc del dev $lan root
$tc qdisc add dev $lan root handle 1: htb default 1
$tc class add dev $lan parent 1: classid 1:1 htb rate 80mbit
$tc class add dev $lan parent 1:1 classid 1:2 htb rate 1kbit
$tc filter add dev $lan parent 1:0 protocol ip handle 1 fw flowid 1:2

iptables -t mangle -A POSTROUTING -o $lan -m iprange --src-range 192.168.0.20-192.168.0.30 -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -o $lan -m iprange --src-range 192.168.0.20-192.168.0.30 -j RETURN


Чтобы было понятнее:

qdisc - просто выбор способа ограничения скорости. У способа "TBF", например, нет никаких дополнительных правил, он сразу применяется к сетевому интерфейсу целиком и там же сразу задаётся ограничение скорости.

class - каналы с опр. скоростью (rate,ceil), нарезанные способом, заданным в qdisc. Отращивать их "деревом" как в вышеприведённых примерах один от другого совершенно не обязательно, можно везде ставить "parent 1:" и т.д.

filter - по определённому признаку (u32, fw) выбирается, что соединение такое-то будет пользоваться каналом (flowid, он же class) таким-то, т.е. будет соответствующим образом ограничено в скорости.

У filter есть ещё миллион параметров, но это уже сам читай-гугли,если интересно.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, поковыряюсь. В принципе да, довольно интересно. :)

anonymous
()
Ответ на: комментарий от anonymous

> "винадмин", но iptables мне кажется намного более понятным и интуитивным, чем pf, и уж тем более чем ios. Хотя iptables более низкоуровневый, да.

первый раз слышу, чтобы iptables нравился больше pf. и, кстати, когда говорят про "одной командой вникать не надо", имеют ввиду не pfс его навороченным altq, а простенький ipfw с dummynet

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

> Первый раз слышу, чтобы iptables нравился больше pf

Ну это кто с чего начинал, видимо. Я к сетям сколько-нибудь серьёзно прикоснулся впервые именно через Linux и именно его сетевые приблуды. Потом сталкивался и со всем остальным, но iptables уже "прилип к пальцам".

> кстати, когда говорят про "одной командой вникать не надо", имеют ввиду не pfс его навороченным altq, а простенький ipfw с dummynet

Хм... /etc/pf.conf и всякие "on rtk0 pass inet any to any" это кто из них? Я под pf имел в виду именно это.

anonymous
()
Ответ на: комментарий от anonymous

/etc/pf.conf - это, разумеется, pf. но вот только на пф никто такого бреда, как вы написали, не пишет. подозреваю, что то, что вы имели ввиду, на пф будет:
pass on rkt0
(inet по вкусу), и да, это все будет statefull filtration
у тебя вышла каша из ипфв и пф. синтаксис пф - одно из главных его приемуществ.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

> pass on rkt0

Я написал по памяти практически то, что прописано на работающей машине с фряхой. Именно в pf.conf и именно с "any to any".

anonymous
()
Ответ на: комментарий от anonymous

ты, конечно, можешь писать в конфиге что хочешь. только вот это не делает пф плохим, это выставляет тебя дураком. если ты напишешь в консоли sudo rm -fr / , то это что, линукс (бсд) такой плохой?

val-amart ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.