ipfw + очереди

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
d_e_v
проходил мимо

ipfw + очереди

Непрочитанное сообщение d_e_v » 2008-01-02 22:41:49

Доброго времени суток.
Есть интересная (на мой взгляд) задачка с которой нужно справится.. но у самого руки ладошками к верху :(
Итак Система 6.2, 2 интерфейса fxp0 и 1
Работает как роутер для Ного кол-ва машин допустим 10....
Приход ДСЛем т.е. есть еще tun0.
На роутере стоит торрент клиент с вебовской мордой и естесно постоянно что-то качает.
Так вот он умудряется выкушать весь канал при этом клиенты работают с ощутимыми тормозами.
Задача сделать очереди так что-бы при работе клиент получал все что можно а торрент что прийдется ну и при идле со стороны клиента торрент получал весь канал.
Во завернул.
Да у самого клиента возможности ограничивать весь траффик нету.. только конкретной закачки что не очень удобоваримо, ну и у торрент клиента есть список портов (мин и макс)
Что можно с таким вот поделать ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: ipfw + очереди

Непрочитанное сообщение dikens3 » 2008-01-02 23:56:54

Входящий трафик ограничивать не стоит.

А вообще, может torrent по времени ограничить? (ночью пусть качает, во внерабочее время)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

d_e_v
проходил мимо

Re: ipfw + очереди

Непрочитанное сообщение d_e_v » 2008-01-03 20:06:56

К сожалению ограничивать по времени немного не рационально (рейтинги и пр.) Да и время работы зверей сложно вписать в какие либо определенные рамки.
Неужто сия затея не возможна ?
:?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35437
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ipfw + очереди

Непрочитанное сообщение Alex Keda » 2008-01-03 20:09:26

ну, вообще думать надо в сторону dummynet; но я такого не делал - не подскажу....
Убей их всех! Бог потом рассортирует...

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: ipfw + очереди

Непрочитанное сообщение InventoR » 2008-01-03 20:51:04

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

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: ipfw + очереди

Непрочитанное сообщение terminus » 2008-01-03 21:08:52

Dummynet :)

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

Чтобы сделать приоритезацию трафика надо будет построить шейпер. Делается это с помошью dummynet. Правда он не включен по-умолчанию. Для его работы надо будет собрать свое ядро с такими опциями:

Код: Выделить всё

options         IPFIREWALL
options         DUMMYNET
options         HZ="1000"
После этого появляется новый функционал у ipfw - возможность строить pipe и queue.

Я сижу на DSL модеме с 2mbit/256kbit. Когда тестировал, то игрался я с этим так - построил один pipe с пропускной способностью 2mbit и две queue с "весами" 30 и 70 присоеденив их к этому pipe, а потом заварачивал трафик с двух разных ftp с которых я скачивал, для каждого в свой queue. Общая пропускная способность pipe - 2мбита или примерно 250 килобайт в секунду. Я замерял скорость скачки для каждого паралельного потока - она делилась в пропорции 30/70 - так как и должно было быть в соответсвии с указанными весами у тех queue которые я создал. Когда же оставался только один поток (если остановить вторую скачку) то он забивал весь канал - 2мбита! Как я понимаю это вам и надо?

Если по-простому, то настраевается это так:

Код: Выделить всё

# ipfw pipe 1 config bw 2Mbit/s
# ipfw pipe list
00001:   2.000 Mbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail

# ipfw queue 1 config weight 30 pipe 1
# ipfw queue 2 config weight 70 pipe 1
# ipfw queue list
q00001: weight 30 pipe 1   50 sl. 0 queues (1 buckets) droptail
q00002: weight 70 pipe 1   50 sl. 0 queues (1 buckets) droptail

# ipfw pipe list
00001:   2.000 Mbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
q00001: weight 30 pipe 1   50 sl. 0 queues (1 buckets) droptail
q00002: weight 70 pipe 1   50 sl. 0 queues (1 buckets) droptail
А теперь задача "завернуть" тот трафик который надо шейпить, в его очередь:

Код: Выделить всё

# ipfw add 90 queue 1 ip from 212.70.161.26 to me
# ipfw add 95 queue 2 ip from  77.234.201.243 to me
# ipfw list

00090 queue 1 ip from 212.70.161.26 to me
00095 queue 2 ip from 77.234.201.243 to me
00100 check-state
00200 allow ip from any to any via lo0
00300 allow icmp from me to any out keep-state
00400 allow tcp from me to any out keep-state
00500 allow udp from me to any out keep-state
65535 deny ip from any to any

(я тут снизил скорость pipe до 200Kbit/s)

# ipfw pipe list 
00001: 200.000 Kbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
q00001: weight 30 pipe 1   50 sl. 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp    212.70.161.26/21       78.84.205.90/62781  626   805157 22 33000   0
q00002: weight 70 pipe 1   50 sl. 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp   77.234.201.243/21       78.84.205.90/56649  152   130487  1 1500   0
Еще один момент - надо через sysctl выставить net.inet.ip.fw.one_pass: 0 - это необходимо чтобы пакеты завернутые в dummynet потом возвращались обатно в фаервол.

Собственно 70% информации вам рассказано - дальше вам же самому будет интереснее, если решите свою проблему сами :) Как уж вы будете отлавливать трафик торрента и трафик пользователей и заварачивать каждый на свой queue - решать вам :P


*подсказка*

На счет идентификации трафика torrent клиента: он ведь у вас работает не от root ? ipfw умеет идентифицировать трафик не только по номерам портов и IP, но и по id пользователя - выкусить трафик торрент клиента можно будет таким способом :)
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.