Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: [FAQ] Ограничение скорости для клиентов на Ubuntu-Server (htb.init)  (Прочитано 166826 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Тоесть если у меня все анлимщики-клиенты..  ???тогда мне надо использовать htb ? или что...
тогда вопрос : если 20 человек начинает активно использовать интернет.... и по договору(!) у каждого должно быть по 1 МБиту, а общий канал составляет 20 Мбит, что останеться остальным 150 клиентам...??? :o

 как между ними распределиться скорость?? на циске это как-то балансировалось отлично.... получалось что у каждого из 170 клиентов по спидтесту было от 800 кБит до 1МБит скорости....   возможна ли реализация такой балансировки скорости на нашей, всеми любимой, Ubuntuма-сервере, новоиспеченой сборки.?

Желающие поделиться обосноваными мнениями и советами дельными,отписывайтесь...
Сенкс! :coolsmiley:
Ну вы же не одновременно эти спидтесты запускали на всех клиентах.
Во вторых, договор скорее всего не гарантирует скорости в 1 мбит
покажите как вы делали это на циске.
ну и для начала поднимите vpn (или pppoe) сервер, без него всё-таки в этой ситуации никак

Ну может и не описано в договоре.. но 768кБ должно быть.

Да, то что на всех клиентах спидтест не запускался одночасно - это верно подмечено.
На циске это все реализировалось аксес-листом с айпишкой клиента, к которому привязывался traffic-shape group на внутренний фаст-езернет, соответственно резалась скорость на выходе, тоесть на download от клиента.
Тем самым на каждого клиента + 1 ацес-лист и шейп на ЦПУ  циски. Ей это не нравиться уже.. чем она и показывает свое недовольство критической загруженностью цпу. Так то...
« Последнее редактирование: 20 Август 2008, 01:25:56 от TrEK »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Решение на основе htb.init без VPN-серверов.

Дано:
eth0 - смотрит в локалку
eth1 - смотрит в инет

NAT на eth1 включен, и клиенты, подключенные к eth0, могут ходить в инет через eth1.

Клиентов 150 и они имеют адреса из диапазона 192.168.0.1-150.

Необходимо:
Ограничить максимальную скорость для каждого клиента потолком в 1МБит. Минимальной гарантируемой скорости для клиентов не установлено (то есть - при загруженном канале, пропускная способность делится поровну).

Решение:
1. В скрипте htb.init проверяем и корректируем по вкусу переменные HTB_PATH, HTB_CACHE, TC, IP, MP.
2. cp htb.init /etc/init.d/htb
3. В папке, в которую указывает HTB_PATH, создаем следующие файлы:

eth0:
R2Q=20
DEFAULT=0
R2Q - коэффициент, определяющий соотношение точности/скорости работы шейпера (см. Замечание 1).
DEFAULT - идентификатор класса, в который попадают пакеты, если они не попадают под другие правила. Класс с идентификатором 0 существует всегда и пропускает пакеты без всякого шейпинга, то есть на полной скорости.
Этим файлом мы инициализировали шейпер на интерфейсе eth0.

eth0-2.root:
RATE=20Mbit
Этим файлом мы создали корневой класс траффика на интерфейсе eth0 и ограничили максимальную скорость отдачи через этот класс 20-ю мегабитами.

eth0-2:2001:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.1
Этим файлом мы создали класс для первого клиента.
RATE - гарантируемая скорость для клиента. Поскольку в нашем случае не нужно гарантировать никакой скорости, но HTB этого требует, исходим из неравенства: 20000Кбит / 150 > RATE.
CEIL - максимальная скорость для клиента при свободном канале.
LEAF - указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями.
RULE - правило, задающее, какой трафик будет попадать в этот класс (см. Замечание 1). В данном случае в класс попадает весь трафик, имеющий IP назначения 192.168.0.1.

eth0-2:2002:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.2

.........

eth0-2:2150:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.150

Замечание 1: О назначении и значениях параметров, которые указываются в файлах, и о именах файлов можно узнать из скрипта htb.init - там вверху есть неплохая справка.
Замечание 2: В именах файлов всё, что идет после точки, является комментарием.
Замечание 3: В файлах можно использовать комментарии, начинающиеся с #.

4. /etc/init.d/htb start

Всё, шейпер включен. Далее, если что-то изменится в конфигруации, нужно сделать /etc/init.d/htb restart.

Проверить работу скрипта htb.init, кроме спидтестов, можно просмотром конфигурации командами:
tc class show dev eth0
tc qdisc show dev eth0
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Решение на основе htb.init без VPN-серверов.

Дано:
eth0 - смотрит в локалку
eth1 - смотрит в инет

NAT на eth1 включен, и клиенты, подключенные к eth0, могут ходить в инет через eth1.

Клиентов 150 и они имеют адреса из диапазона 192.168.0.1-150.

Необходимо:
Ограничить максимальную скорость для каждого клиента потолком в 1МБит. Минимальной гарантируемой скорости для клиентов не установлено (то есть - при загруженном канале, пропускная способность делится поровну).

Решение:
1. В скрипте htb.init проверяем и корректируем по вкусу переменные HTB_PATH, HTB_CACHE, TC, IP, MP.
2. cp htb.init /etc/init.d/htb
3. В папке, в которую указывает HTB_PATH, создаем следующие файлы:

eth0:
R2Q=20
DEFAULT=0
R2Q - коэффициент, определяющий соотношение точности/скорости работы шейпера (см. Замечание 1).
DEFAULT - идентификатор класса, в который попадают пакеты, если они не попадают под другие правила. Класс с идентификатором 0 существует всегда и пропускает пакеты без всякого шейпинга, то есть на полной скорости.
Этим файлом мы инициализировали шейпер на интерфейсе eth0.

eth0-2.root:
RATE=20Mbit
Этим файлом мы создали корневой класс траффика на интерфейсе eth0 и ограничили максимальную скорость отдачи через этот класс 20-ю мегабитами.

eth0-2:2001:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.1
Этим файлом мы создали класс для первого клиента.
RATE - гарантируемая скорость для клиента. Поскольку в нашем случае не нужно гарантировать никакой скорости, но HTB этого требует, исходим из неравенства: 20000Кбит / 150 > RATE.
CEIL - максимальная скорость для клиента при свободном канале.
LEAF - указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями.
RULE - правило, задающее, какой трафик будет попадать в этот класс (см. Замечание 1). В данном случае в класс попадает весь трафик, имеющий IP назначения 192.168.0.1.

eth0-2:2002:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.2

.........

eth0-2:2150:
RATE=100Kbit
CEIL=1Mbit
LEAF=sfq
RULE=192.168.0.150

Замечание 1: О назначении и значениях параметров, которые указываются в файлах, и о именах файлов можно узнать из скрипта htb.init - там вверху есть неплохая справка.
Замечание 2: В именах файлов всё, что идет после точки, является комментарием.
Замечание 3: В файлах можно использовать комментарии, начинающиеся с #.

4. /etc/init.d/htb start

Всё, шейпер включен. Далее, если что-то изменится в конфигруации, нужно сделать /etc/init.d/htb restart.

Проверить работу скрипта htb.init, кроме спидтестов, можно просмотром конфигурации командами:
tc class show dev eth0
tc qdisc show dev eth0


Большое спасибо за пост... все четко и грамотно описано. Буду пробовать.

Небольшая приметочка: у меня отсутстует каталог /etc/sysconfig/htb, вернее /etc/sysconfig. Можно просто создать "sysconfig" в /etc/, или на то требуеться спецкоманда со спецпараметрами ?... :-\
« Последнее редактирование: 19 Август 2008, 14:53:41 от TrEK »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Небольшая приметочка: у меня отсутстует каталог /etc/sysconfig/htb, вернее /etc/sysconfig. Можно просто создать "sysconfig" в /etc/, или на то требуеться спецкоманда со спецпараметрами ?... :-\
Он отсутствует, потому что изначально htb.init создавался для RedHat-based дистрибутивов, где такой каталог присутствует по умолчанию. Собственно, проверялся скрипт на ASPLinux, под Ubuntu я его не пробовал, но должно работать, возможно вы будете первым. :)
Да, можно просто создать каталог. Можно и в другом месте конфигурацию хранить - главное в скрипте изменить соответственно.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Нус.. тогда пробуем создать... посмотрим что получиться. ;)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru


