Jump to content

Flexshape for Linux - Dynamic Shaper


Recommended Posts

В общем есть проектик - написал скрипт, что-то вроде CBQ но основанный на HTB, который динамически изменяет скорость в зависимости от загрузки канала на пользователя. Умеет работать с интерфейсами ВПН - то есть на линухе создается каждый раз разный интерфейс - так вот ЭТО может находить нужный интерфейс и шейпить что нам нужно. Файлы конфигураций приближены по формату к конфигам CBQ.init. Сам файл лежит здесь (извините за выбор хостинга)

http://flexshape.narod.ru/flexshape-alpha-v1-20051024.tar.gz

размер - 17кбайт

Документалка внутри - на английском (моем кривом английском) и на русском.

Что хочу от вас - протестируйте у кого есть возможность на наличие багов, т.к. не хочется дальше его дорабатывать, если в нем еще будут ошибочки. Конечно, идей много - реализовать их все хочется, так что жду еще ваших коментариев нужно ли оно.

Link to post
Share on other sites

Руль..... пойдет....

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

настоящий пользователь GNU

:)

Link to post
Share on other sites

Забыл сказать, что версия альфа - то бишь исключительно для тестинга. Просто не рекомендую запускать в работу, хотя у меня уже успел поработать пару часов на всю локалку - могу сказать преркасно работает. Но появилось пару вопроскиов - буду тестить дальше. И, конечно же, продолжаю ждать замечаний по ошибкам :)

Да и еще одно. Кто знает готовые программы тестеры - в общем нужно получить общую статистику загрузки памяти и процессора моей программой, а то неприкольно как-то наблюдать top или клацать free, uptime...

Link to post
Share on other sites

Только что проверил - работает, сразу закачивает... Если не идет - могу выслать на мыло. Или предлагайте еще одно место для вылаживания.

Link to post
Share on other sites

О, пасибки...

Я на народ перегрузил файл - добавил ридми на русском в кодировке виндузной... Есть желающие под виндой почитать :)

Link to post
Share on other sites
  • 2 months later...

Есть канал на инет со скоростю в зависимости от трафика: Украина - 1 Мбит, мир - 128 Кбит.

Я хочу шейпить с помощью вашей проги только иностранный (неукраинский) трафик. Для этого для иностранного трафик в iptables я делаю REDIRECT на порт 3128 и он идет на проксю. Внимание, вопрос: смогу ли я создать класс на основе порта-адресата 3128 и т.о. шейпить только иностранный трафик? Спасибо.

Link to post
Share on other sites

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

 

Кста, я сейчас весь в работе - не знаю когда будет следующая версия, но будет обязательно - крайне не рекомендую использовать шейпер для динамических интерфейсов - забивает процессор уже при 5-10 классах.

Link to post
Share on other sites
Насколько я понимаю процесс обработки пакетов приходящих в линукс - могу сказать, что вряд ли будет работать. Т.к. шейпер работает на исходящие пакеты, то будет проблематично указать с какого интерфейса идут пакеты и куда. То есть порт указать укажем - а вот куда трафик исходить будет? на внутрь - есть дополнительные модули для шейпера, но они иммитируют входящий интерфейс и задерживают трафик на прием - в моем шейпере нет поддержки этого.

 

В таком случае скажите, на каком этапе фильтрации транзитных пакетов работает ваша программа (mangle prerouting -> nat prerouting -> mangle forward -> filter forward -> mangle postrouting -> nat postrouting)?

Если уже после nat postrouting, то можно сначала в этой таблице сделать такое маскирование для иностранных пакетов (iptables -t nat -A POSTROUTING -p tcp -o eth1 -j SNAT --to-source 194.236.50.155:1024) и т.о. ваша программа могла бы на этом внешнем интрефейсе (eth1) на основе уже порта-источника 1024 шейпить трафик. Или снова мимо?

Link to post
Share on other sites

