LINUX.ORG.RU
ФорумAdmin

Шейпинг траффика «всем поровну»

 ,


1

2

Есть сетка, есть шлюз в ней, шлюз смотрит в Интернет (eth3) и в сетку (eth2). Количество компов в сетке величина переменная. Сидят в Интернете не все.
В идеале алгоритм такой:

  • компьютер подключается к сети, пытается выйти в интернет
  • если он один хочет в интернет, шлюз отдает ему всю ширину внешнего канала (2,4 МБит/с)
  • если вместе с ним хотят в интернет еще n компьютеров, то канал делится на n+1 равных частей, кои отдаются всем хотящим

Что нужно:

  • реализовать приведенный выше алгоритм на ubuntu server 12.04
  • избежать снижения скорости обмена между желающими в интернет компьютерами
  • ширина канала должна быть для всех протоколов без исключения (торренты в том числе)

Что мне не хватает:

  • достаточного знания iptables
  • времени и денег
★★★

Хм... если я не ошибаюсь, то iptables никак не поможет решить данную задачу. В лучшем случае он будет съедать часть пакетов (я имею ввиду limit или hashlimit), а это не только зарежет трафик, но и даст нестабильную связь пользователя с интернетом.

Тут, скорее нужен squid или еще какие-то утилиты о которых я не знаю.

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

хм, сейчас гляну.
а там есть про PCQ-очередь, или это только на микротиках?

kostett ★★★
() автор топика

ipfw рулит

ipfw pipe 1 config bw 3Mbit/s
ipfw pipe 2 config bw 3Mbit/s
ipfw queue 11 config pipe 1 weight 73 queue 25 mask src-ip 0xffffff00
ipfw queue 21 config pipe 2 weight 73 queue 25 mask dst-ip 0xffffff00

ipfw add queue 11 all from $clients to $internet out via $uplink
ipfw add queue 21 all from $internet to $clients int via $uplink

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

squid для неудачников, которые знают только о http

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

Почему не то? Не надо отдельно прописывать!

iptables -t mangle -I POSTROUTING -d $local_net -j MARK --set-mark 0x5

и норм, только для sfq надо поменять hash на dst_ip/src_ip в зависимости от направления трафика

Вот тут человек крутит sfq flow распределение нагрузки (комментарий)

hizel ★★★★★
()

добро пожаловать в шалаш упоротых наркоманов tc iproute2 =) только так ты можешь шейпить нормально трафик на линуксах.

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

/me прочитал тот тред, испугался обилия незнакомых слов, вспомнил что пятница сегодня, взял басуху и упер на репточку

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

koot@192.168.3.1's password:
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.5.0-23-generic i686)

oh, really?

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

ага, как подтверждение того, что Squid могет только хттп.. не подходит под первый пост, в общем

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

а дробное значение скорости нельзя указать?

В битах или кбитах можно. Например 2400Kbit/s .

и это все что ли?

Yep.

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

йоу, вот и пригодился ssh в n900) спасибо)

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

а что в переменные писать? $clients - eth3, ok $internet - eth2? $uplink - eth2? два одинаковых интерфейса или я нубло и ничего не понял?

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

$clients например — 192.168.0.0/24, $internet просто any, $uplink интерфейс в сторону интернетов

типа

ipfw add queue 11 all from 192.168.0.0/24 to any out via $uplink

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

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

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

окай..
кстати, мысль такая. Есть в этой доке пример -

# tc qdisc add dev ppp0 root sfq perturb 10
# tc -s -d qdisc ls
qdisc sfq 800c: dev ppp0 quantum 1514b limit 128p flows 128/1024 perturb 10sec 
 Sent 4812 bytes 62 pkts (dropped 0, overlimits 0)     
Он делит поровну между всеми пользователями весь канал. Так вот, могу ли я искусственно сузить ширину аплинка (eth2 в моем случае) и заюзать этот пример, заменив ppp0 на eth2? Если да, то как сузить при такой схеме сети?
eth2 - роутер и шлюз, 192.168.10.1/24 и 192.168.10.2/24 соответсвтенно, eth3 - остальные машины, 192.168.3.*/24

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

Он делит поровну между всеми пользователями весь канал. Так вот, могу ли я искусственно сузить ширину аплинка (eth2 в моем случае) и заюзать этот пример, заменив ppp0 на eth2?

да, я так делал, однако подробностей не помню, скастуй кого-нить, кто в курсе. Я не одмин.

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

схемы сети по ссылке нету, раз. я не великий спец в tc. там без бутылки водки не понять. а с водкой оно нафиг не надо -)))

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

окай.. но я вот пока так сделал -

sudo tc qdisc add dev eth4 root handle 1:0 tbf rate 3100kbit latency 70ms burst 100000sudo tc qdisc add dev eth4 parent 1:0 sfq perturb 10

на веб-страницах и торрентах все ОК, но вот качать что-то по http вообще невозможно, скорость через пару секунд падает до одного кб/с и меньше
хз уже куда копать

kostett ★★★
() автор топика
Последнее исправление: kostett (всего исправлений: 1)
Ответ на: комментарий от kostett

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

MikeDM ★★★★★
()

пока что так -

sudo tc qdisc add dev eth4 root handle 1: htb default 30
sudo tc class add dev eth4 parent 1: classid 1:1 htb rate 3mbit burst 15k
sudo sudo tc qdisc add dev eth4 parent 1:1 sfq perturb 10
вроде работает

kostett ★★★
() автор топика

пока что так -

sudo tc qdisc add dev eth4 root handle 1: htb default 30
sudo tc class add dev eth4 parent 1: classid 1:1 htb rate 3mbit burst 15k
sudo sudo tc qdisc add dev eth4 parent 1:1 sfq perturb 10
вроде работает

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