4. /etc/init.d/htb start

Всё, шейпер включен. Далее, если что-то изменится в конфигруации, нужно сделать /etc/init.d/htb restart.




root@ubuntu:/etc/sysconfig# sudo /etc/init.d/htb start
**HTB: /etc/sysconfig/htb does not exist or is not readable!
root@ubuntu:/etc/sysconfig# sudo /etc/init.d/htb stop
**HTB: /etc/sysconfig/htb does not exist or is not readable!
 :'(

гм... в чем же баг?
Каталог создал, файлы создал.. все по мануалу Вашему и чуть с htb.init ,... в /init.d/ закинул файл.. а не запускаеться.
« Последнее редактирование: 19 Август 2008, 17:50:55 от TrEK »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
root@ubuntu:/etc/sysconfig# sudo /etc/init.d/htb start
**HTB: /etc/sysconfig/htb does not exist or is not readable!
root@ubuntu:/etc/sysconfig# sudo /etc/init.d/htb stop
**HTB: /etc/sysconfig/htb does not exist or is not readable!
 :'(

гм... в чем же баг?
А он вам написал, в чем проблема. Если не знаете английский язык, воспользуйтесь словарём или онлайн переводчиком.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Да я то понимаю что он написал.. вот только причина не очень ясна...
Если конфигурационный файл я создал там где указан путь...значит проблема не в отсутствии файла Видимо надо подправить в том htb.init что-то?? хм... :-\

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
ls -ld /etc/sysconfig/htb
ls -l /etc/sysconfig/htb
в студию.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
ls -ld /etc/sysconfig/htb
ls -l /etc/sysconfig/htb
в студию.

