LINUX.ORG.RU
ФорумAdmin

peer-to-peer достал 2


0

0

Т.к. та тема уже утонула, то отпишусь дальше о результатах и проблемах:
(источник темы тут http://www.linux.org.ru/view-message.jsp?msgid=2192196&nocache=1608641448... )
roy - респект, идея работает но я не могу с ней справиться.
Во первых как маркирую :
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p -j MARK --set-m
ark 11
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j CONNMARK -
-save-mark
В результате все пакеты выходящие с интерфейса eth1 ( который смотрит во внутрь сети) промаркированы и их можно ограничить.
И так работает скрипт htb.init
и режет каждого в 512 кбит
Грубо созданы файлы eth1 , eth1-1010.all , eth1-1011.all и тд по порядку где в каждом стоит скорость 512 кбит для каждого ип. Т.е каждый качает максимум 512 кбит. Ну... если канал забивается скорость падает у всех, ну и ладно. Просто причина забивания халявный пиринг ;)
Запускаем ваш пример команд tc:
Эту команду опускаем т.к. htb.init ее уже создал:
tc qdisc add dev eth1 root handle 1: htb
Добавляем класс с нужной скоростью:
tc class add dev eth1 parent 1: classid 1:1 htb rate 2048kbit
(решил попробывать 2 мега на всех)
Добавляем фильтр:
tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 11 fw flowid 1:1
И... работает, но не правильно !!!
Любой человек из списка eth1-10**.all получает свою скорость которая ему выставлена и плюс к ней (!!!) 2 мбита пиринга если никто не качает. Итого теоретически 1 человек имеет шанс получить 2+0.5 Мбит скорости. Однако это не верно для поставленной задачи!
Дальше решил поступить как по аналогии в примере htb.init:
примерно так:
--------------------------------------------
eth1 eth1-2.root eth1-2:10.all
---- ----------- -------------
DEFAULT=300 RATE=5Mbit RATE=2Mbit
BURST=15k BURST=15k
LEAF=sfq
MARK=11


---------------- --------------
eth0-2:20.all eth0-2:30.all
-------------- -------------
RATE=512Kbit RATE=512Kbit
CEIL=512Kbit CEIL=512Kbit
BURST=15k BURST=15k
LEAF=sfq LEAF=sfq
RULE=1.2.3.20 RULE=1.2.3.30

ИТД....

anonymous

===================
Пришлось в настройках htb.init покапаться кстати и изменить что бы вышло вот так:
### Default filter priorities (must be different)
PRIO_RULE_DEFAULT=${PRIO_RULE:-200}
PRIO_MARK_DEFAULT=${PRIO_MARK:-100}
Иначе маркированые пакеты шли ПОСЛЕ RULE для ип адресов в списке - и никак не ограничивались в результате
===================

И таже фигня.
2 мбита пиринга любому если он один
и в добавок радость качнуть с веба полмега.

Поэтому я чтото совсем заплутал в классах :( И вобще как такое организовать:
2 мега на всех , НО каждому 512 общего трафика в котором эти 2 мега на всех.
Т.е. если никто не качает то один получит 512 максимум пиринга, если все качают одновременно то пиринг максимум разгоняется до 2 мбит на всех, т.е. в реальности какая то малая часть скорости от 512 задействуется.
В результате я "соображу" некий QoS для трафика.

Я никак не догоняю как сделать такое ?

Общий канал 5 мбит на всех, в нем только 2 мбита пиринга и со всей этой каши только 512кбит каждому максимума ЛЮБОГО трафика.

ЧИТАЮ:
http://www.metincom.net/linux/howtos/LARTC-linux_advanced_routing_traffic_con...

НО НЕ МОГУ ПОНЯТЬ КАК ЖЕ ЭТО ОРГАНИЗОВАТЬ !?

Парадокс я так понимаю заключается в том что промаркированый трафик выходит с eth1 и в случае срабатывания ограничения этого трафика, дальнейшее его ограничение в 512 кбит не возможно ??? Но ведь linux на то и линукс что бы не заниматься фигней с "понатыкиванием по кампу для каждого проходящего типа трафика" ?
Подскажите, гуру, КАК это организовать ?

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

Я наверно упустил - фильтр, который определяет, что трафик принадлежит p2p - должен быть первый. Т.е. если трафик п2п - на нем выставлена метка - он сразу заворачивается в класс, где 512 общая на всех скорость, если трафик не п2п - он идет дальше по фильтрам, находит тот, чей ип совпадает, и идет в соответсвующий класс на 2 мегабита.

Если у вас так и не работает - приведите пример скриптов, которые запускаете для настройки htb (eth1-1010.all к примеру) и в каком порядке вы их запускаете.

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

Вот на чем я остановился что 100% работает , но это только частичное решение:
файлы для htb.init:

"eth1"
DEFAULT=30
R2Q=6

"eth1-2.root"
RATE=5Mbit
CEIL=5Mbit
BURST=15k

"eth1-2:11"
RATE=2Mbit
CEIL=2Mbit
BURST=15Kbit
MARK=11

"eth1-2:30"
RATE=3Mbit
CEIL=3Mbit
BURST=15k

На этом пока всё, в результате на весь пиринг 2 мбита, на все остальное + 3 мбита к пирингу.

Теперь как сделать для ип адреса ,например 1.2.3.30, что бы его ограничить максимум в 512 кбит для всех случаев, и при этом работало верхнее "ограничение на всех". Т.е. получился бы общий канал в 2 мб на пиринг и 3 мега всего остального.

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

AFAIR sfq делит полосу между соединениями, которых любая пиринговая прога создаёт миллион. Попробуйте esfq, (когда-то был в patch-o-matic, потом, кажется, был включён в ядро)

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

Увы SFQ или без него результат один, разница лишь в том что из практической эксплуатации SFQ не дает возможности забить сразу выделенный (ячейку) канал по максимуму, т.е. потребляемая скорость стремиться к выставленой и достигает ее с нагрузкой больше чем просто скачать файл в один поток. Замерено iptrafom и часами возни с попыткой ограничить трафик как мне нужно. Грубо - используя SFQ вы получите рост пинга до приемлемых 30 мс с 2 мс качая файл с вебсайта нежели без SFQ больше 200 мс в зависимости от того на сколько малая/большая выставленная скорость.

Увы , я пришел к выводу что поставленная мною задача не выполнима.

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

Увы, придеться использовать 2 машины , одна - каждому своя скорость, вторая - этакий QoS, заодно можно будет заняться выделением части полосы и для более высокоприоритетного трафика - игры и тд.

Увы увы.

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

Или в линуксе существует некий набор команд который позволяет ограничить трафик между ETH0 и ETH1 , т.е. не исх трафик с ETH1 а до него , и если такое есть, то можно будет промаркированый трафик ограничить на всех некоей дисциплиной до ETH1, а уже на самом ETH1 выставить скорость каждому сколько нужно.

Такое существует ???

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

До интерфейса ETH0 при помощи IMQ не предлагать.

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