Здравствуйте господа (сразу оговорюсь - о qos знаю мало, только то, что успел прочитать за день)
Ситуация: есть линукс-роутер (генту) и клиент. соединены между собой свитчем, который также является дсл-модемом (4портовый дслмодем)
до интернета через pppoe дозванивается линукс, клиент ходит через линукс через нат в интернет
также на сервере установлен rtorrent.
Необходимо: допустив, что исходящие соединения торрента (скачивание) находятся в диапазоне OUT dport 1025 - 65535 - назначить им минимальный приоритет. а трафику клиентской машины - максимальный. чтобы клиент минимально страдал от торрента на сервере.
насколько я прочитал про HTB - приоритеты клиента настраиваются хорошо, а вот локальный трафик сервера порезать по приоритетам не получится, т.к. он навешивается на PREROUTING или OUTPUT цепочки, а не на требуемую INPUT.
как быть?
QoS, локальный трафик
Модераторы: SLEDopit, Модераторы разделов
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: QoS, локальный трафик
Необходимо: допустив, что исходящие соединения торрента (скачивание) находятся в диапазоне OUT dport 1025 - 65535 - назначить им минимальный приоритет. а трафику клиентской машины - максимальный. чтобы клиент минимально страдал от торрента на сервере.
Вы ошибаетесь, если считаете, что торрент-клиент скачивает данные только через свои исходящие соединения.
Самый простой в настройке вариант - поставить между торрент-клиентом и Интернетом промежуточный роутер, который будет получать трафик из Интернета на полной скорости, после чего резать скорость его отдачи в локалку с помощью tc.
Более сложный - разобраться с настройкой Linux IMQ: http://www.linuximq.net/faq.html
И поищите на этом форуме, только по слову не QoS, а shaping (шейпинг).
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
угу, немного не учёл этого.....
я как раз и ставлю роутер, чтобы туда вынести винты, торрент и прочее, чтобы разгрузить локальную тачку. а роутер для роутера это уже слишком :-)
за ссылку и намёк на шейпер мерси - счас буду искать.
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: QoS, локальный трафик
zerkms
У меня примерно такая же конфигурация - всё вынесено на сервер, на локальной же машине - клиент удалённого рабочего стола к этому серверу (NX, либо VNC), игрушки, видеоплеер (само собой), и... больше ничего.
Раньше стоял помимо этого и отдельный роутер, как раз для описанного выше шейпинга трафика, и чтобы крутить там мелкие сетевые сервисы.
Но с недавнего времени роутер я убрал, и теперь в общем-то тоже, ищу решение описанной Вами проблемы.
IMQ выглядит как "то, что доктор прописал", но обмазывать ядро несвежими патчами (2.6.25 vs 2.6.28? и iptables тоже пересобирать) представляется грустным занятием, так что пока плюнул на это, и обхожусь ручным лимитированием скорости в торрент-клиенте, на уровне 70-80% от максимальной пропускной способности канала.
У меня примерно такая же конфигурация - всё вынесено на сервер, на локальной же машине - клиент удалённого рабочего стола к этому серверу (NX, либо VNC), игрушки, видеоплеер (само собой), и... больше ничего.
Раньше стоял помимо этого и отдельный роутер, как раз для описанного выше шейпинга трафика, и чтобы крутить там мелкие сетевые сервисы.
Но с недавнего времени роутер я убрал, и теперь в общем-то тоже, ищу решение описанной Вами проблемы.
IMQ выглядит как "то, что доктор прописал", но обмазывать ядро несвежими патчами (2.6.25 vs 2.6.28? и iptables тоже пересобирать) представляется грустным занятием, так что пока плюнул на это, и обхожусь ручным лимитированием скорости в торрент-клиенте, на уровне 70-80% от максимальной пропускной способности канала.
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
тоже посмотрел на imq - добавление нового уровня абстракции в маршрут между интернетом и клиентом - боюсь просто, что запутаюсь и не смогу настроить. вероятно просто также придётся вручную изменять скорость - дешевле обойдётся.
[offtopic]
а у вас торрент-клиент на роутере какой? rtorrent? ;-)
[offtopic]
[offtopic]
а у вас торрент-клиент на роутере какой? rtorrent? ;-)
[offtopic]
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: QoS, локальный трафик
zerkms
Я не называю тот компьютер роутером, скорее у меня это сервер, предоставляющий "перманентный десктоп", круглосуточно существующий вне зависимости от подключенности к нему NX/VNC-просмотрщиков. Соотв-но весь GUI-софт крутится там, и торрент-клиент - Azureus (которым иногда рулю и через его web-интерфейс).
а у вас торрент-клиент на роутере какой? rtorrent? ;-)
Я не называю тот компьютер роутером, скорее у меня это сервер, предоставляющий "перманентный десктоп", круглосуточно существующий вне зависимости от подключенности к нему NX/VNC-просмотрщиков. Соотв-но весь GUI-софт крутится там, и торрент-клиент - Azureus (которым иногда рулю и через его web-интерфейс).
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
понятно :-)
резюмируем: дешевле настроить ограничение в rtorrent (<свой клиент>) скорости по расписанию и/или вручную делать это :-)
резюмируем: дешевле настроить ограничение в rtorrent (<свой клиент>) скорости по расписанию и/или вручную делать это :-)
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: QoS, локальный трафик
резюмируем: дешевле настроить ограничение в rtorrent (<свой клиент>) скорости по расписанию и/или вручную делать это :-)
Ну да...
Но правильнее было бы разобраться-таки с IMQ и написать простой и подробный howto по настройке (или некий скрипт, который будет её сильно автоматизировать).
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
думается, что моих знаний в сетевых делах линукса не хватит реализовать и написать что-то внятное, потому что я не сисадмин :-) а линукс для меня десктоп на работе, и скорее игрушка :-)
а вот если бы кто-то из гуру сделал - тогда да....
ps: странно что на офсайте IMQ всё так скудненько описано...
а вот если бы кто-то из гуру сделал - тогда да....
ps: странно что на офсайте IMQ всё так скудненько описано...
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: QoS, локальный трафик
моих знаний в сетевых делах линукса не хватит реализовать и написать что-то внятное
Да это так, мысли вслух. Я и не говорю, что именно Вам нужно этим заняться. Возможно - мне, возможно - кому-нибудь ещё.
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
собственно, товарищи потомки, если вы читаете это сообщение и внятный howto по IMQ уже написан - сделайте теме, пожалуйста, up с линком (на почту я подписан) :-)
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
[fun]
мозговой штурм с коллегами родил следующее решение:
на локальной тачке запускается приложение (для простоты и кросплатформенности написанное на питоне). висит в трее, по клику показывает слайдер с нужной скоростью. на сервере по крону раз в минуту запускается такой же питоновский скрипт, который коннектится к клиентскому "виджету" и выставляет нужную скорость rtorrent'у :-)
[fun]
мозговой штурм с коллегами родил следующее решение:
на локальной тачке запускается приложение (для простоты и кросплатформенности написанное на питоне). висит в трее, по клику показывает слайдер с нужной скоростью. на сервере по крону раз в минуту запускается такой же питоновский скрипт, который коннектится к клиентскому "виджету" и выставляет нужную скорость rtorrent'у :-)
[fun]
-
zerkms
- Сообщения: 155
- ОС: Gentoo, Windows 7 Home Premium
Re: QoS, локальный трафик
написал примитивный скрипт, который по трафику на цепочке 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;