QoS, локальный трафик

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

QoS, локальный трафик

Сообщение zerkms »

Здравствуйте господа (сразу оговорюсь - о qos знаю мало, только то, что успел прочитать за день)

Ситуация: есть линукс-роутер (генту) и клиент. соединены между собой свитчем, который также является дсл-модемом (4портовый дслмодем)
до интернета через pppoe дозванивается линукс, клиент ходит через линукс через нат в интернет
также на сервере установлен rtorrent.

Необходимо: допустив, что исходящие соединения торрента (скачивание) находятся в диапазоне OUT dport 1025 - 65535 - назначить им минимальный приоритет. а трафику клиентской машины - максимальный. чтобы клиент минимально страдал от торрента на сервере.
насколько я прочитал про HTB - приоритеты клиента настраиваются хорошо, а вот локальный трафик сервера порезать по приоритетам не получится, т.к. он навешивается на PREROUTING или OUTPUT цепочки, а не на требуемую INPUT.

как быть?
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: QoS, локальный трафик

Сообщение rm_ »

Необходимо: допустив, что исходящие соединения торрента (скачивание) находятся в диапазоне OUT dport 1025 - 65535 - назначить им минимальный приоритет. а трафику клиентской машины - максимальный. чтобы клиент минимально страдал от торрента на сервере.

Вы ошибаетесь, если считаете, что торрент-клиент скачивает данные только через свои исходящие соединения.
Самый простой в настройке вариант - поставить между торрент-клиентом и Интернетом промежуточный роутер, который будет получать трафик из Интернета на полной скорости, после чего резать скорость его отдачи в локалку с помощью tc.
Более сложный - разобраться с настройкой Linux IMQ: http://www.linuximq.net/faq.html
И поищите на этом форуме, только по слову не QoS, а shaping (шейпинг).
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

rm_ писал(а):
21.01.2009 08:31
Вы ошибаетесь, если считаете, что торрент-клиент скачивает данные только через свои исходящие соединения.

угу, немного не учёл этого.....
rm_ писал(а):
21.01.2009 08:31
Самый простой в настройке вариант - поставить между торрент-клиентом и Интернетом промежуточный роутер, который будет получать трафик из Интернета на полной скорости, после чего резать скорость его отдачи в локалку с помощью tc.

я как раз и ставлю роутер, чтобы туда вынести винты, торрент и прочее, чтобы разгрузить локальную тачку. а роутер для роутера это уже слишком :-)
за ссылку и намёк на шейпер мерси - счас буду искать.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: QoS, локальный трафик

Сообщение rm_ »

zerkms
У меня примерно такая же конфигурация - всё вынесено на сервер, на локальной же машине - клиент удалённого рабочего стола к этому серверу (NX, либо VNC), игрушки, видеоплеер (само собой), и... больше ничего. :)
Раньше стоял помимо этого и отдельный роутер, как раз для описанного выше шейпинга трафика, и чтобы крутить там мелкие сетевые сервисы.
Но с недавнего времени роутер я убрал, и теперь в общем-то тоже, ищу решение описанной Вами проблемы.
IMQ выглядит как "то, что доктор прописал", но обмазывать ядро несвежими патчами (2.6.25 vs 2.6.28? и iptables тоже пересобирать) представляется грустным занятием, так что пока плюнул на это, и обхожусь ручным лимитированием скорости в торрент-клиенте, на уровне 70-80% от максимальной пропускной способности канала.
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

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

[offtopic]
а у вас торрент-клиент на роутере какой? rtorrent? ;-)
[offtopic]
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: QoS, локальный трафик

Сообщение rm_ »

zerkms
а у вас торрент-клиент на роутере какой? rtorrent? ;-)

Я не называю тот компьютер роутером, скорее у меня это сервер, предоставляющий "перманентный десктоп", круглосуточно существующий вне зависимости от подключенности к нему NX/VNC-просмотрщиков. Соотв-но весь GUI-софт крутится там, и торрент-клиент - Azureus (которым иногда рулю и через его web-интерфейс).
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

понятно :-)

резюмируем: дешевле настроить ограничение в rtorrent (<свой клиент>) скорости по расписанию и/или вручную делать это :-)
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: QoS, локальный трафик

Сообщение rm_ »