root@ubuntu:/# ls -ld /etc/sysconfig/htb
-rwxr-xr-x 1 root root 32038 2002-01-05 19:22 /etc/sysconfig/htb

root@ubuntu:/# ls -l /etc/sysconfig/htb
-rwxr-xr-x 1 root root 32038 2002-01-05 19:22 /etc/sysconfig/htb

root@ubuntu:/# sudo /etc/init.d/htb start
**HTB: /etc/sysconfig/htb does not exist or is not readable!
__________________________________________

Мдэ..
Возможно по порядку:
1. в скачаном htb.init-v0.8.5 указал рабочий каталог, в моем случае не менял путь... просто в /etc/ создал каталог /sysconfig/
2. cp htb.init  /etc/init.d/htb
3. в /etc/sysconfig/ поместил файлы :
    eth0,
    eth0-2.root,
    eth0-2:2001,
    eth0-2:10.www,
    eth0-2:20.smtp,
    eth0-2:30.dfl.
     ... и + ко всему в тот же каталог кинул cp htb.init  /etc/sysconfig/htb
« Последнее редактирование: 20 Август 2008, 11:50:52 от TrEK »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
root@ubuntu:/# ls -l /etc/sysconfig/htb
-rwxr-xr-x 1 root root 32038 2002-01-05 19:22 /etc/sysconfig/htb
Ну вот оно. У тебя /etc/sysconfig/htb - это не папка с файлами, а сам скрипт!
 
Файлы eth0, eth0-2.root и т.п. нужно располагать в папке /etc/sysconfig/htb/, а не в /etc/sysconfig/.
/etc/sysconfig/htb/ - это должна быть папка с файлами, а не скрипт. Сам скрипт лежит только в /etc/init.d/


PS. Будь внимателен!
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
PS. Будь внимателен!

мдя.. :-[
меня сбило с толку то, что в конфиге было написано /etc/sysconfig/htb , а не /etc/sysconfig/htb/ ... впредь буду более внимателным :)


root@ubuntu:/etc/sysconfig# sudo /etc/init.d/htb restart
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.


.. дела продвинулись. Щас будем разбираться.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Выскакиевает эта же ошибка связана с параметром "-maxdepth" в /etc/init.d/htb есть три строки в которых -maxdepth 1

Надо что-то править в конфиге?...

вот куски, где встречаеться этот параметр:

### List of classes in $HTB_PATH
   htb_class_list () {
      for dev in `htb_device_list`; do
         find $HTB_PATH \( -type f -or -type l \) \
         -name "$dev-*" -not -name '*~' -maxdepth 1 \
         -printf "%f\n"| sort
      done
   } # htb_class_list

_____________________________________

### Validate cache against config files
   htb_valid_cache () {
      for dev in `htb_device_list`; do
         [ `find $HTB_PATH \( -type f -or -type l \) \
           -name "$dev*" -maxdepth 1 -newer $HTB_CACHE| \
           wc -l` -gt 0 ] && VALID=0
         [ $VALID -ne 1 ] && break
      done
   } # htb_valid_cache
________________________________________

### Find class config for device $1, which is newer than cache
   htb_cache_older () {
      [ `find $HTB_PATH -type f -name "$1*" -maxdepth 1 \
         -newer $HTB_CACHE| wc -l` -gt 0 ] && return 0
      return 1
   } # htb_cache_older
_____________________________________

« Последнее редактирование: 20 Август 2008, 15:43:55 от TrEK »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Это не ошибка, это предупреждение (warning). Наличие предупреждения не означает, что скрипт не работает.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Это не ошибка, это предупреждение (warning). Наличие предупреждения не означает, что скрипт не работает.

Вроде работает... например в файле eth0-2:2001 изменяя параметр RATE я даю клиенту с айпишкой в RULE ту скокрость которую укажу, но не более чем та, которая указана параметром CEIL ?
/etc/init.d/htb restart  после изменений конфига.

С основой разобрался.. щас будем дальше копать.





 

Страница сгенерирована за 0.167 секунд. Запросов: 23.