Да, теперь работать будет - по порту источнику в этом случае можно просто указать порт источник и будет шейпиться вся информация с 1024 порта, а если параллельно указывать абобента - айпи-приемник, то шейпер будет работать на отдельного клиента :(

 

ЗЫ. Вопрос ко всем, каким образом можно обратиться непосредственно к системе и узнать информацию об интерфейсах присутствующих в данный момент? Т.к. в последней версии просиходит обработка текстовой ифнормации из "/sbin/ip addr show", то достаточно нагружает процесор несколько таких процессов да и еще раз в две-три секунды. Чувствую, что следующая версия выйдет еще на перле в виде скрипта, а следующая за ней будет в виде исходника на С для компиляции

Link to post
Share on other sites

И вопрос непосредственно ко всем. В виду того, что "тяжелый" режим работает кое-как, есть уже алгоритм который охладит процессор на 50% (в частности поиск интерфейсов динамических будет производится одним ведущим скриптом). И алгоритм отдельно для ППП соединений (используя ip-up ip-down). Так вот вопрос: стоит ли оставлять эту старую версию алгоритма в шейпере?

Link to post
Share on other sites
  • 4 months later...
И вопрос непосредственно ко всем. В виду того, что "тяжелый" режим работает кое-как, есть уже алгоритм который охладит процессор на 50% (в частности поиск интерфейсов динамических будет производится одним ведущим скриптом). И алгоритм отдельно для ППП соединений (используя ip-up ip-down). Так вот вопрос: стоит ли оставлять эту старую версию алгоритма в шейпере?

Уж очень хотся поюзать...

Заранее Респект. Очень интересная идея.

Link to post
Share on other sites
  • 3 months later...

наработки есть конечно, другой вопрос в том а функционально ли будет это для других ?

 

лично я не против поделится, но без поставленой задачи это просто набор скриптов...

Link to post
Share on other sites

Извиняюсь, что долго не отвечал - завален работой по самое нехочу. Шейпер однозначно будет переписан. И переписан по всем швам. Уже сейчас нужна поддержка управления на основе списков и общих классов. Как упоминалось раньше - управление для динамических интерфейсов используя ip-up ip-down.

 

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

Link to post
Share on other sites

2 N.Leiten

 

Два вопроса:

1. Пока только расчехляю шейпер, и пока не знаю, может ли он так делать.

Есть канал на 256Кб/с. Ну допустим я создал класс и ограничил всех юзеров, до половины всего канала - 128Кб/с. И в случае, если их становится слишком много, и все чего-нить качают, то скорость (по идее) должна равномерно падать у всех юзеров. А если юзер или группа юзеров в сумме не превышают скорость канала (в моем случае это вряд ли возможно, но все же), то даст ли шейпер свободную часть канала в использование, или она так и будет простаивать? Если этого нет, то хотелось бы видеть эту возможность в новой версии. Желательно, чтобы это было опционально.

 

2. Где-то тут на форуме читал, что новый релиз на С выйдет в сентябре. Так когда же (хотя бы бриблизительно) ждать?

Link to post
Share on other sites

Да, действительно были планы до сентября закончить, учитывая, что переделывать начал в июне, на том и остановился, т.к. был завален работой и мыслью об отдыхе. Отдохнуть не дали, вот теперь пашу дальше. О приблизительных сроках выхода говорить не буду, т.к. и сейчас завален работой, и в соседнем треде обещался сервер для чата закончить. Сам шейпер переписать - около недели времени. Ориентировочно ним буду заниматься сразу по завершению работы над чатом :)

 

Насчет возможности использования "гуляющего" канала - подумать можно, но не факт что получится легкой кровью это реализовать. В общем буду думать - безвыходных ситуаций не бывает.

 

Ну и конечно, все возможности будут опциональными. Вот пока не начал писать жду новых предложений, для того, чтоб упарвление шейпером сделать простым и понятным, а то первая версия немного с толку сбивает :(

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...