резюмируем: дешевле настроить ограничение в rtorrent (<свой клиент>) скорости по расписанию и/или вручную делать это :-)

Ну да...
Но правильнее было бы разобраться-таки с IMQ и написать простой и подробный howto по настройке (или некий скрипт, который будет её сильно автоматизировать).
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

думается, что моих знаний в сетевых делах линукса не хватит реализовать и написать что-то внятное, потому что я не сисадмин :-) а линукс для меня десктоп на работе, и скорее игрушка :-)
а вот если бы кто-то из гуру сделал - тогда да....
ps: странно что на офсайте IMQ всё так скудненько описано...
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: QoS, локальный трафик

Сообщение rm_ »

моих знаний в сетевых делах линукса не хватит реализовать и написать что-то внятное

Да это так, мысли вслух. Я и не говорю, что именно Вам нужно этим заняться. Возможно - мне, возможно - кому-нибудь ещё.
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

собственно, товарищи потомки, если вы читаете это сообщение и внятный howto по IMQ уже написан - сделайте теме, пожалуйста, up с линком (на почту я подписан) :-)
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

[fun]
мозговой штурм с коллегами родил следующее решение:
на локальной тачке запускается приложение (для простоты и кросплатформенности написанное на питоне). висит в трее, по клику показывает слайдер с нужной скоростью. на сервере по крону раз в минуту запускается такой же питоновский скрипт, который коннектится к клиентскому "виджету" и выставляет нужную скорость rtorrent'у :-)
[fun]
Спасибо сказали:
Аватара пользователя
zerkms
Сообщения: 155
ОС: Gentoo, Windows 7 Home Premium

Re: QoS, локальный трафик

Сообщение zerkms »

написал примитивный скрипт, который по трафику на цепочке FORWARD принимает решение по изменению скорости рторрент'а

Код:

#!/usr/bin/php <?php /** * Script for automatic rtorrent speed limitations using FORWARD iptables chain * @author zerkms */ chdir(dirname(__FILE__)); define('MAX_UL_RATE', 60); define('MAX_DL_RATE', 60); define('PATH', '/RPC2'); define('HOST', '192.168.0.100'); define('PORT', 80); define('DELTA', 5); define('PERIOD', 5); define('STAT_FILE', './iptables.forward'); require_once 'xmlrpc.inc.php'; class rtorrent { private $client; public function __construct() { $this->client = new xmlrpc_client(PATH, HOST, PORT); } public function setDownloadRate($rate) { $message = new xmlrpcmsg("set_download_rate", array(new xmlrpcval($rate * 1024, 'int'))); $this->client->send($message); } public function setUploadRate($rate) { $message = new xmlrpcmsg("set_upload_rate", array(new xmlrpcval($rate * 1024, 'int'))); $this->client->send($message); } } // get the data from iptables exec('sudo /sbin/iptables -L FORWARD -n -v -x', $result); // parse in and out traffic preg_match('/\d+\s+(\d+)/', $result[2], $matches); $in = (double)$matches[1]; preg_match('/\d+\s+(\d+)/', $result[3], $matches); $out = (double)$matches[1]; $history = array(); if (is_file(STAT_FILE)) { $history = unserialize(file_get_contents(STAT_FILE)); } // delete old bandwidth history records while (sizeof($history) >= PERIOD + 1) { array_shift($history); } // append the history array to PERIOD (if the file is created right now) while (sizeof($history) < PERIOD) { $history[] = array(0, 0); } $history[] = array($in, $out); file_put_contents(STAT_FILE, serialize($history)); // calculate the speed between this time and 5 minutes ago $speed_in = ($history[PERIOD][0] - $history[0][0]) / 1024 / 60 / PERIOD; $speed_out = ($history[PERIOD][1] - $history[0][1]) / 1024 / 60 / PERIOD; $rtorrent = new rtorrent(); // if it's some inbound traffic - set the limitations to rtorrent if ($speed_in > 3) { $rtorrent->setDownloadRate(MAX_DL_RATE - $speed_in - DELTA); } else { $rtorrent->setDownloadRate(0); } // if it's some outbound traffic - set the limitations to rtorrent if ($speed_out > 3) { $rtorrent->setUploadRate(MAX_UL_RATE - $speed_out - DELTA); } else { $rtorrent->setUploadRate(0); } return 0;
Спасибо сказали: