Перейти к содержимому
Калькуляторы

sc: скрипт для управления Linux-шейпером

photon, спасибо, с $o_if все получается хорошо, а с $i_if - нет, если убрать его во всех функциях, то не могут заполниться массивы

например, вот здесь:

 

sub u32_load
{
       my ($ip, $cid, $rate);
       my $ret = E_OK;

       open my $TCFH, '-|', "$tc -p -iec filter show dev $i_if"
               or log_croak("unable to open pipe for $tc");
       my @tcout = <$TCFH>;
       close $TCFH or log_carp("unable to close pipe for $tc");
       for my $i (0 .. $#tcout) {
...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В таких местах надо заменить переменную $i_if на $o_if.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В таких местах надо заменить переменную $i_if на $o_if.

 

Спасибо, всё получилось! Надеемся увидеть такую опцию в новых версиях вашего скрипта, очень полезно в случае с несколькими бгп-сессиями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, стоит сделать такую опцию, это довольно просто реализуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

добрый день!

на унстабле ядре не хочет работать

uname -a

Linux shaper 3.9-0.bpo.1-amd64 #1 SMP Debian 3.9.6-1~bpo70+1 x86_64 GNU/Linux

а также на 10 и 11

при выводе команды:

sbin/tc qdisc add dev eth3 root handle 1: htb

ругается - RTNETLINK answers: File exists

хотя если набрать

sbin/tc qdisc add dev eth3 root handle 1: htb default 9

все хорошо проходит

Куда копать, что ему нехватает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, никогда такого не видел. Сейчас тестирую новый релиз, надо будет его с новыми ядрами проверить. Если там поломали HTB, так что без default-класса не работает, то просто добавьте "... default fffe" в соответствующих местах. Там все равно весь нефильтрованный трафик блокируется по умолчанию.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если пользуюсь "патчем от Петрович-2012", то как поправить default-класс, чтобы не блокировался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

--- a/sc    Thu Jan 10 00:13:36 2013 -0800
+++ b/sc    Wed Nov 13 18:16:47 2013 +0100
@@ -1285,7 +1285,7 @@
{
   my ($dev, $match, $offset) = @_;

-   $TC->("qdisc add dev $dev root handle 1: htb");
+   $TC->("qdisc add dev $dev root handle 1: htb default fffe");
   $TC->("filter add dev $dev parent 1:0 protocol ip pref $pref_hash u32");
   foreach my $net (sort {$filter_nets{$a}{'ht'} <=> $filter_nets{$b}{'ht'}}
     keys %filter_nets) {
@@ -1345,10 +1345,10 @@
   }

   # block all other traffic
-   $TC->(
-       "filter add dev $dev parent 1:0 protocol ip pref $pref_default ".
-       'u32 match u32 0 0 at 0 police mtu 1 action drop'
-   );
+#  $TC->(
+#      "filter add dev $dev parent 1:0 protocol ip pref $pref_default ".
+#      'u32 match u32 0 0 at 0 police mtu 1 action drop'
+#  );
   return $?;
}

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите как сделать так, чтобы трафик с некоторых ip(ip сайтов) на этом шейпере не шейпился, а проходил мимо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите как сделать так, чтобы трафик с некоторых ip(ip сайтов) на этом шейпере не шейпился, а проходил мимо?

Речь идет о сайтах из внешней сети? Если да, то нужно дописать необходимые правила tc: создать отдельный класс обслуживания и заворачивать туда трафик с помощью u32 filters. Значение prio для этих фильтров должно быть ниже, чем для остальных правил.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

photon, да, именно сайты из внешней сети. Был бы крайне вам благодарен за пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас проверил работу sc в одном из новых дистрибутивов. В версии iproute2-ss130716 не работает чтение правил через пайп, которое используется для ускорения загрузки правил (echo ... | tc -batch). Если отключить эту фичу или делать чтение правил через временный файл (tc -b filename), то все работает. Это какой-то лютый идиотизм, я собираюсь писать Хэммингеру bugreport. У кого-то еще есть похожие проблемы?

 

UPDATE: Глянул в исходники. Все работает нормально, если поставить тире после -batch: echo ... | tc -batch -.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ещё раз пропишу благодарность за этот полезный скрипт !!!

Не бросайте это благое дело :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за полезный скрипт

 

Выкладываю реализацию с использованием MARK

 

 

IP rate mark

sc dbadd 10.10.10 2048 1235

 

работает на sqllite на mysql не пробовал но думаю труда не составит до мускул зделать :)

sc.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо. Однако, если вместо MARK использовать номера классов tc, то можно обойтись вообще без iptables.

 

Есть следующий вопрос: кто-нибудь пользуется классификацией трафика с помощью flow (filter_method = flow)? Я собираюсь выкинуть этот метод, потому что он тянет за собой зависимости от iptables и ipset, и обладает меньшими возможностями, чем хэш-фильтры u32. Единственное его достоинство -- простота правил, один хэш на все 2^16 адресов.

 

работает на sqllite на mysql не пробовал но думаю труда не составит до мускул зделать :)

Конечно. Perl DBI реализует некий абстрактный интерфейс к БД и может работать даже поверх CSV-файлов. Я уже как-то пробовал.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кто-нибудь пользуется классификацией трафика с помощью flow

мы нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

День добрый. Ответьте на ламерский вопрос. Сколько пользователей данный калиссификатор способен классифицировать?

интересует практика: гигабит в сек на вход, количество пользователей (ip=скорость) и производительность.

Прочитал тему, порыл интернет, увы кроме фраз, тысячи и теория ничего не нашел. Либо тыкните пальцем в куда надо :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

photon, а можно ли вас про-donate'ить, чтобы вы реализовали возможность шейпить по /29 на пользователя, причём адреса могут быть из нескольких сетей /16 (10.5[2-4].0.0/16)? Или это архитектурно невозможно?

 

Сейчас на FreeBSD, надоело бегать с бубном вокруг и шаманить для получения нормальной сетевой производительности с NAT и shaper.

 

 

Изменено пользователем Dyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

photon, а можно ли вас про-donate'ить, чтобы вы реализовали возможность шейпить по /29 на пользователя, причём адреса могут быть из нескольких сетей /16 (10.5[2-4].0.0/16)? Или это архитектурно невозможно?

 

Сейчас на FreeBSD, надоело бегать с бубном вокруг и шаманить для получения нормальной сетевой производительности с NAT и shaper.

Это возможно, в базе нужно будет хранить две таблицы в формате (classid, rate) и (network, classid). Донэйтить через PayPal можно тут: https://sourceforge.net/p/sc-tool/donate/ . Пишите в личку, если нужно обсудить детали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В следующем релизе удалю фильтр flow и сделаю поддержку дисциплины hfsc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо. Однако, если вместо MARK использовать номера классов tc, то можно обойтись вообще без iptables.

 

Есть следующий вопрос: кто-нибудь пользуется классификацией трафика с помощью flow (filter_method = flow)? Я собираюсь выкинуть этот метод, потому что он тянет за собой зависимости от iptables и ipset, и обладает меньшими возможностями, чем хэш-фильтры u32. Единственное его достоинство -- простота правил, один хэш на все 2^16 адресов.

 

работает на sqllite на mysql не пробовал но думаю труда не составит до мускул зделать :)

Конечно. Perl DBI реализует некий абстрактный интерфейс к БД и может работать даже поверх CSV-файлов. Я уже как-то пробовал.

 

Ну данная реализация с марк для пирингов и NAT

 

В нашем случае это NAT + Пирин на неораниченой скорости

т.к. проблема с IP v4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вышла версия 1.5 с поддержкой HFSC в качестве корневой дисциплины. Ходят слухи, что HFSC якобы оптимальнее, чем HTB. Так ли это на самом деле?

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может вопрос глупый, скажите будет ли работать шейпер если в качестве интерфейса к примеру, указывать вланы входного eth1.1000 и выходного eth1.1001 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.